diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 000000000..924174dc1 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-reportgenerator-globaltool": { + "version": "5.2.1", + "commands": [ + "reportgenerator" + ] + } + } +} diff --git a/.editorconfig b/.editorconfig index 1227fcc9b..8e51a965d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,6 +13,8 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true +file_header_template = Copyright (c) Toni Solarin-Sodara\nLicensed under the MIT license. See LICENSE file in the project root for full license information. + # XML project files [*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] indent_size = 2 @@ -42,7 +44,7 @@ end_of_line = crlf # Code files [*.{cs,csx,vb,vbx}] -indent_size = 4 +indent_size = 2 insert_final_newline = true charset = utf-8-bom ############################### @@ -53,6 +55,8 @@ charset = utf-8-bom dotnet_sort_system_directives_first = true ## IDE0005: Using directive is unnecessary. dotnet_diagnostic.IDE0005.severity = warning +## IDE0007 use 'var' instead of explicit type +dotnet_diagnostic.IDE0007.severity = none # License header file_header_template = Copyright (c) Toni Solarin-Sodara\nLicensed under the MIT license. See LICENSE file in the project root for full license information. ## IDE0073: The file header is missing or not located at the top of the file @@ -132,12 +136,15 @@ dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case dotnet_diagnostic.IDE1006.severity = warning # IDE0090: Use 'new(...)' dotnet_diagnostic.IDE0090.severity = warning +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 2 +end_of_line = crlf ############################### # C# Coding Conventions # ############################### [*.cs] # Organize usings -csharp_using_directive_placement = outside_namespace:warning +csharp_using_directive_placement = outside_namespace:silent # var preferences - use keywords instead of BCL types, and permit var only when the type is clear csharp_style_var_for_built_in_types = false:warning csharp_style_var_when_type_is_apparent = true:warning @@ -213,3 +220,10 @@ csharp_space_between_square_brackets = false # Wrapping preferences csharp_preserve_single_line_statements = true csharp_preserve_single_line_blocks = true +csharp_prefer_simple_using_statement = true:suggestion +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent diff --git a/.github/ISSUE_TEMPLATE/01-bug_report.md b/.github/ISSUE_TEMPLATE/01-bug_report.md new file mode 100644 index 000000000..cf23db478 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG]" +labels: '' +assignees: '' + +--- + +**Describe the bug** +Please share a clear and concise description of the problem. + +**To Reproduce** +Please include minimal steps to reproduce the problem if possible. E.g.: the smallest possible code snippet; or a small project, with steps to run it. If possible include text as text rather than screenshots (so it shows up in searches). + +**Expected behavior** +Provide a description of the expected behavior. + +**Actual behavior** +Provide a description of the actual behavior observed. If applicable please include any error messages, exception stacktraces or memory dumps. + +**Configuration (please complete the following information):** +Please provide more information on your .NET configuration: + * Which coverlet package and version was used? + * Which version of .NET is the code running on? + * What OS and version, and what distro if applicable? + * What is the architecture (x64, x86, ARM, ARM64)? + * Do you know whether it is specific to that configuration? + +**Additional context** +Add any other context about the problem here. + +> :exclamation: Please also read [Known Issues](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/KnownIssues.md) diff --git a/.github/ISSUE_TEMPLATE/02-blank-issue-template.md b/.github/ISSUE_TEMPLATE/02-blank-issue-template.md new file mode 100644 index 000000000..19921adfb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-blank-issue-template.md @@ -0,0 +1,10 @@ +--- +name: Blank issue template +about: Create a report for questions or feature requests +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/workflows/issue-close.yml b/.github/workflows/issue-close.yml new file mode 100644 index 000000000..c4a17a05f --- /dev/null +++ b/.github/workflows/issue-close.yml @@ -0,0 +1,25 @@ +name: Close inactive issues +on: + schedule: + - cron: "0 1 * * 0" + workflow_dispatch: + +env: + DAYS_BEFORE_ISSUE_CLOSE: 275 + +jobs: + close-issues: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v9 + with: + exempt-issue-labels: "bug,tracking-external-issue,Known Issue" + days-before-issue-close: ${{ env.DAYS_BEFORE_ISSUE_CLOSE }} + close-issue-message: "This issue was closed because it has been inactive for ${{ env.DAYS_BEFORE_ISSUE_CLOSE }} days since being marked as stale." + days-before-pr-stale: -1 + days-before-pr-close: -1 + operations-per-run: 100 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/issue-inactive.yml b/.github/workflows/issue-inactive.yml new file mode 100644 index 000000000..b2bcfaef2 --- /dev/null +++ b/.github/workflows/issue-inactive.yml @@ -0,0 +1,26 @@ +name: Label inactive issues +on: + schedule: + - cron: "0 1 * * 0" + workflow_dispatch: + +env: + DAYS_BEFORE_ISSUE_STALE: 90 + +jobs: + close-issues: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v9 + with: + exempt-issue-labels: "bug,tracking-external-issue,Known Issue,stale" + days-before-issue-stale: ${{ env.DAYS_BEFORE_ISSUE_STALE }} + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for ${{ env.DAYS_BEFORE_ISSUE_STALE }} days with no activity." + days-before-pr-stale: -1 + days-before-pr-close: -1 + operations-per-run: 100 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/issue-untriaged.yml b/.github/workflows/issue-untriaged.yml new file mode 100644 index 000000000..2115d7c30 --- /dev/null +++ b/.github/workflows/issue-untriaged.yml @@ -0,0 +1,25 @@ +# current list of labels: untriaged|duplicate|invalid|bug|enhancement|feature-request|documentation|question|wontfix|Known issue|up-for-grabs|in progress|with repo|needs repo|tracking-external-issue +# https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Roadmap.md + +name: Label issues +on: + issues: + types: + - reopened + - opened +jobs: + label_issues: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/github-script@v6 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ["untriaged"] + }) + diff --git a/.gitignore b/.gitignore index 177132965..478b5fc8b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ -msbuild.binlog +*.binlog # Visual Studio 2015 cache/options directory .vs/ @@ -303,4 +303,16 @@ __pycache__/ .AssemblyAttributes DeterministicTest.props test/coverlet.integration.determisticbuild/*.txt -test/coverlet.integration.determisticbuild/runsettings \ No newline at end of file +test/coverlet.integration.determisticbuild/runsettings + +coverage.json +coverage.xml +coverage.*.json +coverage.*.xml +coverage.cobertura.xml +coverage.opencover.xml +coverage.*.cobertura.xml +coverage.*.opencover.xml + +FolderProfile.pubxml +/NuGet.config diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5d5c71993..ffe337455 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,8 +4,9 @@ Contributions are highly welcome, however, except for very small changes, kindly ## Requirements -.NET SDK 2.2 https://dotnet.microsoft.com/download/dotnet-core/2.2 -.NET SDK 3.1 https://dotnet.microsoft.com/download/dotnet-core/3.1 +[.NET SDK 6.0](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) +[.NET SDK 7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) +[.NET SDK 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) ## Building the Project @@ -18,7 +19,7 @@ Building, testing, and packing use all the standard dotnet commands: dotnet restore dotnet build --no-restore - dotnet pack + dotnet pack -c Debug dotnet test --no-build /p:CollectCoverage=true /p:Include=\"[coverlet.collector]*,[coverlet.core]*,[coverlet.msbuild.tasks]*\" /p:Exclude=\"[coverlet.core.tests.samples.netstandard]*,[coverlet.tests.xunit.extensions]*\" NB. You need to `pack` before testing because we have some integration testing that consume packages diff --git a/DeterministicBuild.targets b/DeterministicBuild.targets deleted file mode 100644 index 13208d103..000000000 --- a/DeterministicBuild.targets +++ /dev/null @@ -1,23 +0,0 @@ - - - - - $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - - - - - - - - - <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> - - - diff --git a/Directory.Build.props b/Directory.Build.props index a075f6f8b..74a9fdaea 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,21 +2,30 @@ $(MSBuildThisFileDirectory) + Debug - $(MSBuildThisFileDirectory)bin\$(Configuration)\Packages\ + true true true snupkg + true - true preview + false true preview - $(NoWarn);NU5105 + $(NoWarn);NU1507;NU5105;CS1591 + true https://api.nuget.org/v3/index.json; + + + + true + $(MSBuildThisFileDirectory)artifacts + 6.0.0 @@ -25,7 +34,49 @@ - - + + + + + $(RepoRoot)artifacts/testresults/$(Configuration.ToLowerInvariant()) + @(VSTestLogger) + + + + $(RepoRoot)artifacts\testresults\$(Configuration.ToLowerInvariant()) + @(VSTestLogger) + + + + + + + 15.9.20 + 1.6.0 + 1.5.0 + + + + diff --git a/Directory.Build.targets b/Directory.Build.targets index d970b1531..8c119d541 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,32 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 000000000..08e359ac2 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,60 @@ + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md index 3575567a4..5dfebc247 100644 --- a/Documentation/Changelog.md +++ b/Documentation/Changelog.md @@ -6,233 +6,307 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## Release date 2024-01-20 +### Packages +coverlet.msbuild 6.0.4 +coverlet.console 6.0.4 +coverlet.collector 6.0.4 + +### Fixed +- Fix empty coverage report when using include and exclude filters [#1726](https://github.com/coverlet-coverage/coverlet/issues/1726) + +## Release date 2024-12-31 +### Packages +coverlet.msbuild 6.0.3 +coverlet.console 6.0.3 +coverlet.collector 6.0.3 + +### Fixed +- Fix RuntimeConfigurationReader to support self-contained builds [#1705](https://github.com/coverlet-coverage/coverlet/pull/1705) by https://github.com/pfeigl +- Fix inconsistent filenames with UseSourceLink after .NET 8 [#1679](https://github.com/coverlet-coverage/coverlet/issues/1679) +- Fix hanging tests [#989](https://github.com/coverlet-coverage/coverlet/issues/989) +- Fix coverlet instrumentation becomes slow after installing dotnet sdk 8.0.200 [#1620](https://github.com/coverlet-coverage/coverlet/issues/1620) +- Fix upgrading v6.0.1 to v6.0.2 increases instrumentation time [#1649](https://github.com/coverlet-coverage/coverlet/issues/1649) +- Fix Unable to instrument module - NET 8 [#1631](https://github.com/coverlet-coverage/coverlet/issues/1631) +- Fix slow modules filtering process [#1646](https://github.com/coverlet-coverage/coverlet/issues/1646) by https://github.com/BlackGad +- Fix incorrect coverage await using in generic method [#1490](https://github.com/coverlet-coverage/coverlet/issues/1490) + +### Improvements +- Cache the regex used in InstrumentationHelper [#1693](https://github.com/coverlet-coverage/coverlet/issues/1693) +- Enable dotnetTool integration tests for linux [#660](https://github.com/coverlet-coverage/coverlet/issues/660) + +## Release date 2024-03-13 +### Packages +coverlet.msbuild 6.0.2 +coverlet.console 6.0.2 +coverlet.collector 6.0.2 + +### Fixed +- Threshold-stat triggers error [#1634](https://github.com/coverlet-coverage/coverlet/issues/1634) +- Fixed coverlet collector 6.0.1 requires dotnet sdk 8 [#1625](https://github.com/coverlet-coverage/coverlet/issues/1625) +- Type initializer errors after updating from 6.0.0 to 6.0.1 [#1629](https://github.com/coverlet-coverage/coverlet/issues/1629) +- Exception when multiple exclude-by-attribute filters specified [#1624](https://github.com/coverlet-coverage/coverlet/issues/1624) + +### Improvements +- More concise options to specify multiple parameters in coverlet.console [#1624](https://github.com/coverlet-coverage/coverlet/issues/1624) + +## Release date 2024-02-19 +### Packages +coverlet.msbuild 6.0.1 +coverlet.console 6.0.1 +coverlet.collector 6.0.1 + ### Fixed --Could not write lines to file CoverletSourceRootsMapping - in use by another process [#1155](https://github.com/coverlet-coverage/coverlet/issues/1155) --Incorrect coverage for methods returning IAsyncEnumerable in generic classes [#1383](https://github.com/coverlet-coverage/coverlet/issues/1383) --Wrong branch coverage for async methods .NET Standard 1.x [#1376](https://github.com/coverlet-coverage/coverlet/issues/1376) --Empty path exception in visual basic projects [#775](https://github.com/coverlet-coverage/coverlet/issues/775) --Allign published nuget package version to github release version [#1413](https://github.com/coverlet-coverage/coverlet/issues/1413) --Sync nuget and github release versions [#1122](https://github.com/coverlet-coverage/coverlet/issues/1122) +- Uncovered lines in .NET 8 for inheriting records [#1555](https://github.com/coverlet-coverage/coverlet/issues/1555) +- Fix record constructors not covered when SkipAutoProps is true [#1561](https://github.com/coverlet-coverage/coverlet/issues/1561) +- Fix .NET 7 Method Group branch coverage issue [#1447](https://github.com/coverlet-coverage/coverlet/issues/1447) +- Fix ExcludeFromCodeCoverage does not exclude method in a partial class [#1548](https://github.com/coverlet-coverage/coverlet/issues/1548) +- Fix ExcludeFromCodeCoverage does not exclude F# task [#1547](https://github.com/coverlet-coverage/coverlet/issues/1547) +- Fix issues where ExcludeFromCodeCoverage ignored [#1431](https://github.com/coverlet-coverage/coverlet/issues/1431) +- Fix issues with ExcludeFromCodeCoverage attribute [#1484](https://github.com/coverlet-coverage/coverlet/issues/1484) +- Fix broken links in documentation [#1514](https://github.com/coverlet-coverage/coverlet/issues/1514) +- Fix problem with coverage for .net5 WPF application [#1221](https://github.com/coverlet-coverage/coverlet/issues/1221) by https://github.com/lg2de +- Fix unable to instrument module for Microsoft.AspNetCore.Mvc.Razor [#1459](https://github.com/coverlet-coverage/coverlet/issues/1459) by https://github.com/lg2de + +### Improvements +- Extended exclude by attribute feature to work with fully qualified name [#1589](https://github.com/coverlet-coverage/coverlet/issues/1589) +- Use System.CommandLine instead of McMaster.Extensions.CommandLineUtils [#1474](https://github.com/coverlet-coverage/coverlet/issues/1474) by https://github.com/Bertk +- Fix deadlog in Coverlet.Integration.Tests.BaseTest [#1541](https://github.com/coverlet-coverage/coverlet/pull/1541) by https://github.com/Bertk +- Add coverlet.msbuild.tasks unit tests [#1534](https://github.com/coverlet-coverage/coverlet/pull/1534) by https://github.com/Bertk + +## Release date 2023-05-21 +### Packages +coverlet.msbuild 6.0.0 +coverlet.console 6.0.0 +coverlet.collector 6.0.0 -### Improvements --Migration of the project to .NET 6.0 [#1473](https://github.com/coverlet-coverage/coverlet/pull/1473) +### Fixed +- Could not write lines to file CoverletSourceRootsMapping - in use by another process [#1155](https://github.com/coverlet-coverage/coverlet/issues/1155) +- Incorrect coverage for methods returning IAsyncEnumerable in generic classes [#1383](https://github.com/coverlet-coverage/coverlet/issues/1383) +- Wrong branch coverage for async methods .NET Standard 1.x [#1376](https://github.com/coverlet-coverage/coverlet/issues/1376) +- Empty path exception in visual basic projects [#775](https://github.com/coverlet-coverage/coverlet/issues/775) +- Allign published nuget package version to github release version [#1413](https://github.com/coverlet-coverage/coverlet/issues/1413) +- Sync nuget and github release versions [#1122](https://github.com/coverlet-coverage/coverlet/issues/1122) + +### Improvements +- Migration of the project to .NET 6.0 [#1473](https://github.com/coverlet-coverage/coverlet/pull/1473) ### Breaking changes - New parameter `ExcludeAssembliesWithoutSources` to control automatic assembly exclusion [1164](https://github.com/coverlet-coverage/coverlet/issues/1164). The parameter `InstrumentModulesWithoutLocalSources` has been removed. since it can be handled by setting `ExcludeAssembliesWithoutSources` to `None`. - The default heuristics for determining whether to instrument an assembly has been changed. In previous versions any missing source file was taken as a signal that it was a third-party project that shouldn't be instrumented, with exceptions for some common file name patterns for source generators. Now only assemblies where no source files at all can be found are excluded from instrumentation, and the code for detecting source generator files have been removed. To get back to the behaviour that at least one missing file is sufficient to exclude an assembly, set `ExcludeAssembliesWithoutSources` to `MissingAny`, or use assembly exclusion filters for more fine-grained control. ## Release date 2022-10-29 -### Packages -coverlet.msbuild 3.2.0 -coverlet.console 3.2.0 -coverlet.collector 3.2.0 +### Packages +coverlet.msbuild 3.2.0 +coverlet.console 3.2.0 +coverlet.collector 3.2.0 ### Fixed --Fix TypeLoadException when referencing Microsoft.Extensions.DependencyInjection v6.0.1 [#1390](https://github.com/coverlet-coverage/coverlet/issues/1390) --Source Link for code generators fails [#1322](https://github.com/coverlet-coverage/coverlet/issues/1322) --Await foreach has wrong branch coverage when method is generic [#1210](https://github.com/coverlet-coverage/coverlet/issues/1210) --ExcludeFromCodeCoverage attribute on local functions ignores lambda expression [#1302](https://github.com/coverlet-coverage/coverlet/issues/1302) +- Fix TypeLoadException when referencing Microsoft.Extensions.DependencyInjection v6.0.1 [#1390](https://github.com/coverlet-coverage/coverlet/issues/1390) +- Source Link for code generators fails [#1322](https://github.com/coverlet-coverage/coverlet/issues/1322) +- Await foreach has wrong branch coverage when method is generic [#1210](https://github.com/coverlet-coverage/coverlet/issues/1210) +- ExcludeFromCodeCoverage attribute on local functions ignores lambda expression [#1302](https://github.com/coverlet-coverage/coverlet/issues/1302) -### Added --Added InstrumentModulesWithoutLocalSources setting [#1360](https://github.com/coverlet-coverage/coverlet/pull/1360) by @TFTomSun +### Added +- Added InstrumentModulesWithoutLocalSources setting [#1360](https://github.com/coverlet-coverage/coverlet/pull/1360) by @TFTomSun ## Release date 2022-02-06 -### Packages -coverlet.msbuild 3.1.2 -coverlet.console 3.1.2 -coverlet.collector 3.1.2 +### Packages +coverlet.msbuild 3.1.2 +coverlet.console 3.1.2 +coverlet.collector 3.1.2 ### Fixed --Fix CoreLib's coverage measurement is broken [#1286](https://github.com/coverlet-coverage/coverlet/pull/1286) --Fix UnloadModule injection [1291](https://github.com/coverlet-coverage/coverlet/pull/1291) +- Fix CoreLib's coverage measurement is broken [#1286](https://github.com/coverlet-coverage/coverlet/pull/1286) +- Fix UnloadModule injection [1291](https://github.com/coverlet-coverage/coverlet/pull/1291) ## Release date 2022-01-30 -### Packages -coverlet.msbuild 3.1.1 -coverlet.console 3.1.1 -coverlet.collector 3.1.1 - -### Fixed --Fix wrong branch coverage with EnumeratorCancellation attribute [#1275](https://github.com/coverlet-coverage/coverlet/issues/1275) --Fix negative coverage exceeding int.MaxValue [#1266](https://github.com/coverlet-coverage/coverlet/issues/1266) --Fix summary output format for culture de-DE [#1263](https://github.com/coverlet-coverage/coverlet/issues/1263) --Fix branch coverage issue for finally block with await [#1233](https://github.com/coverlet-coverage/coverlet/issues/1233) --Fix threshold doesn't work when coverage empty [#1205](https://github.com/coverlet-coverage/coverlet/issues/1205) --Fix branch coverage issue for il switch [#1177](https://github.com/coverlet-coverage/coverlet/issues/1177) --Fix branch coverage with using statement and several awaits[#1176](https://github.com/coverlet-coverage/coverlet/issues/1176) --Fix `CopyCoverletDataCollectorFiles` to avoid to override user dlls for `dotnet publish` scenario [#1243](https://github.com/coverlet-coverage/coverlet/pull/1243) - -### Improvements --Improve logging in case of exception inside static ctor of NetstandardAwareAssemblyResolver [#1230](https://github.com/coverlet-coverage/coverlet/pull/1230) --When collecting open the hitfile with read access [#1214](https://github.com/coverlet-coverage/coverlet/pull/1214) by https://github.com/JamesWTruher --Add CompilerGenerated attribute to the tracker [#1229](https://github.com/coverlet-coverage/coverlet/pull/1229) +### Packages +coverlet.msbuild 3.1.1 +coverlet.console 3.1.1 +coverlet.collector 3.1.1 + +### Fixed +- Fix wrong branch coverage with EnumeratorCancellation attribute [#1275](https://github.com/coverlet-coverage/coverlet/issues/1275) +- Fix negative coverage exceeding int.MaxValue [#1266](https://github.com/coverlet-coverage/coverlet/issues/1266) +- Fix summary output format for culture de-DE [#1263](https://github.com/coverlet-coverage/coverlet/issues/1263) +- Fix branch coverage issue for finally block with await [#1233](https://github.com/coverlet-coverage/coverlet/issues/1233) +- Fix threshold doesn't work when coverage empty [#1205](https://github.com/coverlet-coverage/coverlet/issues/1205) +- Fix branch coverage issue for il switch [#1177](https://github.com/coverlet-coverage/coverlet/issues/1177) +- Fix branch coverage with using statement and several awaits[#1176](https://github.com/coverlet-coverage/coverlet/issues/1176) +- Fix `CopyCoverletDataCollectorFiles` to avoid to override user dlls for `dotnet publish` scenario [#1243](https://github.com/coverlet-coverage/coverlet/pull/1243) + +### Improvements +- Improve logging in case of exception inside static ctor of NetstandardAwareAssemblyResolver [#1230](https://github.com/coverlet-coverage/coverlet/pull/1230) +- When collecting open the hitfile with read access [#1214](https://github.com/coverlet-coverage/coverlet/pull/1214) by https://github.com/JamesWTruher +- Add CompilerGenerated attribute to the tracker [#1229](https://github.com/coverlet-coverage/coverlet/pull/1229) ## Release date 2021-07-19 -### Packages -coverlet.msbuild 3.1.0 -coverlet.console 3.1.0 +### Packages +coverlet.msbuild 3.1.0 +coverlet.console 3.1.0 coverlet.collector 3.1.0 -### Fixed --Fix branch coverage for targetframework net472 [#1167](https://github.com/coverlet-coverage/coverlet/issues/1167) --Fix F# projects with `unkown` source [#1145](https://github.com/coverlet-coverage/coverlet/issues/1145) --Fix SkipAutoProps for inline assigned properties [#1139](https://github.com/coverlet-coverage/coverlet/issues/1139) --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 --Fix `System.MissingMethodException`(TryGetIntArgFromDict) [#1101](https://github.com/coverlet-coverage/coverlet/pull/1101) --Fix ExcludeFromCodeCoverage on props [#1114](https://github.com/coverlet-coverage/coverlet/pull/1114) --Fix incorrect branch coverage with await using [#1111](https://github.com/coverlet-coverage/coverlet/pull/1111) by https://github.com/alexthornton1 +### Fixed +- Fix branch coverage for targetframework net472 [#1167](https://github.com/coverlet-coverage/coverlet/issues/1167) +- Fix F# projects with `unkown` source [#1145](https://github.com/coverlet-coverage/coverlet/issues/1145) +- Fix SkipAutoProps for inline assigned properties [#1139](https://github.com/coverlet-coverage/coverlet/issues/1139) +- 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 +- Fix `System.MissingMethodException`(TryGetIntArgFromDict) [#1101](https://github.com/coverlet-coverage/coverlet/pull/1101) +- Fix ExcludeFromCodeCoverage on props [#1114](https://github.com/coverlet-coverage/coverlet/pull/1114) +- Fix incorrect branch coverage with await using [#1111](https://github.com/coverlet-coverage/coverlet/pull/1111) by https://github.com/alexthornton1 ### Added --Support deterministic reports [#1113](https://github.com/coverlet-coverage/coverlet/pull/1113) --Specifying threshold level for each threshold type [#1123](https://github.com/coverlet-coverage/coverlet/pull/1123) by https://github.com/pbmiguel +- Support deterministic reports [#1113](https://github.com/coverlet-coverage/coverlet/pull/1113) +- Specifying threshold level for each threshold type [#1123](https://github.com/coverlet-coverage/coverlet/pull/1123) by https://github.com/pbmiguel ### Improvements --Implementation of Npath complexity for the OpenCover reports [#1058](https://github.com/coverlet-coverage/coverlet/pull/1058) by https://github.com/benjaminZale +- Implementation of Npath complexity for the OpenCover reports [#1058](https://github.com/coverlet-coverage/coverlet/pull/1058) by https://github.com/benjaminZale ## Release date 2021-02-21 -### Packages -coverlet.msbuild 3.0.3 -coverlet.console 3.0.3 -coverlet.collector 3.0.3 +### Packages +coverlet.msbuild 3.0.3 +coverlet.console 3.0.3 +coverlet.collector 3.0.3 ### Fixed --Fix code coverage stops working if assembly contains source generators generated file [#1091](https://github.com/coverlet-coverage/coverlet/pull/1091) +- Fix code coverage stops working if assembly contains source generators generated file [#1091](https://github.com/coverlet-coverage/coverlet/pull/1091) ## Release date 2021-01-24 -### Packages -coverlet.msbuild 3.0.2 -coverlet.console 3.0.2 -coverlet.collector 3.0.2 +### Packages +coverlet.msbuild 3.0.2 +coverlet.console 3.0.2 +coverlet.collector 3.0.2 ### Fixed --Fix multi-line lambda coverage regression [#1060](https://github.com/coverlet-coverage/coverlet/pull/1060) --Opt-in reachability helper to mitigate resolution issue [#1061](https://github.com/coverlet-coverage/coverlet/pull/1061) +- Fix multi-line lambda coverage regression [#1060](https://github.com/coverlet-coverage/coverlet/pull/1060) +- Opt-in reachability helper to mitigate resolution issue [#1061](https://github.com/coverlet-coverage/coverlet/pull/1061) ## Release date 2021-01-16 -### Packages -coverlet.msbuild 3.0.1 -coverlet.console 3.0.1 -coverlet.collector 3.0.1 +### Packages +coverlet.msbuild 3.0.1 +coverlet.console 3.0.1 +coverlet.collector 3.0.1 ### Fixed --Fix severe loss in coverage [#1043](https://github.com/coverlet-coverage/coverlet/pull/1043) by https://github.com/daveMueller +- Fix severe loss in coverage [#1043](https://github.com/coverlet-coverage/coverlet/pull/1043) by https://github.com/daveMueller ## Release date 2021-01-09 -### Packages -coverlet.msbuild 3.0.0 -coverlet.console 3.0.0 -coverlet.collector 3.0.0 +### Packages +coverlet.msbuild 3.0.0 +coverlet.console 3.0.0 +coverlet.collector 3.0.0 ### Fixed --Attribute exclusion does not work if attribute name does not end with "Attribute" [#884](https://github.com/coverlet-coverage/coverlet/pull/884) by https://github.com/bddckr --Fix deterministic build+source link bug [#895](https://github.com/coverlet-coverage/coverlet/pull/895) --Fix anonymous delegate compiler generate bug [#896](https://github.com/coverlet-coverage/coverlet/pull/896) --Fix incorrect branch coverage with await ValueTask [#949](https://github.com/coverlet-coverage/coverlet/pull/949) by https://github.com/alexthornton1 --Fix switch pattern coverage [#1006](https://github.com/coverlet-coverage/coverlet/pull/1006) +- Attribute exclusion does not work if attribute name does not end with "Attribute" [#884](https://github.com/coverlet-coverage/coverlet/pull/884) by https://github.com/bddckr +- Fix deterministic build+source link bug [#895](https://github.com/coverlet-coverage/coverlet/pull/895) +- Fix anonymous delegate compiler generate bug [#896](https://github.com/coverlet-coverage/coverlet/pull/896) +- Fix incorrect branch coverage with await ValueTask [#949](https://github.com/coverlet-coverage/coverlet/pull/949) by https://github.com/alexthornton1 +- Fix switch pattern coverage [#1006](https://github.com/coverlet-coverage/coverlet/pull/1006) ### Added --Skip autoprops feature [#912](https://github.com/coverlet-coverage/coverlet/pull/912) --Exclude code that follows [DoesNotReturn] from code coverage [#904](https://github.com/coverlet-coverage/coverlet/pull/904) by https://github.com/kevin-montrose --`CoverletReport` MSBuild variable containing coverage filenames [#932](https://github.com/coverlet-coverage/coverlet/pull/932) by https://github.com/0xced --Add Visual Studio Add-In [#954](https://github.com/coverlet-coverage/coverlet/pull/954) by https://github.com/FortuneN --Remove workaround for deterministic build for sdk >= 3.1.100 [#965](https://github.com/coverlet-coverage/coverlet/pull/965) --Allow standalone coverlet usage for integration/end-to-end tests using .NET tool driver [#991](https://github.com/coverlet-coverage/coverlet/pull/991) --Support .NET Framework(>= net461) for in-process data collectors [#970](https://github.com/coverlet-coverage/coverlet/pull/970) +- Skip autoprops feature [#912](https://github.com/coverlet-coverage/coverlet/pull/912) +- Exclude code that follows [DoesNotReturn] from code coverage [#904](https://github.com/coverlet-coverage/coverlet/pull/904) by https://github.com/kevin-montrose +- `CoverletReport` MSBuild variable containing coverage filenames [#932](https://github.com/coverlet-coverage/coverlet/pull/932) by https://github.com/0xced +- Add Visual Studio Add-In [#954](https://github.com/coverlet-coverage/coverlet/pull/954) by https://github.com/FortuneN +- Remove workaround for deterministic build for sdk >= 3.1.100 [#965](https://github.com/coverlet-coverage/coverlet/pull/965) +- Allow standalone coverlet usage for integration/end-to-end tests using .NET tool driver [#991](https://github.com/coverlet-coverage/coverlet/pull/991) +- Support .NET Framework(>= net461) for in-process data collectors [#970](https://github.com/coverlet-coverage/coverlet/pull/970) ## Release date 2020-05-30 -### Packages -coverlet.msbuild 2.9.0 -coverlet.console 1.7.2 -coverlet.collector 1.3.0 +### Packages +coverlet.msbuild 2.9.0 +coverlet.console 1.7.2 +coverlet.collector 1.3.0 ### Fixed --Fix for code complexity not being generated for methods for cobertura reporter [#738](https://github.com/tonerdo/coverlet/pull/798) by https://github.com/dannyBies --Fix coverage, skip branches in generated `MoveNext()` for singleton iterators [#813](https://github.com/coverlet-coverage/coverlet/pull/813) by https://github.com/bert2 --Fix 'The process cannot access the file...because it is being used by another process' due to double flush for collectors driver [#https://github.com/coverlet-coverage/coverlet/pull/835](https://github.com/coverlet-coverage/coverlet/pull/835) --Fix skip [ExcludefromCoverage] for generated async state machine [#849](https://github.com/coverlet-coverage/coverlet/pull/849) +- Fix for code complexity not being generated for methods for cobertura reporter [#738](https://github.com/tonerdo/coverlet/pull/798) by https://github.com/dannyBies +- Fix coverage, skip branches in generated `MoveNext()` for singleton iterators [#813](https://github.com/coverlet-coverage/coverlet/pull/813) by https://github.com/bert2 +- Fix 'The process cannot access the file...because it is being used by another process' due to double flush for collectors driver [#https://github.com/coverlet-coverage/coverlet/pull/835](https://github.com/coverlet-coverage/coverlet/pull/835) +- Fix skip [ExcludefromCoverage] for generated async state machine [#849](https://github.com/coverlet-coverage/coverlet/pull/849) ### Added --Added support for deterministic build for msbuild/collectors driver [#802](https://github.com/tonerdo/coverlet/pull/802) [#796](https://github.com/tonerdo/coverlet/pull/796) with the help of https://github.com/clairernovotny and https://github.com/tmat +- Added support for deterministic build for msbuild/collectors driver [#802](https://github.com/tonerdo/coverlet/pull/802) [#796](https://github.com/tonerdo/coverlet/pull/796) with the help of https://github.com/clairernovotny and https://github.com/tmat ### Improvements --Refactore DependencyInjection [#728](https://github.com/coverlet-coverage/coverlet/pull/768) by https://github.com/daveMueller +- Refactore DependencyInjection [#728](https://github.com/coverlet-coverage/coverlet/pull/768) by https://github.com/daveMueller ## Release date 2020-04-02 -### Packages -coverlet.msbuild 2.8.1 -coverlet.console 1.7.1 -coverlet.collector 1.2.1 +### Packages +coverlet.msbuild 2.8.1 +coverlet.console 1.7.1 +coverlet.collector 1.2.1 ### Fixed --Fix ExcludeFromCodeCoverage attribute bugs [#129](https://github.com/tonerdo/coverlet/issues/129) and [#670](https://github.com/tonerdo/coverlet/issues/670) with [#671](https://github.com/tonerdo/coverlet/pull/671) by https://github.com/matteoerigozzi --Fix bug with nested types filtering [#689](https://github.com/tonerdo/coverlet/issues/689) --Fix Coverage Issue - New Using + Async/Await + ConfigureAwait [#669](https://github.com/tonerdo/coverlet/issues/669) --Improve branch detection for lambda functions and async/await statements [#702](https://github.com/tonerdo/coverlet/pull/702) by https://github.com/matteoerigozzi --Improve coverage, hide compiler generated branches for try/catch blocks inside async state machine [#716](https://github.com/tonerdo/coverlet/pull/716) by https://github.com/matteoerigozzi --Improve coverage, skip lambda cached field [#753](https://github.com/tonerdo/coverlet/pull/753) +- Fix ExcludeFromCodeCoverage attribute bugs [#129](https://github.com/tonerdo/coverlet/issues/129) and [#670](https://github.com/tonerdo/coverlet/issues/670) with [#671](https://github.com/tonerdo/coverlet/pull/671) by https://github.com/matteoerigozzi +- Fix bug with nested types filtering [#689](https://github.com/tonerdo/coverlet/issues/689) +- Fix Coverage Issue - New Using + Async/Await + ConfigureAwait [#669](https://github.com/tonerdo/coverlet/issues/669) +- Improve branch detection for lambda functions and async/await statements [#702](https://github.com/tonerdo/coverlet/pull/702) by https://github.com/matteoerigozzi +- Improve coverage, hide compiler generated branches for try/catch blocks inside async state machine [#716](https://github.com/tonerdo/coverlet/pull/716) by https://github.com/matteoerigozzi +- Improve coverage, skip lambda cached field [#753](https://github.com/tonerdo/coverlet/pull/753) ### Improvements --Trim whitespace between values when reading from configuration from runsettings [#679](https://github.com/tonerdo/coverlet/pull/679) by https://github.com/EricStG --Code improvement, flow ILogger to InstrumentationHelper [#727](https://github.com/tonerdo/coverlet/pull/727) by https://github.com/daveMueller --Add support for line branch coverage in OpenCover format [#772](https://github.com/tonerdo/coverlet/pull/772) by https://github.com/costin-zaharia +- Trim whitespace between values when reading from configuration from runsettings [#679](https://github.com/tonerdo/coverlet/pull/679) by https://github.com/EricStG +- Code improvement, flow ILogger to InstrumentationHelper [#727](https://github.com/tonerdo/coverlet/pull/727) by https://github.com/daveMueller +- Add support for line branch coverage in OpenCover format [#772](https://github.com/tonerdo/coverlet/pull/772) by https://github.com/costin-zaharia ## Release date 2020-01-03 -### Packages -coverlet.msbuild 2.8.0 -coverlet.console 1.7.0 +### Packages +coverlet.msbuild 2.8.0 +coverlet.console 1.7.0 coverlet.collector 1.2.0 ### Added --Add log to tracker [#553](https://github.com/tonerdo/coverlet/pull/553) --Exclude by assembly level System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage [#589](https://github.com/tonerdo/coverlet/pull/589) --Allow coverlet integration with other MSBuild test strategies[#615](https://github.com/tonerdo/coverlet/pull/615) by https://github.com/sharwell +- Add log to tracker [#553](https://github.com/tonerdo/coverlet/pull/553) +- Exclude by assembly level System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage [#589](https://github.com/tonerdo/coverlet/pull/589) +- Allow coverlet integration with other MSBuild test strategies[#615](https://github.com/tonerdo/coverlet/pull/615) by https://github.com/sharwell ### Fixed --Fix and simplify async coverage [#549](https://github.com/tonerdo/coverlet/pull/549) --Improve lambda scenario coverage [#583](https://github.com/tonerdo/coverlet/pull/583) --Mitigate issue in case of failure in assembly loading by cecil [#625](https://github.com/tonerdo/coverlet/pull/625) --Fix ConfigureAwait state machine generated branches [#634](https://github.com/tonerdo/coverlet/pull/634) --Fix coverage overwritten if the project has multiple target frameworks [#636](https://github.com/tonerdo/coverlet/issues/177) --Fix cobertura Jenkins reporter + source link support [#614](https://github.com/tonerdo/coverlet/pull/614) by https://github.com/daveMueller --Fix pdb file locking during instrumentation [#656](https://github.com/tonerdo/coverlet/pull/656) +- Fix and simplify async coverage [#549](https://github.com/tonerdo/coverlet/pull/549) +- Improve lambda scenario coverage [#583](https://github.com/tonerdo/coverlet/pull/583) +- Mitigate issue in case of failure in assembly loading by cecil [#625](https://github.com/tonerdo/coverlet/pull/625) +- Fix ConfigureAwait state machine generated branches [#634](https://github.com/tonerdo/coverlet/pull/634) +- Fix coverage overwritten if the project has multiple target frameworks [#636](https://github.com/tonerdo/coverlet/issues/177) +- Fix cobertura Jenkins reporter + source link support [#614](https://github.com/tonerdo/coverlet/pull/614) by https://github.com/daveMueller +- Fix pdb file locking during instrumentation [#656](https://github.com/tonerdo/coverlet/pull/656) ### Improvements --Improve exception message for unsupported runtime [#569](https://github.com/tonerdo/ -coverlet/pull/569) by https://github.com/daveMueller --Improve cobertura absolute/relative path report generation [#661](https://github.com/tonerdo/coverlet/pull/661) by https://github.com/daveMueller +- Improve exception message for unsupported runtime [#569](https://github.com/tonerdo/ +coverlet/pull/569) by https://github.com/daveMueller +- Improve cobertura absolute/relative path report generation [#661](https://github.com/tonerdo/coverlet/pull/661) by https://github.com/daveMueller ## Release date 2019-09-23 -### Packages -coverlet.msbuild 2.7.0 -coverlet.console 1.6.0 +### Packages +coverlet.msbuild 2.7.0 +coverlet.console 1.6.0 coverlet.collector 1.1.0 ### Added --Output multiple formats for vstest integration [#533](https://github.com/tonerdo/coverlet/pull/533) by https://github.com/daveMueller --Different exit codes to indicate particular failures [#412](https://github.com/tonerdo/coverlet/pull/412) by https://github.com/sasivishnu +- Output multiple formats for vstest integration [#533](https://github.com/tonerdo/coverlet/pull/533) by https://github.com/daveMueller +- Different exit codes to indicate particular failures [#412](https://github.com/tonerdo/coverlet/pull/412) by https://github.com/sasivishnu ### Changed --Skip instrumentation of module with embedded ppbd without local sources [#510](https://github.com/tonerdo/coverlet/pull/510), with this today xunit will be skipped in automatic way. +- Skip instrumentation of module with embedded ppbd without local sources [#510](https://github.com/tonerdo/coverlet/pull/510), with this today xunit will be skipped in automatic way. ### Fixed --Fix exclude by files [#524](https://github.com/tonerdo/coverlet/pull/524) --Changed to calculate based on the average coverage of the module [#479](https://github.com/tonerdo/coverlet/pull/479) by https://github.com/dlplenin --Fix property attribute detection [#477](https://github.com/tonerdo/coverlet/pull/477) by https://github.com/amweiss --Fix instrumentation serialization bug [#458](https://github.com/tonerdo/coverlet/pull/458) --Fix culture for cobertura xml report [#464](https://github.com/tonerdo/coverlet/pull/464) +- Fix exclude by files [#524](https://github.com/tonerdo/coverlet/pull/524) +- Changed to calculate based on the average coverage of the module [#479](https://github.com/tonerdo/coverlet/pull/479) by https://github.com/dlplenin +- Fix property attribute detection [#477](https://github.com/tonerdo/coverlet/pull/477) by https://github.com/amweiss +- Fix instrumentation serialization bug [#458](https://github.com/tonerdo/coverlet/pull/458) +- Fix culture for cobertura xml report [#464](https://github.com/tonerdo/coverlet/pull/464) diff --git a/Documentation/ConsumeNightlyBuild.md b/Documentation/ConsumeNightlyBuild.md index 8f9309335..3901f70a5 100644 --- a/Documentation/ConsumeNightlyBuild.md +++ b/Documentation/ConsumeNightlyBuild.md @@ -8,9 +8,9 @@ To consume nightly builds, create a `NuGet.Config` in your root solution directo - + - + @@ -18,36 +18,44 @@ To consume nightly builds, create a `NuGet.Config` in your root solution directo ## Install packages -### Visual Studio: +### Visual Studio ![File](images/nightly.PNG)\ Example:\ ![File](images/nightlyExample.PNG) -### NuGet (Package Manager console): +### NuGet (Package Manager console) + ```powershell PM> Install-Package coverlet.msbuild -Version X.X.X-preview.X.XXX -Source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json ``` + Example: + ```powershell PM> Install-Package coverlet.msbuild -Version 3.0.4-preview.4.g5de0ad7d60 -Source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json ``` -### .NET CLI: +### .NET CLI + ```bash dotnet add package coverlet.msbuild --version X.X.X-preview.X.XXX --source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json ``` + Example: + ```bash dotnet add package coverlet.msbuild --version 3.0.4-preview.4.g5de0ad7d60 --source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json ``` -### MSBuild project file: +### MSBuild project file ```xml ``` + Example: + ```xml -``` \ No newline at end of file +``` diff --git a/Documentation/DeterministicBuild.md b/Documentation/DeterministicBuild.md index aa984e2dd..f4f12d142 100644 --- a/Documentation/DeterministicBuild.md +++ b/Documentation/DeterministicBuild.md @@ -4,16 +4,17 @@ Support for deterministic builds is available **only** in the `msbuild` (`/p:Col From a coverage perspective, deterministic builds create some challenges because coverage tools usually need access to complete source file metadata (ie. local path) during instrumentation and report generation. These files are reported inside the `.pdb` files, where debugging information is stored. -In local (non-CI) builds, metadata emitted to pdbs are not "deterministic", which means that source files are reported with their full paths. For example, when we build the same project on different machines we'll have different paths emitted inside pdbs, hence, builds are "non deterministic". +In local (non-CI) builds, metadata emitted to pdbs are not "deterministic", which means that source files are reported with their full paths. For example, when we build the same project on different machines we'll have different paths emitted inside pdbs, hence, builds are "non deterministic". As explained above, to improve the level of security of generated artifacts (for instance, DLLs inside the NuGet package), we need to apply some signature (signing with certificate) and validate before usage to avoid possible security issues like tampering. Finally, thanks to deterministic CI builds (with the `ContinuousIntegrationBuild` property set to `true`) plus signature we can validate artifacts and be sure that the binary was built from specific sources (because there is no hard-coded variable metadata, like paths from different build machines). -# Deterministic report +## Deterministic report -Coverlet supports also deterministic reports(for now only for cobertura coverage format). +Coverlet supports also deterministic reports(for now only for __Cobertura__ coverage format). If you include `DeterministicReport` parameters for `msbuild` and `collectors` integrations resulting report will be like: + ```xml @@ -24,45 +25,9 @@ If you include `DeterministicReport` parameters for `msbuild` and `collectors` i ... -``` -As you can see we have empty `` element and the `filename` start with well known deterministic fragment `/_/...` - -**Deterministic build is supported without any workaround since version 3.1.100 of .NET Core SDK** - -## Workaround only for .NET Core SDK < 3.1.100 - -At the moment, deterministic build works thanks to the Roslyn compiler emitting deterministic metadata if `DeterministicSourcePaths` is enabled. Take a look [here](https://github.com/dotnet/sourcelink/tree/master/docs#deterministicsourcepaths) for more information. - -To allow Coverlet to correctly do its work, we need to provide information to translate deterministic paths to real local paths for every project referenced by the test project. The current workaround is to add at the root of your repo a `Directory.Build.targets` with a custom `target` that supports Coverlet resolution algorithm. - -```xml - - - - - $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - - - - - - - - - <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> - - - - ``` -If you already have a `Directory.Build.targets` file on your repo root you can simply copy `DeterministicBuild.targets` (which can be found at the root of this repo) next to yours and import it in your targets file. This target will be used by Coverlet to generate, at build time, a file that contains mapping translation information, the file is named `CoverletSourceRootsMapping` and will be in the output folder of your project. +As you can see we have empty `` element and the `filename` start with well known deterministic fragment `/_/...` You can follow our [step-by-step sample](Examples.md) diff --git a/Documentation/Examples.md b/Documentation/Examples.md index 55f8169f0..2a6e5cc0b 100644 --- a/Documentation/Examples.md +++ b/Documentation/Examples.md @@ -1,4 +1,5 @@ # Examples + ## MSBuild Integration * Using `/p:MergeWith` feature `Documentation/Examples/MSBuild/MergeWith/MergeWith.sln` diff --git a/Documentation/Examples/.editorconfig b/Documentation/Examples/.editorconfig new file mode 100644 index 000000000..d66ee0772 --- /dev/null +++ b/Documentation/Examples/.editorconfig @@ -0,0 +1,8 @@ +# top-most EditorConfig file +# We don't want to import other EditorConfig files and we want +# to ensure no rules are enabled for these asset source files. +root = true + +[*.cs] +# Default severity for all analyzer diagnostics +dotnet_analyzer_diagnostic.severity = none diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/Class1.cs b/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/Class1.cs index 289865e7b..dcb976188 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/Class1.cs +++ b/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/Class1.cs @@ -1,8 +1,6 @@ -using System; - -namespace ClassLibrary1 +namespace ClassLibrary1 { - public class Class1 + public class Class1 { public int Method() { diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj b/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj index 9f5c4f4ab..8271e5471 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj +++ b/Documentation/Examples/MSBuild/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj @@ -2,6 +2,7 @@ netstandard2.0 + false diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.sln b/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.sln index e5ea12eb9..958518178 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.sln +++ b/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.sln @@ -9,7 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibrary1", "ClassLibra EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8AE3B75E-33BA-4E07-AD78-2DBCC3392262}" ProjectSection(SolutionItems) = preProject - DeterministicBuild.targets = DeterministicBuild.targets Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets HowTo.md = HowTo.md diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.targets b/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.targets deleted file mode 100644 index 13208d103..000000000 --- a/Documentation/Examples/MSBuild/DeterministicBuild/DeterministicBuild.targets +++ /dev/null @@ -1,23 +0,0 @@ - - - - - $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - - - - - - - - - <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> - - - diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.props b/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.props index 5c27e11f6..34a4ddf95 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.props +++ b/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.props @@ -8,6 +8,9 @@ - + + all + runtime; build; native; contentfiles; analyzers + diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.targets b/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.targets index 95978e1e1..faf2349ba 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.targets +++ b/Documentation/Examples/MSBuild/DeterministicBuild/Directory.Build.targets @@ -1,4 +1,3 @@ - - + diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/HowTo.md b/Documentation/Examples/MSBuild/DeterministicBuild/HowTo.md index 44b9f2b1f..60ddebbef 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/HowTo.md +++ b/Documentation/Examples/MSBuild/DeterministicBuild/HowTo.md @@ -1,9 +1,10 @@ -To run test we need to generates packages to reference in on test project. +To run test we need to generates packages to reference in on test project. Run from repo root -``` + +```shell C:\git\coverlet λ dotnet pack -Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Core +Microsoft (R) Build Engine version 17.7.4+3ebbd7c49 for .NET Core Copyright (C) Microsoft Corporation. All rights reserved. Restore completed in 73,36 ms for C:\git\coverlet\src\coverlet.core\coverlet.core.csproj. @@ -23,31 +24,34 @@ Copyright (C) Microsoft Corporation. All rights reserved. coverlet.core -> C:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll coverlet.collector -> C:\git\coverlet\src\coverlet.collector\bin\Debug\netcoreapp2.0\coverlet.collector.dll coverlet.msbuild.tasks -> C:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\coverlet.msbuild.tasks.dll - coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverlet.console.dll - coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverlet.console.dll - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.3.0-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.1.7.2-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.1.7.2-preview.6.ga0e22ec622.snupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.3.0-preview.6.ga0e22ec622.snupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.snupkg'. + coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\net6.0\coverlet.console.dll + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.6.0.1-preview.6.g918cd179e0.snupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.6.0.1-preview.6.g918cd179e0.snupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.6.0.1-preview.6.g918cd179e0.snupkg'. ``` + Add msbuild package version generated to `"..\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\XUnitTestProject1.csproj"` + ```xml - netcoreapp3.1 + net6.0 false - - - - - - + + + + all + runtime; build; native; contentfiles; analyzers + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -58,14 +62,15 @@ Add msbuild package version generated to `"..\Documentation\Examples\MSBuild\Det - ``` + Go to test project folder and run -``` + +```shell C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild (detbuilddocs -> origin) λ dotnet test /p:CollectCoverage=true /p:DeterministicSourcePaths=true -Test run for C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\XUnitTestProject1.dll(.NETCoreApp,Version=v3.1) -Microsoft (R) Test Execution Command Line Tool Version 16.5.0 +Test run for C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\XUnitTestProject1.dll(.NETCoreApp,Version=v6.0) +Microsoft (R) Test Execution Command Line Tool Version 17.5.0 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... @@ -94,8 +99,11 @@ Calculating coverage result... | Average | 100% | 100% | 100% | +---------+------+--------+--------+ ``` -You should see on output folder the coverlet source root mapping file generated. -This is the confirmation that you're running coverage on deterministic build. + +You should see on output folder the coverlet source root mapping file generated. The filename starts with 'CoverletSourceRootsMapping_'. Do not use `--no-build` option +This is the confirmation that you're running coverage on deterministic build e.g. `Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\CoverletSourceRootsMapping_XUnitTestProject1` + + +```text +Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\CoverletSourceRootsMapping_XUnitTestProject1 ``` -Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\CoverletSourceRootsMapping -``` \ No newline at end of file diff --git a/Documentation/Examples/MSBuild/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj b/Documentation/Examples/MSBuild/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj index de3e88f32..19586970c 100644 --- a/Documentation/Examples/MSBuild/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj +++ b/Documentation/Examples/MSBuild/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj @@ -1,15 +1,18 @@  - netcoreapp3.1 + net6.0 false + false - - - - + + + + all + runtime; build; native; contentfiles; analyzers + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary1/Class1.cs b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary1/Class1.cs index 289865e7b..dcb976188 100644 --- a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary1/Class1.cs +++ b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary1/Class1.cs @@ -1,8 +1,6 @@ -using System; - -namespace ClassLibrary1 +namespace ClassLibrary1 { - public class Class1 + public class Class1 { public int Method() { diff --git a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary2/Class2.cs b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary2/Class2.cs index aa93f5552..a2b5a7acc 100644 --- a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary2/Class2.cs +++ b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary2/Class2.cs @@ -1,8 +1,6 @@ -using System; - -namespace ClassLibrary2 +namespace ClassLibrary2 { - public class Class2 + public class Class2 { public int Method() { diff --git a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary3/Class3.cs b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary3/Class3.cs index 872291eb2..cfecc19cf 100644 --- a/Documentation/Examples/MSBuild/MergeWith/ClassLibrary3/Class3.cs +++ b/Documentation/Examples/MSBuild/MergeWith/ClassLibrary3/Class3.cs @@ -1,8 +1,6 @@ -using System; - -namespace ClassLibrary3 +namespace ClassLibrary3 { - public class Class3 + public class Class3 { public int Method() { diff --git a/Documentation/Examples/MSBuild/MergeWith/HowTo.md b/Documentation/Examples/MSBuild/MergeWith/HowTo.md index c157b7b80..4135a1379 100644 --- a/Documentation/Examples/MSBuild/MergeWith/HowTo.md +++ b/Documentation/Examples/MSBuild/MergeWith/HowTo.md @@ -1,9 +1,9 @@ **Run from solution root sln** -To merge report togheter you need to run separate test and merge in one `json` format file. +To merge report together you need to run separate test and merge in one `json` format file. Last command will join and create final needed format file. -``` +```shell dotnet test XUnitTestProject1\XUnitTestProject1.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ dotnet test XUnitTestProject2\XUnitTestProject2.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" dotnet test XUnitTestProject3\XUnitTestProject3.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat="opencover" @@ -11,13 +11,14 @@ dotnet test XUnitTestProject3\XUnitTestProject3.csproj /p:CollectCoverage=true You can merge also running `dotnet test` and merge with single command from a solution file, but you need to ensure that tests will run sequentially(`-m:1`). This slow down testing but avoid invalid coverage result. -``` +```shell dotnet test /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"opencover,json\" -m:1 ``` + N.B. You need to specify `json` format plus another format(the final one), because Coverlet can only merge proprietary format. At the end you can delete temporary `coverage.json` file. You can also merge the coverage result and generate another valid format to export the content than opencover, like cobertura. -``` +```shell dotnet test /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"cobertura,json\" -m:1 ``` diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/UnitTest1.cs b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/UnitTest1.cs index 5eeb5df3b..47655c8e7 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/UnitTest1.cs +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/UnitTest1.cs @@ -1,9 +1,8 @@ -using System; -using Xunit; +using Xunit; namespace XUnitTestProject1 { - public class UnitTest1 + public class UnitTest1 { [Fact] public void Test1() diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/XUnitTestProject1.csproj b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/XUnitTestProject1.csproj index 76ecf3d44..e78fcdd22 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/XUnitTestProject1.csproj +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject1/XUnitTestProject1.csproj @@ -1,18 +1,22 @@ - + - netcoreapp3.1 + net6.0 false + false - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + all + runtime; build; native; contentfiles; analyzers + diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/UnitTest2.cs b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/UnitTest2.cs index c6ce4b13d..48a8448a2 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/UnitTest2.cs +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/UnitTest2.cs @@ -1,9 +1,8 @@ -using System; -using Xunit; +using Xunit; namespace XUnitTestProject2 { - public class UnitTest2 + public class UnitTest2 { [Fact] public void Test2() diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/XUnitTestProject2.csproj b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/XUnitTestProject2.csproj index 6c938c759..4346c22c3 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/XUnitTestProject2.csproj +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject2/XUnitTestProject2.csproj @@ -1,18 +1,22 @@ - + - netcoreapp3.1 + net6.0 false + false - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + all + runtime; build; native; contentfiles; analyzers + diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/UnitTest3.cs b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/UnitTest3.cs index 482d9ed81..34cb51c16 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/UnitTest3.cs +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/UnitTest3.cs @@ -1,9 +1,8 @@ -using System; -using Xunit; +using Xunit; namespace XUnitTestProject3 { - public class UnitTest3 + public class UnitTest3 { [Fact] public void Test3() diff --git a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/XUnitTestProject3.csproj b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/XUnitTestProject3.csproj index d5267e6a2..4cdea2dbd 100644 --- a/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/XUnitTestProject3.csproj +++ b/Documentation/Examples/MSBuild/MergeWith/XUnitTestProject3/XUnitTestProject3.csproj @@ -1,18 +1,22 @@ - + - netcoreapp3.1 + net6.0 false + false - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + all + runtime; build; native; contentfiles; analyzers + diff --git a/Documentation/Examples/VSTest/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj b/Documentation/Examples/VSTest/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj index 9f5c4f4ab..8271e5471 100644 --- a/Documentation/Examples/VSTest/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj +++ b/Documentation/Examples/VSTest/DeterministicBuild/ClassLibrary1/ClassLibrary1.csproj @@ -2,6 +2,7 @@ netstandard2.0 + false diff --git a/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.sln b/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.sln index e5ea12eb9..958518178 100644 --- a/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.sln +++ b/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.sln @@ -9,7 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibrary1", "ClassLibra EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8AE3B75E-33BA-4E07-AD78-2DBCC3392262}" ProjectSection(SolutionItems) = preProject - DeterministicBuild.targets = DeterministicBuild.targets Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets HowTo.md = HowTo.md diff --git a/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.targets b/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.targets deleted file mode 100644 index 13208d103..000000000 --- a/Documentation/Examples/VSTest/DeterministicBuild/DeterministicBuild.targets +++ /dev/null @@ -1,23 +0,0 @@ - - - - - $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - - - - - - - - - <_LocalTopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> - - - diff --git a/Documentation/Examples/VSTest/DeterministicBuild/Directory.Build.targets b/Documentation/Examples/VSTest/DeterministicBuild/Directory.Build.targets index 95978e1e1..8c119d541 100644 --- a/Documentation/Examples/VSTest/DeterministicBuild/Directory.Build.targets +++ b/Documentation/Examples/VSTest/DeterministicBuild/Directory.Build.targets @@ -1,4 +1,2 @@ - - diff --git a/Documentation/Examples/VSTest/DeterministicBuild/HowTo.md b/Documentation/Examples/VSTest/DeterministicBuild/HowTo.md index 96d94ef1b..c25b9cd50 100644 --- a/Documentation/Examples/VSTest/DeterministicBuild/HowTo.md +++ b/Documentation/Examples/VSTest/DeterministicBuild/HowTo.md @@ -1,6 +1,7 @@ -To run test we need to generates packages to reference in on test project. +To run test we need to generates packages to reference in on test project. Run from repo root -``` + +```shell C:\git\coverlet λ dotnet pack Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Core @@ -23,30 +24,34 @@ Copyright (C) Microsoft Corporation. All rights reserved. coverlet.core -> C:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll coverlet.collector -> C:\git\coverlet\src\coverlet.collector\bin\Debug\netcoreapp2.0\coverlet.collector.dll coverlet.msbuild.tasks -> C:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\coverlet.msbuild.tasks.dll - coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverlet.console.dll - coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverlet.console.dll - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.3.0-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.1.7.2-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.1.7.2-preview.6.ga0e22ec622.snupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.3.0-preview.6.ga0e22ec622.snupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.snupkg'. + coverlet.console -> C:\git\coverlet\src\coverlet.console\bin\Debug\net6.0\coverlet.console.dll + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.6.0.1-preview.6.g918cd179e0.snupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.6.0.1-preview.6.g918cd179e0.snupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.6.0.1-preview.6.g918cd179e0.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.console.6.0.1-preview.6.g918cd179e0.snupkg'. ``` + Add collectors package version generated to `"..\Documentation\Examples\VSTest\DeterministicBuild\XUnitTestProject1\XUnitTestProject1.csproj"` + ```xml - netcoreapp3.1 + net6.0 false - - - - - + + + + all + runtime; build; native; contentfiles; analyzers + + + @@ -56,12 +61,14 @@ Add collectors package version generated to `"..\Documentation\Examples\VSTest\D ``` + Go to test project folder and run -``` + +```shell C:\git\coverlet\Documentation\Examples\VSTest\DeterministicBuild (detbuilddocs -> origin) λ dotnet test --collect:"XPlat Code Coverage" /p:DeterministicSourcePaths=true -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.DeterministicReport=true -Test run for C:\git\coverlet\Documentation\Examples\VSTest\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\XUnitTestProject1.dll(.NETCoreApp,Version=v3.1) -Microsoft (R) Test Execution Command Line Tool Version 16.5.0 +Test run for C:\git\coverlet\Documentation\Examples\VSTest\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\XUnitTestProject1.dll(.NETCoreApp,Version=v6.0) +Microsoft (R) Test Execution Command Line Tool Version 17.5.0 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... @@ -75,8 +82,10 @@ Total tests: 1 Passed: 1 Total time: 1,3472 Seconds ``` -You should see on output folder the coverlet source root mapping file generated. + +You should see on output folder the coverlet source root mapping file generated. This is the confirmation that you're running coverage on deterministic build. + +```text +Documentation\Examples\VSTest\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\CoverletSourceRootsMapping_XUnitTestProject1 ``` -Documentation\Examples\VSTest\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\CoverletSourceRootsMapping_XUnitTestProject1 -``` \ No newline at end of file diff --git a/Documentation/Examples/VSTest/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj b/Documentation/Examples/VSTest/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj index ea3c58201..d63628b1e 100644 --- a/Documentation/Examples/VSTest/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj +++ b/Documentation/Examples/VSTest/DeterministicBuild/XUnitTestProject1/XUnitTestProject1.csproj @@ -1,14 +1,18 @@ - + - netcoreapp3.1 + net6.0 false + false - - - + + + + all + runtime; build; native; contentfiles; analyzers + diff --git a/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/Class1.cs b/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/Class1.cs index 289865e7b..dcb976188 100644 --- a/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/Class1.cs +++ b/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/Class1.cs @@ -1,8 +1,6 @@ -using System; - -namespace ClassLibrary1 +namespace ClassLibrary1 { - public class Class1 + public class Class1 { public int Method() { diff --git a/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/ClassLibrary1.csproj b/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/ClassLibrary1.csproj index 9f5c4f4ab..8271e5471 100644 --- a/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/ClassLibrary1.csproj +++ b/Documentation/Examples/VSTest/HelloWorld/ClassLibrary1/ClassLibrary1.csproj @@ -2,6 +2,7 @@ netstandard2.0 + false diff --git a/Documentation/Examples/VSTest/HelloWorld/HowTo.md b/Documentation/Examples/VSTest/HelloWorld/HowTo.md index 548105f9f..d965d05e1 100644 --- a/Documentation/Examples/VSTest/HelloWorld/HowTo.md +++ b/Documentation/Examples/VSTest/HelloWorld/HowTo.md @@ -1,11 +1,11 @@ **Run from XUnitTestProject1 folder** -``` +```shell dotnet test --collect:"XPlat Code Coverage" ``` With custom runsettings file -``` +```shell dotnet test --collect:"XPlat Code Coverage" --settings runsettings.xml -``` \ No newline at end of file +``` diff --git a/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/runsettings.xml b/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/.runsettings similarity index 100% rename from Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/runsettings.xml rename to Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/.runsettings diff --git a/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/UnitTest1.cs b/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/UnitTest1.cs index 5eeb5df3b..47655c8e7 100644 --- a/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/UnitTest1.cs +++ b/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/UnitTest1.cs @@ -1,9 +1,8 @@ -using System; -using Xunit; +using Xunit; namespace XUnitTestProject1 { - public class UnitTest1 + public class UnitTest1 { [Fact] public void Test1() diff --git a/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/XUnitTestProject1.csproj b/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/XUnitTestProject1.csproj index 3000c34e8..3ab4b931e 100644 --- a/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/XUnitTestProject1.csproj +++ b/Documentation/Examples/VSTest/HelloWorld/XUnitTestProject1/XUnitTestProject1.csproj @@ -1,15 +1,20 @@ - netcoreapp3.1 + net6.0 false + false + $(MSBuildThisFileDirectory).runsettings - - - - + + + + all + runtime; build; native; contentfiles; analyzers + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Documentation/GlobalTool.md b/Documentation/GlobalTool.md index 455f34b39..99a9f9b4c 100644 --- a/Documentation/GlobalTool.md +++ b/Documentation/GlobalTool.md @@ -8,8 +8,8 @@ coverlet --help The current options are (output of `coverlet --help`): -```bash -Cross platform .NET Core code coverage tool 3.0.0.0 +```text +Cross platform .NET Core code coverage tool 6.0.0.0 Usage: coverlet [arguments] [options] @@ -17,16 +17,14 @@ Arguments: Path to the test assembly or application directory. Options: - -h|--help Show help information - -v|--version Show version information - -t|--target Path to the test runner application. + -t|--target (REQUIRED) Path to the test runner application. -a|--targetargs Arguments to be passed to the test runner. -o|--output Output of the generated coverage report -v|--verbosity Sets the verbosity level of the command. Allowed values are quiet, minimal, normal, detailed. - -f|--format Format of the generated coverage report. + -f|--format Format of the generated coverage report. [default: json] --threshold Exits with error if the coverage % is below value. --threshold-type Coverage type to apply the threshold to. - --threshold-stat Coverage statistic used to enforce the threshold value. + --threshold-stat Coverage statistic used to enforce the threshold value. [default: Minimum] --exclude Filter expressions to exclude specific modules and types. --include Filter expressions to include only specific modules and types. --exclude-by-file Glob patterns specifying source files to exclude. @@ -39,12 +37,23 @@ Options: --use-source-link Specifies whether to use SourceLink URIs in place of file system paths. --does-not-return-attribute Attributes that mark methods that do not return. --exclude-assemblies-without-sources Specifies behaviour of heuristic to ignore assemblies with missing source documents. + --source-mapping-file Specifies the path to a SourceRootsMappings file. + --version Show version information + -?, -h, --help Show help and usage information ``` -NB. For a [multiple value] options you have to specify values multiple times i.e. +NB. For [multiple value] options you can either specify values multiple times i.e. + +```shell +--exclude-by-attribute 'Obsolete' --exclude-by-attribute 'GeneratedCode' --exclude-by-attribute 'CompilerGenerated' ``` ---exclude-by-attribute 'Obsolete' --exclude-by-attribute'GeneratedCode' --exclude-by-attribute 'CompilerGenerated' + +or pass the multiple values as space separated sequence, i.e. + +```shell +--exclude-by-attribute "Obsolete" "GeneratedCode" "CompilerGenerated" ``` + For `--merge-with` [check the sample](Examples.md). ## Code Coverage @@ -61,7 +70,7 @@ After the above command is run, a `coverage.json` file containing the results wi _Note: The `--no-build` flag is specified so that the `/path/to/test-assembly.dll` isn't rebuilt_ -## Code Coverage for integration tests and end-to-end tests. +## Code Coverage for integration tests and end-to-end tests Sometimes, there are tests that doesn't use regular unit test frameworks like xunit. You may find yourself in a situation where your tests are driven by a custom executable/script, which when run, could do anything from making API calls to driving Selenium. @@ -105,6 +114,9 @@ coverlet --target --targetargs --output "/custo The above command will write the results to the supplied path, if no file extension is specified it'll use the standard extension of the selected output format. To specify a directory instead, simply append a `/` to the end of the value. +>[!TIP] +>Use only folder name whenever multiple coverage output formats are used. + ```bash coverlet --target --targetargs --output "/custom/directory/" -f json -f lcov ``` @@ -179,7 +191,10 @@ coverlet --target --targetargs --threshold 80 - You can ignore a method or an entire class from code coverage by creating and applying the `ExcludeFromCodeCoverage` attribute present in the `System.Diagnostics.CodeAnalysis` namespace. -You can also ignore additional attributes by using the `ExcludeByAttribute` property (short name or full name supported): +You can also ignore additional attributes by using the `ExcludeByAttribute` property + +* Can be specified multiple times +* Use attribute name, attribute full name or fully qualified name of the attribute type (`Obsolete`, `ObsoleteAttribute`, `System.ObsoleteAttribute`) ```bash coverlet --target --targetargs --exclude-by-attribute 'Obsolete' --exclude-by-attribute 'GeneratedCode' --exclude-by-attribute 'CompilerGenerated' @@ -188,8 +203,9 @@ coverlet --target --targetargs --exclude-by-att ### Source Files You can also ignore specific source files from code coverage using the `--exclude-by-file` option - - Can be specified multiple times - - Use file path or directory path with globbing (e.g `dir1/*.cs`) + +* Can be specified multiple times +* Use file path or directory path with globbing (e.g `dir1/*.cs`) ```bash coverlet --target --targetargs --exclude-by-file "**/dir1/class1.cs" @@ -202,15 +218,17 @@ Coverlet gives the ability to have fine grained control over what gets excluded Syntax: `--exclude '[Assembly-Filter]Type-Filter'` Wildcards -- `*` => matches zero or more characters -- `?` => the prefixed character is optional + +* `*` => matches zero or more characters +* `?` => the prefixed character is optional Examples - - `--exclude "[*]*"` => Excludes all types in all assemblies (nothing is instrumented) - - `--exclude "[coverlet.*]Coverlet.Core.Coverage"` => Excludes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) - - `--exclude "[*]Coverlet.Core.Instrumentation.*"` => Excludes all types belonging to `Coverlet.Core.Instrumentation` namespace in any assembly - - `--exclude "[coverlet.*.tests?]*"` => Excludes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) - - `--exclude "[coverlet.*]*" --exclude "[*]Coverlet.Core*"` => Excludes assemblies matching `coverlet.*` and excludes all types belonging to the `Coverlet.Core` namespace in any assembly + +* `--exclude "[*]*"` => Excludes all types in all assemblies (nothing is instrumented) +* `--exclude "[coverlet.*]Coverlet.Core.Coverage"` => Excludes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) +* `--exclude "[*]Coverlet.Core.Instrumentation.*"` => Excludes all types belonging to `Coverlet.Core.Instrumentation` namespace in any assembly +* `--exclude "[coverlet.*.tests?]*"` => Excludes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) +* `--exclude "[coverlet.*]*" --exclude "[*]Coverlet.Core*"` => Excludes assemblies matching `coverlet.*` and excludes all types belonging to the `Coverlet.Core` namespace in any assembly ```bash coverlet --target --targetargs --exclude "[coverlet.*]Coverlet.Core.Coverage" @@ -219,9 +237,10 @@ coverlet --target --targetargs --exclude "[cove Coverlet goes a step in the other direction by also letting you explicitly set what can be included using the `--include` option. Examples - - `--include "[*]*"` => Includes all types in all assemblies (everything is instrumented) - - `--include "[coverlet.*]Coverlet.Core.Coverage"` => Includes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) - - `--include "[coverlet.*.tests?]*"` => Includes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) + +* `--include "[*]*"` => Includes all types in all assemblies (everything is instrumented) +* `--include "[coverlet.*]Coverlet.Core.Coverage"` => Includes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) +* `--include "[coverlet.*.tests?]*"` => Includes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) Both `--exclude` and `--include` options can be used together but `--exclude` takes precedence. You can specify the `--exclude` and `--include` options multiple times to allow for multiple filter expressions. @@ -231,6 +250,18 @@ You can also include coverage of the test assembly itself by specifying the `--i Coverlet supports [SourceLink](https://github.com/dotnet/sourcelink) custom debug information contained in PDBs. When you specify the `--use-source-link` flag, Coverlet will generate results that contain the URL to the source files in your source control instead of local file paths. +## Path Mappings + +Coverlet has the ability to map the paths contained inside the debug sources into a local path where the source is currently located using the option `--source-mapping-file`. This is useful if the source was built using a deterministic build which sets the path to `/_/` or if it was built on a different host where the source is located in a different path. + +The value for `--source-mapping-file` should be a file with each line being in the format `|path to map to=path in debug symbol`. For example to map the local checkout of a project `C:\git\coverlet` to project that was built with `true` which sets the sources to `/_/*` the following line must be in the mapping file. + +``` +|C:\git\coverlet\=/_/ +``` + +During coverage collection, Coverlet will translate any path that starts with `/_/` to `C:\git\coverlet\` allowing the collector to find the source file. + ## Exit Codes Coverlet outputs specific exit codes to better support build automation systems for determining the kind of failure so the appropriate action can be taken. diff --git a/Documentation/KnownIssues.md b/Documentation/KnownIssues.md index 0b5b842ec..b4c53e15e 100644 --- a/Documentation/KnownIssues.md +++ b/Documentation/KnownIssues.md @@ -2,7 +2,7 @@ ## VSTest stops process execution early -*Affected drivers*: msbuild (`dotnet test`) , dotnet tool(if you're using ` --targetargs "test ... --no-build"`) +*Affected drivers*: msbuild (`dotnet test`) , dotnet tool(if you're using `--targetargs "test ... --no-build"`) *Symptoms:* @@ -12,12 +12,12 @@ `warning : [coverlet] Hits file:'C:\Users\REDACTED\AppData\Local\Temp\testApp_ac32258b-fd4a-4bb4-824c-a79061e97c31' not found for module: 'testApp'` -* zero coverage result (often only on CI but not on local) +* zero coverage result (often only on CI but not on local) ```bash Calculating coverage result... - C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\2.6.0\build\netstandard2.0\coverlet.msbuild.targets(21,5): warning : [coverlet] Hits file:'C:\Users\REDACTED\AppData\Local\Temp\testApp_ac32258b-fd4a-4bb4-824c-a79061e97c31' not found for module: 'testApp' [C:\Users\REDACTED\Documents\repo\testapp\testapp.Tests\testapp.Tests.csproj] - C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\2.6.0\build\netstandard2.0\coverlet.msbuild.targets(21,5): warning : [coverlet] Hits file:'C:\Users\REDACTED\AppData\Local\Temp\testApp.Tests_ac32258b-fd4a-4bb4-824c-a79061e97c31' not found for module: 'testApp.Tests' [C:\Users\REDACTED\Documents\repo\testapp\testapp.Tests\testapp.Tests.csproj] + C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\netstandard2.0\coverlet.msbuild.targets(21,5): warning : [coverlet] Hits file:'C:\Users\REDACTED\AppData\Local\Temp\testApp_ac32258b-fd4a-4bb4-824c-a79061e97c31' not found for module: 'testApp' [C:\Users\REDACTED\Documents\repo\testapp\testapp.Tests\testapp.Tests.csproj] + C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\netstandard2.0\coverlet.msbuild.targets(21,5): warning : [coverlet] Hits file:'C:\Users\REDACTED\AppData\Local\Temp\testApp.Tests_ac32258b-fd4a-4bb4-824c-a79061e97c31' not found for module: 'testApp.Tests' [C:\Users\REDACTED\Documents\repo\testapp\testapp.Tests\testapp.Tests.csproj] Generating report 'C:\Users\REDACTED\Documents\repo\testapp\lcov.info' +---------------+------+--------+--------+ @@ -37,7 +37,7 @@ +---------+------+--------+--------+ ``` -The issue is related to VSTest platform https://github.com/microsoft/vstest/issues/1900#issuecomment-457488472 +The issue is related to VSTest platform > However if testhost doesn't shut down within 100ms (as the execution is completed, we expect it to shutdown fast). vstest.console forcefully kills the process. @@ -46,7 +46,7 @@ This happen also if there are other "piece of code" during testing that slow dow *Solution:* -The only way to get around this issue is to use collectors integration https://github.com/coverlet-coverage/coverlet#vstest-integration-preferred-due-to-known-issue-supports-only-net-core-application. With the collector, we're injected in test host through a in-proc collector that communicates with the VSTest platform so we can signal when we end our work. +The only way to get around this issue is to use collectors integration . With the collector, we're injected in test host through a in-proc collector that communicates with the VSTest platform so we can signal when we end our work. ## Upgrade `coverlet.collector` to version > 1.0.0 @@ -54,44 +54,46 @@ The only way to get around this issue is to use collectors integration https://g *Symptoms:* The same as "known issue 1". -There is a bug inside the VSTest platform: https://github.com/microsoft/vstest/issues/2205. +There is a bug inside the VSTest platform: . If you upgrade the collector package with a version greater than 1.0.0, in-proc collector won't be loaded so you could incur "known issue number 1" and get zero coverage result *Solutions:* -1) Reference `Microsoft.NET.Test.Sdk` with version *greater than* 16.4.0 - -```xml - - ... - - ... - -``` -2) You can pass custom *coverage.runsettings* file like this -```xml - - - - - - - cobertura - - - - - - - - - - -``` +1) Reference `Microsoft.NET.Test.Sdk` with version *greater than* 17.7.0 + + ```xml + + ... + + ... + + ``` + +1) You can pass custom *coverage.runsettings* file like this + + ```xml + + + + + + + cobertura + + + + + + + + + + + ``` And pass it to command line @@ -103,11 +105,11 @@ dotnet test --settings coverage.runsettings *Affected drivers*: all drivers that support `/p:UseSourceLink=true` -*Symptoms:* some tool like SonarSource doesn't work well see https://github.com/coverlet-coverage/coverlet/issues/482 +*Symptoms:* some tool like SonarSource doesn't work well see -`Nerdbank.GitVersioning` generates a version file on the fly but this file is not part of user solution and it's not commited to repo so the generated remote source file reference does not exit, i.e. +`Nerdbank.GitVersioning` generates a version file on the fly but this file is not part of user solution and it's not committed to repo so the generated remote source file reference does not exit, i.e. -``` +```text ... ... @@ -116,7 +118,10 @@ dotnet test --settings coverage.runsettings *Solution:* we can exclude `Nerdbank.GitVersioning` autogenerated file from instrumentation using filters ```bash +# example for coverlet.msbuild /p:ExcludeByFile=\"**/*Json.Version.cs\" +# example for coverlet.collector +dotnet test test-assembly.dll /collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.ExcludeByFile="**/*.Version.cs" ``` ## Failed to resolve assembly during instrumentation @@ -125,8 +130,8 @@ dotnet test --settings coverage.runsettings *Symptoms:* during build/instrumentation you may get an exception like: -``` -[coverlet] Unable to instrument module: ..\UnitTests\bin\Debug\netcoreapp2.1\Core.Messaging.dll because : Failed to resolve assembly: 'Microsoft.Azure.ServiceBus, Version=3.4.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c' [..\UnitTests.csproj] +```text +[coverlet] Unable to instrument module: ..\UnitTests\bin\Debug\net6.0\Core.Messaging.dll because : Failed to resolve assembly: 'Microsoft.Azure.ServiceBus, Version=7.16.1.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c' [..\UnitTests.csproj] ``` In the instrumentation phase, Coverlet needs to load all references used by your instrumented module. Sometimes the build phase (out of Coverlet's control) does not copy those dlls to the output folder because they are not resolved till runtime or at publish phase from the NuGet packages folders. @@ -148,13 +153,13 @@ or by adding the property `` to the project file ``` -NB. This **DOESN'T ALWAYS WORK**, for example in case of the shared framework https://github.com/dotnet/cli/issues/12705#issuecomment-536686785 +NB. This **DOESN'T ALWAYS WORK**, for example in case of the shared framework We can do nothing at the moment as this is a build behaviour out of our control. -For .NET runtime version >= 3.0 the new default behavior is to copy all assets to the build output (CopyLocalLockFileAssemblies=true) https://github.com/dotnet/cli/issues/12705#issuecomment-535150372, unfortunately the issue could still arise. +For .NET runtime version >= 3.0 the new default behavior is to copy all assets to the build output (CopyLocalLockFileAssemblies=true) , unfortunately the issue could still arise. -In this case the only workaround at the moment is to *manually copy* missing dlls to the output folder: https://github.com/coverlet-coverage/coverlet/issues/560#issue-496440052 +In this case the only workaround at the moment is to *manually copy* missing dlls to the output folder: > The only reliable way to work around this problem is to drop the DLL in the unit tests project's bin\Release\netcoreapp2.2 directory. @@ -164,11 +169,11 @@ In this case the only workaround at the moment is to *manually copy* missing dll *Symptoms:* Running coverage on .NET Framework runtime(i.e. .NET 4.6.1) and get error like: -``` +```text Failed Tests.MinMax.Min_AsyncSelector_Int32_4 Error Message: System.TypeInitializationException : The type initializer for 'Tests.AsyncEnumerableTests' threw an exception. ----- System.IO.FileLoadException : Could not load file or assembly 'System.Linq.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045) +---- System.IO.FileLoadException : Could not load file or assembly 'System.Linq.Async, Version=6.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045) Stack Trace: at Tests.AsyncEnumerableTests..ctor() at Tests.MinMax..ctor() @@ -178,13 +183,11 @@ Stack Trace: *Solution:* Looks like this is caused by xUnit's app domains. For `dotnet test`, it can be disabled with the following argument: `-- RunConfiguration.DisableAppDomain=true` -NB. Workaround doesn't work if test method itself explicitly creates an appdomain and uses shadow copying in order to test that the assembly behaves properly in those conditions. - -## Code coverage returns NaN% +## Code coverage returns NaN *Symptoms:* You are getting following result when running Coverlet within CI/CD pipeline: -``` +```text +--------+------+--------+--------+ | Module | Line | Branch | Method | +--------+------+--------+--------+ @@ -207,27 +210,74 @@ SUT (System Under Test) assembly is also not listed in MSBuild logs - "Instrumen *Symptoms:* ```log -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : Stream was too long. [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.FlushBuffer() [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.GetBuffer(Int32 count, Int32& offset) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.UnsafeWriteUTF8Chars(Char* chars, Int32 charCount) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlUTF8NodeWriter.WriteEscapedText(String s) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlBaseWriter.WriteString(String value) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteString(XmlWriterDelegator xmlWriter, String value, XmlDictionaryString name, XmlDictionaryString ns) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(39,5): error : at WriteLineToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract ) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : Stream was too long. [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.FlushBuffer() [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.GetBuffer(Int32 count, Int32& offset) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlStreamNodeWriter.UnsafeWriteUTF8Chars(Char* chars, Int32 charCount) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlUTF8NodeWriter.WriteEscapedText(String s) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Xml.XmlBaseWriter.WriteString(String value) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteString(XmlWriterDelegator xmlWriter, String value, XmlDictionaryString name, XmlDictionaryString ns) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(39,5): error : at WriteLineToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract ) [REDACTED.csproj] .... Calculating coverage result... -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(71,5): error : Unexpected end of file. [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.EncodingStreamWrapper.ReadBOMEncoding(Boolean notOutOfBand) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.EncodingStreamWrapper..ctor(Stream stream, Encoding encoding) [REDACTED.csproj] -C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\3.2.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.XmlUTF8TextReader.SetInput(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(71,5): error : Unexpected end of file. [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.EncodingStreamWrapper.ReadBOMEncoding(Boolean notOutOfBand) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.EncodingStreamWrapper..ctor(Stream stream, Encoding encoding) [REDACTED.csproj] +C:\Users\REDACTED\.nuget\packages\coverlet.msbuild\6.0.0\build\coverlet.msbuild.targets(71,5): error : at System.Xml.XmlUTF8TextReader.SetInput(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose) [REDACTED.csproj] ``` The XML code coverage report is too large for the coverlet to parse. *Potential Solutions:* -* Reduce noise from auto generated code, for example excluding your EntityFrameworkCore Migrations namespace or automatically generated typed Http Clients. See [Excluding From Coverage](./MSBuildIntegration.md#excluding-from-coverage) for more information on ignoring namespaces from code coverage. +* Reduce noise from auto generated code, for example excluding your EntityFrameworkCore Migrations namespace or automatically generated typed Http Clients. See [Excluding From Coverage](./MSBuildIntegration.md#excluding-from-coverage) for more information on ignoring namespaces from code coverage. + +## BadImageFormatException .NET Framework 4.7.x, 4.8.x + +*Symptoms:* + +```text +BadImageFormatException during MetadataReaderProvider.FromPortablePdbStream in InstrumentationHelper.PortablePdbHasLocalSource, unable to check if the module has got local source. +``` + +*Solutions:* + +Change [DebugType](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/code-generation#debugtype) from `full` to `portable`. + +>[!IMPORTANT] +>NET Core introduces a new symbol file (PDB) format - portable PDBs. Unlike traditional PDBs which are Windows-only, portable PDBs can be created and read on all platforms. + +## CoverletCoverageDataCollector: Failed to instrument modules + +*Affected drivers*: VSTest integration `dotnet test --collect:"XPlat Code Coverage"` + +*Symptoms:* + +```text +Data collector 'XPlat code coverage' message: [coverlet]Coverlet.Collector.Utilities.CoverletDataCollectorException: CoverletCoverageDataCollector: Failed to instrument modules + ---> System.AggregateException: One or more errors occurred. (The process cannot access the file XXX\ABC.pdb + ---> System.IO.IOException: The process cannot access the file 'XXX\ABC.pdb' because it is being used by another process. + at System.IO.FileSystem.CopyFile(String sourceFullPath, String destFullPath, Boolean overwrite) + at Coverlet.Core.Helpers.FileSystem.Copy(String sourceFileName, String destFileName, Boolean overwrite) in /_/src/coverlet.core/Helpers/FileSystem.cs:line 35 + at Coverlet.Core.Helpers.InstrumentationHelper.<>c__DisplayClass16_0.b__1() in /_/src/coverlet.core/Helpers/InstrumentationHelper.cs:line 277 + at Coverlet.Core.Helpers.RetryHelper.<>c__DisplayClass0_0.b__0() in /_/src/coverlet.core/Helpers/RetryHelper.cs:line 28 + at Coverlet.Core.Helpers.RetryHelper.Do[T](Func`1 action, Func`1 backoffStrategy, Int32 maxAttemptCount) in /_/src/coverlet.core/Helpers/RetryHelper.cs:line 55 + --- End of inner exception stack trace --- + ... + ``` + + >[!Note] + >This is not an coverlet issue but running tests in parallel without proper separation of test case resources + >> + >>**dotnet vstest cli option** + >> + >>--Parallel + >> + >> Run tests in parallel. By default, all available cores on the machine are available for use. Specify an explicit number of cores by setting the MaxCpuCount property under the RunConfiguration node in the runsettings file. + + *Solutions:* + + use VSTest setting [-maxcpucount:1](https://learn.microsoft.com/en-us/visualstudio/msbuild/building-multiple-projects-in-parallel-with-msbuild?view=vs-2022#-maxcpucount-switch) which limits "worker processes". diff --git a/Documentation/MSBuildIntegration.md b/Documentation/MSBuildIntegration.md index a937665be..6cee59fa4 100644 --- a/Documentation/MSBuildIntegration.md +++ b/Documentation/MSBuildIntegration.md @@ -1,10 +1,11 @@ # Coverlet integration with MSBuild -In this mode, Coverlet doesn't require any additional setup other than including the NuGet package in the unit test project. It integrates with the `dotnet test` infrastructure built into the .NET Core CLI and when enabled, will automatically generate coverage results after tests are run. +In this mode, Coverlet doesn't require any additional setup other than including the `coverlet.msbuild` NuGet package in the unit test project. It integrates with the `dotnet test` infrastructure built into the .NET Core CLI and when enabled, will automatically generate coverage results after tests are run. If a property takes multiple comma-separated values please note that [you will have to add escaped quotes around the string](https://github.com/Microsoft/msbuild/issues/2999#issuecomment-366078677) like this: `/p:Exclude=\"[coverlet.*]*,[*]Coverlet.Core*\"`, `/p:Include=\"[coverlet.*]*,[*]Coverlet.Core*\"`, or `/p:CoverletOutputFormat=\"json,opencover\"`. -To achieve same behavior above using **powershell** you need to use the verbatim argument marker `--%` like this: +To achieve same behavior above using **powershell** you need to use the verbatim argument marker `--%` like this: + ```powershell dotnet test /p:CollectCoverage=true --% /p:CoverletOutputFormat=\"opencover,lcov\" ``` @@ -49,6 +50,15 @@ To specify a directory where all results will be written to (especially if using dotnet test /p:CollectCoverage=true /p:CoverletOutput='./results/' ``` +_Note: escape characters might produce some unexpected results._ + +|status| msbuild parameter | +|---|---| +|:heavy_check_mark:|`/p:CoverletOutput="C:/GitHub/coverlet/artifacts/Reports/coverlet.core/"`| +|:heavy_check_mark:|`/p:CoverletOutput="C:\\GitHub\\coverlet\\artifacts\\Reports\\coverlet.core\\"`| +|:heavy_check_mark:|`/p:CoverletOutput="C:\GitHub\coverlet\artifacts\Reports\coverlet.core\\"`| +|:x:|`/p:CoverletOutput="C:\GitHub\coverlet\artifacts\Reports\coverlet.core\"`| + The Coverlet MSBuild task sets the `CoverletReport` MSBuild item so that you can easily use the produced coverage reports. For example, using [ReportGenerator](https://github.com/danielpalme/ReportGenerator#usage--command-line-parameters) to generate an html coverage report. ```xml @@ -103,7 +113,7 @@ The above command will automatically fail the build if the line, branch or metho dotnet test /p:CollectCoverage=true /p:Threshold=80 /p:ThresholdType=line ``` -You can specify multiple values for `ThresholdType` by separating them with commas. Valid values include `line`, `branch` and `method`. +You can specify multiple values for `ThresholdType` by separating them with commas. Valid values include `line`, `branch` and `method`. You can do the same for `Threshold` as well. ```bash @@ -128,7 +138,10 @@ dotnet test /p:CollectCoverage=true /p:Threshold=80 /p:ThresholdType=line /p:Thr You can ignore a method, an entire class or assembly from code coverage by creating and applying the `ExcludeFromCodeCoverage` attribute present in the `System.Diagnostics.CodeAnalysis` namespace. -You can also ignore additional attributes by using the `ExcludeByAttribute` property (short name, i.e. the type name without the namespace, supported only): +You can also ignore additional attributes by using the `ExcludeByAttribute` property + +* Use single or multiple attributes (separate by comma) +* Use attribute name, attribute full name or fully qualified name of the attribute type (`Obsolete`, `ObsoleteAttribute`, `System.ObsoleteAttribute`) ```bash dotnet test /p:CollectCoverage=true /p:ExcludeByAttribute="Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute" @@ -137,8 +150,9 @@ dotnet test /p:CollectCoverage=true /p:ExcludeByAttribute="Obsolete,GeneratedCod ### Source Files You can also ignore specific source files from code coverage using the `ExcludeByFile` property - - Use single or multiple paths (separate by comma) - - Use file path or directory path with globbing (e.g `dir1/*.cs`) + +* Use single or multiple paths (separate by comma) +* Use file path or directory path with globbing (e.g `dir1/*.cs`) ```bash dotnet test /p:CollectCoverage=true /p:ExcludeByFile=\"**/dir1/class1.cs,**/dir2/*.cs,**/dir3/**/*.cs\" @@ -151,15 +165,17 @@ Coverlet gives the ability to have fine grained control over what gets excluded Syntax: `/p:Exclude=[Assembly-Filter]Type-Filter` Wildcards -- `*` => matches zero or more characters -- `?` => the prefixed character is optional + +* `*` => matches zero or more characters +* `?` => the prefixed character is optional Examples - - `/p:Exclude="[*]*"` => Excludes all types in all assemblies (nothing is instrumented) - - `/p:Exclude="[coverlet.*]Coverlet.Core.Coverage"` => Excludes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) - - `/p:Exclude="[*]Coverlet.Core.Instrumentation.*"` => Excludes all types belonging to `Coverlet.Core.Instrumentation` namespace in any assembly - - `/p:Exclude="[coverlet.*.tests?]*"` => Excludes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) - - `/p:Exclude=\"[coverlet.*]*,[*]Coverlet.Core*\"` => Excludes assemblies matching `coverlet.*` and excludes all types belonging to the `Coverlet.Core` namespace in any assembly + +* `/p:Exclude="[*]*"` => Excludes all types in all assemblies (nothing is instrumented) +* `/p:Exclude="[coverlet.*]Coverlet.Core.Coverage"` => Excludes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) +* `/p:Exclude="[*]Coverlet.Core.Instrumentation.*"` => Excludes all types belonging to `Coverlet.Core.Instrumentation` namespace in any assembly +* `/p:Exclude="[coverlet.*.tests?]*"` => Excludes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) +* `/p:Exclude=\"[coverlet.*]*,[*]Coverlet.Core*\"` => Excludes assemblies matching `coverlet.*` and excludes all types belonging to the `Coverlet.Core` namespace in any assembly ```bash dotnet test /p:CollectCoverage=true /p:Exclude="[coverlet.*]Coverlet.Core.Coverage" @@ -168,20 +184,21 @@ dotnet test /p:CollectCoverage=true /p:Exclude="[coverlet.*]Coverlet.Core.Covera Coverlet goes a step in the other direction by also letting you explicitly set what can be included using the `Include` property. Examples - - `/p:Include="[*]*"` => Includes all types in all assemblies (everything is instrumented) - - `/p:Include="[coverlet.*]Coverlet.Core.Coverage"` => Includes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) - - `/p:Include="[coverlet.*.tests?]*"` => Includes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) + +* `/p:Include="[*]*"` => Includes all types in all assemblies (everything is instrumented) +* `/p:Include="[coverlet.*]Coverlet.Core.Coverage"` => Includes the Coverage class in the `Coverlet.Core` namespace belonging to any assembly that matches `coverlet.*` (e.g `coverlet.core`) +* `/p:Include="[coverlet.*.tests?]*"` => Includes all types in any assembly starting with `coverlet.` and ending with `.test` or `.tests` (the `?` makes the `s` optional) Both `Exclude` and `Include` properties can be used together but `Exclude` takes precedence. You can specify multiple filter expressions by separting them with a comma (`,`). You can also include coverage of the test assembly itself by setting `/p:IncludeTestAssembly` to `true`. -### Skip auto-implemented properties +### Skip auto-implemented properties -Neither track nor record auto-implemented properties. +Neither track nor record auto-implemented properties. Syntax: `/p:SkipAutoProps=true` -### Instrument module wihtout local sources file. +### Instrument module wihtout local sources file Syntax: `/p:InstrumentModulesWithoutLocalSources=true` @@ -200,7 +217,7 @@ To exclude or include multiple assemblies when using Powershell scripts or creat Azure DevOps builds do not require double quotes to be unescaped: -``` +```shell dotnet test --configuration $(buildConfiguration) --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/ /p:Exclude="[MyAppName.DebugHost]*%2c[MyAppNamet.WebHost]*%2c[MyAppName.App]*" ``` @@ -223,16 +240,17 @@ Coverlet supports [SourceLink](https://github.com/dotnet/sourcelink) custom debu ## Deterministic build -Take a look at [documentation](DeterministicBuild.md) for further informations. -To generate deterministc report the parameter is: -``` +Take a look at [documentation](DeterministicBuild.md) for further information. +To generate deterministic report the parameter is: + +```shell /p:DeterministicReport=true ``` ## Exclude assemblies without sources from coverage The heuristic coverlet uses to determine if an assembly is a third-party dependency is based on the matching of the assembly`s source documents and the corresponding source files. -This parameter has three different values to control the automatic assembly exclusion. +This parameter has three different values to control the automatic assembly exclusion. | Parameter | Description | |-----------|-------------| @@ -241,6 +259,7 @@ This parameter has three different values to control the automatic assembly excl | None | No assembly is excluded. | Here is an example of how to specifiy the parameter: -``` + +```shell /p:ExcludeAssembliesWithoutSources="MissingAny" -``` \ No newline at end of file +``` diff --git a/Documentation/ReleasePlan.md b/Documentation/ReleasePlan.md index 3472cf8f6..42a87f13a 100644 --- a/Documentation/ReleasePlan.md +++ b/Documentation/ReleasePlan.md @@ -4,7 +4,7 @@ Coverlet is versioned with Semantic Versioning [2.0.0](https://semver.org/#semantic-versioning-200) that states: -``` +```text Given a version number MAJOR.MINOR.PATCH, increment the: MAJOR version when you make incompatible API changes, @@ -13,113 +13,87 @@ PATCH version when you make backwards-compatible bug fixes. Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. ``` -We release 3 components as NuGet packages: - -**coverlet.msbuild.nupkg** -**coverlet.console.nupkg** -**coverlet.collector.nupkg** - -### Current versions - -| Package | Version | -|:----------------------|:--------| -|**coverlet.msbuild** | 3.2.0 | -|**coverlet.console** | 3.2.0 | -|**coverlet.collector** | 3.2.0 | - - -| Release Date | coverlet.msbuild | coverlet.console | coverlet.collector| commit hash | notes | -| :-----------------|:-----------------|:------------------|:------------------|:-----------------------------------------|:-------------------------------| -| 29 Oct 2022 | 3.2.0 | 3.2.0 | 3.2.0 | e2c9d84a84a9d2d240ac15feb70f9198c6f8e173 | | -| 06 Feb 2022 | 3.1.2 | 3.1.2 | 3.1.2 | e335b1a8025e49e2f2de6b40ef12ec9d3ed11ceb | Fix CoreLib coverage issues | -| 30 Jan 2022 | 3.1.1 | 3.1.1 | 3.1.1 | e4278c06faba63122a870df15a1a1b934f6bc81d | | -| 19 July 2021 | 3.1.0 | 3.1.0 | 3.1.0 | 5a0ecc1e92fd754e2439dc3e4c828ff7386aa1a7 | Support for determistic build | -| 21 February 2021 | 3.0.3 | 3.0.3 | 3.0.3 | adfabfd58de0aabe263e7d2080324e0b8541071e | Fix regressions | -| 24 January 2021 | 3.0.2 | 3.0.2 | 3.0.2 | ed918515492193fd154b60270d440c40fa30fee9 | Fix regressions | -| 16 January 2021 | 3.0.1 | 3.0.1 | 3.0.1 | 1b45fd89245369ae94407e7a77bdfee112042486 | Fix severe coverage regression | -| 09 January 2021 | 3.0.0 | 3.0.0 | 3.0.0 | 1e77f9d2183a320e8991bfc296460e793301931f | Align versions numbers | -| 30 May 2020 | 2.9.0 | 1.7.2 | 1.3.0 | 83a38d45b3f9c231d705bfed849efbf41b3aaa86 | deterministic build support | -| 04 April 2020 | 2.8.1 | 1.7.1 | 1.2.1 | 3f81828821d07d756e02a4105b2533cedf0b543c | | -| 03 January 2019 | 2.8.0 | 1.7.0 | 1.2.0 | 72a688f1c47fa92059540d5fbb1c4b0b4bf0dc8c | | -| 23 September 2019 | 2.7.0 | 1.6.0 | 1.1.0 | 4ca01eb239038808739699470a61fad675af6c79 | | -| 01 July 2019 | 2.6.3 | 1.5.3 | 1.0.1 | e1593359497fdfe6befbb86304b8f4e09a656d14 | | -| 06 June 2019 | 2.6.2 | 1.5.2 | 1.0.0 | 3e7eac9df094c22335711a298d359890aed582e8 | first collector release | - -To get the list of commits between two version use git command -```bash -git log --oneline hashbefore currenthash -``` -# How to manually compare latest release with nightly build +We release 3 components as NuGet packages: -Before creating a new release it makes sense to test the new release against a benchmark repository. This can help to determine bugs that haven't been found -by the unit/integration tests. Therefore, coverage of the latest release is compared with our nightly build. +**coverlet.msbuild.nupkg** +**coverlet.console.nupkg** +**coverlet.collector.nupkg** -In the following example the benchmark repository refit (https://github.com/reactiveui/refit) is used which already uses coverlet for coverage. +## How to manually compare latest release with nightly build -1. Clone the benchmark repository (https://github.com/reactiveui/refit) +Before creating a new release it makes sense to test the new release against a benchmark repository. This can help to determine bugs that haven't been found +by the unit/integration tests. Therefore, coverage of the latest release is compared with our nightly build. -2. Check if latest coverlet version is used by the project, otherwise add coverlet to the project (https://github.com/coverlet-coverage/coverlet#installation). +In the following example the benchmark repository refit () is used which already uses coverlet for coverage. +1. Clone the benchmark repository () +2. Check if latest coverlet version is used by the project, otherwise add coverlet to the project (). 3. Create coverage report for latest coverlet version: -``` -dotnet test --collect:"XPlat Code Coverage" -``` + + ```shell + dotnet test --collect:"XPlat Code Coverage" + ``` 4. Update the test projects with the latest nightly build version of coverlet -(https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/ConsumeNightlyBuild.md). +(). 5. Create coverage report for nightly build version by rerunning the tests: -``` -dotnet test --collect:"XPlat Code Coverage" -``` -6. Check for differences in the coverage reports. + ```shell + dotnet test --collect:"XPlat Code Coverage" + ``` +6. Check for differences in the coverage reports. -# How to manually release packages to nuget.org +## How to manually release packages to nuget.org This is the steps to release new packages to nuget.org 1. Update projects version in file `version.json` in root of repo (remove `-preview.{height}` and adjust version) -Do a PR and merge to master. + Do a PR and merge to master. -2. Clone repo, **remember to build packages from master and not from your fork or metadata links will point to your forked repo.** . Run `git log -5` from repo root to verify last commit. +1. Clone repo, **remember to build packages from master and not from your fork or metadata links will point to your forked repo.** . Run `git log -5` from repo root to verify last commit. -3. From new cloned, aligned and versions updated repo root run pack command +1. From new cloned, aligned and versions updated repo root run build command - ``` + ```shell dotnet pack -c release /p:TF_BUILD=true /p:PublicRelease=true ... - coverlet.console -> D:\git\coverlet\src\coverlet.console\bin\Release\netcoreapp2.2\coverlet.console.dll - coverlet.console -> D:\git\coverlet\src\coverlet.console\bin\Release\netcoreapp2.2\publish\ - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.msbuild.2.8.1.nupkg'. - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.msbuild.2.8.1.snupkg'. - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.console.1.7.1.nupkg'. - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.console.1.7.1.snupkg'. - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.collector.1.2.1.nupkg'. - Successfully created package 'D:\git\coverlet\bin\Release\Packages\coverlet.collector.1.2.1.snupkg'. + coverlet.core -> C:\GitHub\coverlet\artifacts\bin\coverlet.core\release_netstandard2.0\coverlet.core.dll + coverlet.core -> C:\GitHub\coverlet\artifacts\bin\coverlet.core\release_net6.0\coverlet.core.dll + coverlet.collector -> C:\GitHub\coverlet\artifacts\bin\coverlet.collector\release_netstandard2.0\coverlet.collector.dll + coverlet.collector -> C:\GitHub\coverlet\artifacts\bin\coverlet.collector\release_net6.0\coverlet.collector.dll + coverlet.msbuild.tasks -> C:\GitHub\coverlet\artifacts\bin\coverlet.msbuild.tasks\release_netstandard2.0\coverlet.msbuild.tasks.dll + coverlet.msbuild.tasks -> C:\GitHub\coverlet\artifacts\bin\coverlet.msbuild.tasks\release_net6.0\coverlet.msbuild.tasks.dll + coverlet.console -> C:\GitHub\coverlet\artifacts\bin\coverlet.console\release\coverlet.console.dll + coverlet.console -> C:\GitHub\coverlet\artifacts\bin\coverlet.console\release\coverlet.console.exe + ... + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.msbuild.6.0.1.nupkg'. + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.msbuild.6.0.1.snupkg'. + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.collector.6.0.1.nupkg'. + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.collector.6.0.1.snupkg'. + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.console.6.0.1.nupkg'. + Successfully created package 'C:\GitHub\coverlet\artifacts\package\release\coverlet.console.6.0.1.snupkg'. + ... ``` -4. Sign the packages using SignClient tool https://www.nuget.org/packages/SignClient - - ```powershell - ❯ SignClient "Sign" ` - >> --baseDirectory "REPO ROOT DIRECTORY\bin" ` - >> --input "**/*.nupkg" ` - >> --config "ROOT REPO DIRECTORY\eng\signclient.json" ` - >> --user "USER" ` - >> --secret "SECRET" ` - >> --name "Coverlet" ` - >> --description "Coverlet" ` - >> --descriptionUrl "https://github.com/coverlet-coverage/coverlet" - ``` +1. Sign nuget packages using sign + +```powershell +sign code azure-key-vault **/*.nupkg --base-directory [ROOT-DIRECTORY]\artifacts\package\release\ --file-digest sha256 --description Coverlet --description-url https://github.com/coverlet-coverage/coverlet ` + --azure-key-vault-url [KEYVAULT-URL] ` + --azure-key-vault-client-id [CLIENT-ID] ` + --azure-key-vault-tenant-id [TENANT-ID] ` + --azure-key-vault-client-secret [KEYVAULT-SECRET] ` + --azure-key-vault-certificate [CERT-FRIENDLY-NAME] +``` -5. Upload *.nupkg files to Nuget.org site. **Check all metadata(url links, deterministic build etc...) before "Submit"** +1. Upload *.nupkg files to Nuget.org site. **Check all metadata(url links, deterministic build etc...) before "Submit"** -6. **On your fork**: - * Align to master - * Bump version by one (fix part) and re-add `-preview.{height}` - * Create release on repo https://github.com/coverlet-coverage/coverlet/releases - * Update the [Release Plan](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/ReleasePlan.md)(this document) and [ChangeLog](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md) - * Do PR and merge +1. **On your fork**: + * Align to master + * Bump version by one (fix part) and re-add `-preview.{height}` + * Create release on repo + * Update the [Release Plan](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/ReleasePlan.md)(this document) and [ChangeLog](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md) + * Do PR and merge diff --git a/Documentation/Roadmap.md b/Documentation/Roadmap.md index a7ef5117b..6415247af 100644 --- a/Documentation/Roadmap.md +++ b/Documentation/Roadmap.md @@ -1,30 +1,30 @@ # Roadmap -This document describes the roadmap for coverlet showing priorities. -Maintain coverlet means like any other project two things, answer/resolve soon as possible new issues that are blocking our users an second improve product with new features and enhancements in different areas. +This document describes the roadmap for coverlet showing priorities. +Maintain coverlet means like any other project two things, answer/resolve soon as possible new issues that are blocking our users an second improve product with new features and enhancements in different areas. All coverlet issues are labeled and categorized to better support this activites. -As soon as an issue is open is labeled with `untriaged` if not immediately solvable(we need to do some debugging/PoC to understand where is the issue). -After triage a final correct label is applied and will be taken into account depending on priority order. +As soon as an issue is open is labeled with `untriaged` if not immediately solvable(we need to do some debugging/PoC to understand where is the issue). +After triage a final correct label is applied and will be taken into account depending on priority order. We use `needs more info` if we're waiting for answers. Default priority order "should" be: 1) Bugs: we should fix bugs as soon as possible and for first bugs related to coverage because this is the goal of coverlet. -Coverage bugs: https://github.com/coverlet-coverage/coverlet/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Atenet-coverage -Other bugs: https://github.com/coverlet-coverage/coverlet/issues?q=is%3Aissue+is%3Aopen+label%3Abug + Coverage bugs: + Other bugs: 2) New features: analyze and add new features, we have three drivers so features could be related to one of these. -Feature requests: https://github.com/coverlet-coverage/coverlet/issues?q=is%3Aissue+is%3Aopen+label%3Afeature-request + Feature requests: 3) Performance: we never worked on performance aspect of coverlet, it makes sense for a "new project with some hope", but today coverlet is the facto the dotnet coverage tool, so we HAVE TO approach this aspect. -Performance issues: https://github.com/coverlet-coverage/coverlet/issues?q=is%3Aissue+is%3Aopen+label%3Atenet-performance +Performance issues: -Some new features have got a `Discussion` label if we don't have and agreement yet on semantics. -Discussions: https://github.com/coverlet-coverage/coverlet/issues?q=is%3Aissue+is%3Aopen+label%3Adiscussion +Some new features have got a `Discussion` label if we don't have and agreement yet on semantics. +Discussions: ## New features roadmap @@ -32,16 +32,14 @@ This is the list of features we should develop soon as possible: ### High priority -- Allow merge reports solution wide on all flavours https://github.com/coverlet-coverage/coverlet/issues/662 https://github.com/coverlet-coverage/coverlet/issues/357 +- Allow merge reports solution wide on all flavours -- Some perf improvements https://github.com/coverlet-coverage/coverlet/issues/836 +- Some perf improvements ### Low priority -- Rethink hits reports strategy https://github.com/coverlet-coverage/coverlet/issues/808 +- Rethink hits reports strategy ## Maintainers discussion channel [As maintainers we should try to find a way to keep in synch, we could use a chat where we can "take note" of progress and if possible answer to questions/doubt, I know this is OSS, but it's hard keep project at high level without "more ideas".] - - diff --git a/Documentation/Troubleshooting.md b/Documentation/Troubleshooting.md index f5df25ac8..5a3e682cc 100644 --- a/Documentation/Troubleshooting.md +++ b/Documentation/Troubleshooting.md @@ -4,45 +4,46 @@ 1) Generate verbose log -``` -dotnet test test\coverlet.core.tests\coverlet.core.tests.csproj -c debug /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include=[coverlet.*]* -verbosity:diagnostic -bl:msbuild.binlog -noconsolelogger -``` + ```shell + dotnet test test\coverlet.core.tests\coverlet.core.tests.csproj -c debug /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include=[coverlet.*]* -verbosity:diagnostic -bl:msbuild.binlog -noconsolelogger + ``` -2) Download http://msbuildlog.com/ +2) Download 3) Open `msbuild.binlog` generated and search for '[coverlet]' logs - -![File](images/file.png) + + ![File](images/file.png) ## Collectors integration -``` +```shell dotnet test --collect:"XPlat Code Coverage" --settings runsettings --diag:log.txt ``` You'll get logs file in same folder similar to -``` +```text log.datacollector.19-09-12_14-55-17_64755_5.txt log.host.19-09-12_14-55-18_82700_6.txt log.txt ``` + Search inside with filter '[coverlet]' ## Coverlet Global Tool -``` -coverlet "C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\coverlet.core.tests.dll" --target "dotnet" --targetargs "test C:\git\coverlet\test\coverlet.core.tests --no-build" --verbosity detailed +```shell +coverlet "C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\coverlet.core.tests.dll" --target "dotnet" --targetargs "test C:\git\coverlet\test\coverlet.core.tests --no-build" --verbosity detailed ``` Sample output -``` +```text ... -Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\coverlet.core.dll' -Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\xunit.runner.reporters.netcoreapp10.dll' -Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\xunit.runner.utility.netcoreapp10.dll' -Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\xunit.runner.visualstudio.dotnetcore.testadapter.dll' -Test run for C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\coverlet.core.tests.dll(.NETCoreApp,Version=v2.0) +Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\coverlet.core.dll' +Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\xunit.runner.reporters.netcoreapp10.dll' +Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\xunit.runner.utility.netcoreapp10.dll' +Instrumented module: 'C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\xunit.runner.visualstudio.dotnetcore.testadapter.dll' +Test run for C:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\coverlet.core.tests.dll(.NETCoreApp,Version=v2.0) Microsoft (R) Test Execution Command Line Tool Version 16.0.1 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... @@ -56,7 +57,7 @@ Test execution time: 4,6411 Seconds Calculating coverage result... Hits file:'C:\Users\Marco\AppData\Local\Temp\coverlet.core_703263e9-21f0-4d1c-9ce3-98ddeacecc01' not found for module: 'coverlet.core' - Generating report 'C:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverage.json' + Generating report 'C:\git\coverlet\src\coverlet.console\bin\Debug\net6.0\coverage.json' +--------------------------------------------------+--------+--------+--------+ | Module | Line | Branch | Method | +--------------------------------------------------+--------+--------+--------+ @@ -80,116 +81,120 @@ Hits file:'C:\Users\Marco\AppData\Local\Temp\coverlet.core_703263e9-21f0-4d1c-9c ## Use local build (no collectors) -Sometimes is useful test local updated source to fix issue. +Sometimes is useful test local updated source to fix issue. You can "load" your local build using simple switch: * build repo -``` -D:\git\coverlet (fixjsonserializerbug -> origin) -λ dotnet build -Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core -Copyright (C) Microsoft Corporation. All rights reserved. - - Restore completed in 52.23 ms for D:\git\coverlet\test\coverlet.testsubject\coverlet.testsubject.csproj. - Restore completed in 58.97 ms for D:\git\coverlet\src\coverlet.console\coverlet.console.csproj. - Restore completed in 59 ms for D:\git\coverlet\src\coverlet.core\coverlet.core.csproj. - Restore completed in 59.17 ms for D:\git\coverlet\src\coverlet.msbuild.tasks\coverlet.msbuild.tasks.csproj. - Restore completed in 59.26 ms for D:\git\coverlet\src\coverlet.collector\coverlet.collector.csproj. - Restore completed in 60.1 ms for D:\git\coverlet\test\coverlet.collector.tests\coverlet.collector.tests.csproj. - Restore completed in 60.42 ms for D:\git\coverlet\test\coverlet.core.performancetest\coverlet.core.performancetest.csproj. - Restore completed in 60.47 ms for D:\git\coverlet\test\coverlet.core.tests\coverlet.core.tests.csproj. - Restore completed in 22.85 ms for D:\git\coverlet\test\coverlet.core.tests\coverlet.core.tests.csproj. - coverlet.testsubject -> D:\git\coverlet\test\coverlet.testsubject\bin\Debug\netcoreapp2.0\coverlet.testsubject.dll - coverlet.core -> D:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll - coverlet.msbuild.tasks -> D:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\coverlet.msbuild.tasks.dll - coverlet.collector -> D:\git\coverlet\src\coverlet.collector\bin\Debug\netcoreapp2.0\coverlet.collector.dll - coverlet.console -> D:\git\coverlet\src\coverlet.console\bin\Debug\netcoreapp2.2\coverlet.console.dll - coverlet.core.performancetest -> D:\git\coverlet\test\coverlet.core.performancetest\bin\Debug\netcoreapp2.0\coverlet.core.performancetest.dll - coverlet.core.tests -> D:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\coverlet.core.tests.dll - coverlet.collector.tests -> D:\git\coverlet\test\coverlet.collector.tests\bin\Debug\netcoreapp2.2\coverlet.collector.tests.dll - -Build succeeded. - 0 Warning(s) - 0 Error(s) - -Time Elapsed 00:00:07.42 - -D:\git\coverlet (fixjsonserializerbug -> origin) -``` + ```text + D:\git\coverlet (fixjsonserializerbug -> origin) + λ dotnet build + Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core + Copyright (C) Microsoft Corporation. All rights reserved. + + Restore completed in 52.23 ms for D:\git\coverlet\test\coverlet.testsubject\coverlet.testsubject.csproj. + Restore completed in 58.97 ms for D:\git\coverlet\src\coverlet.console\coverlet.console.csproj. + Restore completed in 59 ms for D:\git\coverlet\src\coverlet.core\coverlet.core.csproj. + Restore completed in 59.17 ms for D:\git\coverlet\src\coverlet.msbuild.tasks\coverlet.msbuild.tasks.csproj. + Restore completed in 59.26 ms for D:\git\coverlet\src\coverlet.collector\coverlet.collector.csproj. + Restore completed in 60.1 ms for D:\git\coverlet\test\coverlet.collector.tests\coverlet.collector.tests.csproj. + Restore completed in 60.42 ms for D:\git\coverlet\test\coverlet.core.performancetest\coverlet.core.performancetest.csproj. + Restore completed in 60.47 ms for D:\git\coverlet\test\coverlet.core.tests\coverlet.core.tests.csproj. + Restore completed in 22.85 ms for D:\git\coverlet\test\coverlet.core.tests\coverlet.core.tests.csproj. + coverlet.testsubject -> D:\git\coverlet\test\coverlet.testsubject\bin\Debug\net6.0\coverlet.testsubject.dll + coverlet.core -> D:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll + coverlet.msbuild.tasks -> D:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\coverlet.msbuild.tasks.dll + coverlet.collector -> D:\git\coverlet\src\coverlet.collector\bin\Debug\net6.0\coverlet.collector.dll + coverlet.console -> D:\git\coverlet\src\coverlet.console\bin\Debug\net6.0\coverlet.console.dll + coverlet.core.performancetest -> D:\git\coverlet\test\coverlet.core.performancetest\bin\Debug\net6.0\coverlet.core.performancetest.dll + coverlet.core.tests -> D:\git\coverlet\test\coverlet.core.tests\bin\Debug\net6.0\coverlet.core.tests.dll + coverlet.collector.tests -> D:\git\coverlet\test\coverlet.collector.tests\bin\Debug\net6.0\coverlet.collector.tests.dll + + Build succeeded. + 0 Warning(s) + 0 Error(s) + + Time Elapsed 00:00:07.42 + + D:\git\coverlet (fixjsonserializerbug -> origin) + ``` * Go to repro project and run -``` -D:\git\Cake.Codecov\Source\Cake.Codecov.Tests (develop -> origin) -λ dotnet test /p:CollectCoverage=true /p:Exclude="[xunit.*]*" /p:CoverletToolsPath=D:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\ -Test run for D:\git\Cake.Codecov\Source\Cake.Codecov.Tests\bin\Debug\netcoreapp2.0\Cake.Codecov.Tests.dll(.NETCoreApp,Version=v2.0) -... -``` + ```text + D:\git\Cake.Codecov\Source\Cake.Codecov.Tests (develop -> origin) + λ dotnet test /p:CollectCoverage=true /p:Exclude="[xunit.*]*" /p:CoverletToolsPath=D:\git\coverlet\src\coverlet.msbuild.tasks\bin\Debug\netstandard2.0\ + Test run for D:\git\Cake.Codecov\Source\Cake.Codecov.Tests\bin\Debug\netcoreapp2.0\Cake.Codecov.Tests.dll(.NETCoreApp,Version=v2.0) + ... + ``` In this way you can add `Debug.Launch()` inside coverlet source and debug. -## Use local collectors build +## Use local collectors build To use/debug local collectors build we need to tell to our project to restore and use our local build nuget package. 1) Build local package -``` -C:\git\coverlet\src\coverlet.collector (master -> origin) -λ dotnet pack -Microsoft (R) Build Engine version 16.2.32702+c4012a063 for .NET Core -Copyright (C) Microsoft Corporation. All rights reserved. - - Restore completed in 50,28 ms for C:\git\coverlet\src\coverlet.collector\coverlet.collector.csproj. - Restore completed in 50,28 ms for C:\git\coverlet\src\coverlet.core\coverlet.core.csproj. - coverlet.core -> C:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll - coverlet.collector -> C:\git\coverlet\src\coverlet.collector\bin\Debug\netcoreapp2.0\coverlet.collector.dll - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.0.67.nupkg'. - Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.0.67.snupkg'. -``` + ```text + C:\git\coverlet\src\coverlet.collector (master -> origin) + λ dotnet pack + Microsoft (R) Build Engine version 16.2.32702+c4012a063 for .NET Core + Copyright (C) Microsoft Corporation. All rights reserved. + + Restore completed in 50,28 ms for C:\git\coverlet\src\coverlet.collector\coverlet.collector.csproj. + Restore completed in 50,28 ms for C:\git\coverlet\src\coverlet.core\coverlet.core.csproj. + coverlet.core -> C:\git\coverlet\src\coverlet.core\bin\Debug\netstandard2.0\coverlet.core.dll + coverlet.collector -> C:\git\coverlet\src\coverlet.collector\bin\Debug\netcoreapp2.0\coverlet.collector.dll + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.0.67.nupkg'. + Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.collector.1.0.67.snupkg'. + ``` + 2) Add new `NuGet.Config` file on your test project/solution -``` - - - - - - - - - - - -``` + + ```xml + + + + + + + + + + + + ``` + 3) Update nuget package in our test project -```xml - - - - netcoreapp2.2 - false - - - - - - - <-- My local package version - - - - - - - -``` + + ```xml + + + + net6.0 + false + + + + + + + <-- My local package version --> + + + + + + + + ``` 4) Run test command -``` - dotnet test XUnitTestProject1\ --collect:"XPlat Code Coverage" -``` + ```shell + dotnet test XUnitTestProject1\ --collect:"XPlat Code Coverage" + ``` You can also attach/debug your code adding some line of code on collectors i.e. @@ -208,15 +213,15 @@ Fire attach System.Diagnostics.Debugger.Launch(); ``` -If you want debug in-process collector, you need to set VSTEST_HOST_DEBUG(https://github.com/microsoft/vstest/issues/2158) environment variable +If you want debug in-process collector, you need to set [VSTEST_HOST_DEBUG](https://github.com/microsoft/vstest/issues/2158) environment variable -``` +```shell set VSTEST_HOST_DEBUG=1 ``` Test host will wait for debugger -``` +```text Starting test execution, please wait... Logging Vstest Diagnostics in file: C:\git\coverletissue\collectorlog\XUnitTestProject1\log.txt Host debugging is enabled. Please attach debugger to testhost process to continue. @@ -231,7 +236,7 @@ Coverlet works thanks to ModuleTracker that is injected during instrumentation f We can collect logs from trackers through an enviroment variable -``` +```shell set COVERLET_ENABLETRACKERLOG=1 ``` @@ -241,7 +246,7 @@ When enabled, tracking event will be collected in a log file near to module loca You can live attach and debug msbuild tasks with `COVERLET_MSBUILD_INSTRUMENTATIONTASK_DEBUG` env variable -``` +```shell set COVERLET_MSBUILD_INSTRUMENTATIONTASK_DEBUG=1 ``` @@ -249,14 +254,14 @@ You can live attach and debug msbuild tasks with `COVERLET_MSBUILD_INSTRUMENTATI You can live attach and debug collectors with `COVERLET_DATACOLLECTOR_OUTOFPROC_DEBUG` and `COVERLET_DATACOLLECTOR_INPROC_DEBUG` env variable -``` +```shell set COVERLET_DATACOLLECTOR_OUTOFPROC_DEBUG=1 set COVERLET_DATACOLLECTOR_INPROC_DEBUG=1 ``` -You will be asked to attach a debugger through UI popup. +You will be asked to attach a debugger through UI popup. To enable exceptions log for in-process data collectors -``` +```shell set COVERLET_DATACOLLECTOR_INPROC_EXCEPTIONLOG_ENABLED=1 ``` diff --git a/Documentation/VSTestIntegration.md b/Documentation/VSTestIntegration.md index 4cc67383d..3c8be75e1 100644 --- a/Documentation/VSTestIntegration.md +++ b/Documentation/VSTestIntegration.md @@ -2,28 +2,25 @@ **Supported runtime versions**: -Before version `3.0.0` -- .NET Core >= 2.0 -- .NET Framework not fully supported(only out of process collector, could suffer of [known issue](KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test)) +Since version `6.0.0` -Since version `3.0.0` -- .NET Core >= 2.0 -- .NET Framework >= 4.6.1 +* .NET Core >= 6.0 +* .NET Framework >= 4.6.2 -As explained in quick start section, to use collectors you need to run *SDK v2.2.401* or newer and your project file must reference `coverlet.collector.dll` and a minimum version of `Microsoft.NET.Test.Sdk`. +As explained in quick start section, to use collectors you need to run *SDK v6.0.100* (LTS) or newer and your project file must reference `coverlet.collector` and a minimum version of `Microsoft.NET.Test.Sdk`. A sample project file looks like: ```xml - netcoreapp3.0;netcoreapp2.1;net46 + net6.0;net48 - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -37,13 +34,13 @@ The reference to `coverlet.collector` package is included by default with xunit With correct reference in place you can run coverage through default dotnet test CLI verbs: -``` +```shell dotnet test --collect:"XPlat Code Coverage" ``` or -``` +```text dotnet publish ... ... -> C:\project\bin\Debug\netcoreapp3.0\testdll.dll @@ -56,7 +53,7 @@ As you can see in case of `vstest` verb you **must** publish project before. At the end of tests you'll find the coverage file data under default VSTest platform directory `TestResults` -``` +```text Attachments: C:\git\coverlet\Documentation\Examples\VSTest\HelloWorld\XUnitTestProject1\TestResults\bc5e983b-d7a8-4f17-8c0a-8a8831a4a891\coverage.cobertura.xml Test Run Successful. @@ -65,30 +62,43 @@ Total tests: 1 Total time: 2,5451 Seconds ``` -You can change the position of files using standard `dotnet test` switch `[-r|--results-directory]` +You can change the output directory using the standard `dotnet test` switch `--results-directory` -*NB: By design VSTest platform will create your file under a random named folder(guid string) so if you need stable path to load file to some gui report system(i.e. coveralls, codecov, reportgenerator etc..) that doesn't support glob patterns or hierarchical search, you'll need to manually move resulting file to a predictable folder* +>*NB: By design VSTest platform will create your file under a random named folder(guid string) so if you need stable path to load file to some gui report system(i.e. coveralls, codecov, reportgenerator etc..) that doesn't support glob patterns or hierarchical search, you'll need to manually move resulting file to a predictable folder* ## Coverlet options supported by VSTest integration -At the moment VSTest integration doesn't support all features of msbuild and .NET tool, for instance show result on console, report merging and threshold validation. -We're working to fill the gaps. -*PS: if you don't have any other way to merge reports(for instance your report generator doesn't support multi coverage file) you can for the moment exploit a trick reported by one of our contributor Daniel Paz(@p4p3) https://github.com/tonerdo/coverlet/pull/225#issuecomment-573896446* +:warning:At the moment VSTest integration **doesn't support all features** of msbuild and .NET tool, for instance show result on console, report merging and threshold validation. +We're working to fill the gaps. + +> [!TIP] +> *Some alternative solutions to merge coverage files* +> +> * use _dotnet-coverage_ tool and merge multiple coverage files +> +> `dotnet-coverage merge artifacts/coverage/**/coverage.cobertura.xml -f cobertura -o artifacts/coverage/coverage.xml`* +> +> * use _dotnet-reportgenerator-globaltool_ to create a HTML report and a merged coverage file +> +> `reportgenerator -reports:"**/*.cobertura.xml" -targetdir:"artifacts\reports.cobertura" -reporttypes:"HtmlInline_AzurePipelines_Dark;Cobertura"` ### Default option (if you don't specify a runsettings file) Without specifying a runsettings file and calling coverlet by just the name of the collector, the result of the generated coverage output is by default in cobertura format. -``` + +```shell dotnet test --collect:"XPlat Code Coverage" ``` The output format of the coverage report can also be changed without a runsettings file by specifying it in a parameter. The supported formats are lcov, opencover, cobertura, teamcity, json (default coverlet proprietary format). -``` + +```shell dotnet test --collect:"XPlat Code Coverage;Format=json" ``` It is even possible to specify the coverage output in multiple formats. -``` + +```shell dotnet test --collect:"XPlat Code Coverage;Format=json,lcov,cobertura" ``` @@ -98,12 +108,13 @@ These are a list of options that are supported by coverlet. These can be specifi | Option | Summary | |:-------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Format | Coverage output format. These are either cobertura, json, lcov, opencover or teamcity as well as combinations of these formats. | -| Exclude | Exclude from code coverage analysing using filter expressions. | -| ExcludeByFile | Ignore specific source files from code coverage. | -| Include | Explicitly set what to include in code coverage analysis using filter expressions. | +| Format | Coverage output format. These are either cobertura, json, lcov, opencover or teamcity as well as combinations of these formats. | +| Exclude | Exclude from code coverage analysing using filter expressions. | +| ExcludeByAttribute | Exclude a method, an entire class or assembly from code coverage decorated by an attribute. | +| ExcludeByFile | Ignore specific source files from code coverage. | +| Include | Explicitly set what to include in code coverage analysis using filter expressions. | | IncludeDirectory | Explicitly set which directories to include in code coverage analysis. | -| SingleHit | Specifies whether to limit code coverage hit reporting to a single hit for each location. | +| SingleHit | Specifies whether to limit code coverage hit reporting to a single hit for each location. | | UseSourceLink | Specifies whether to use SourceLink URIs in place of file system paths. | | IncludeTestAssembly | Include coverage of the test assembly. | | SkipAutoProps | Neither track nor record auto-implemented properties. | @@ -113,14 +124,14 @@ These are a list of options that are supported by coverlet. These can be specifi How to specify these options via runsettings? -``` +```xml - json,cobertura,lcov,teamcity,opencover + json,cobertura,lcov,teamcity,opencover [coverlet.*.tests?]*,[*]Coverlet.Core* [coverlet.*]*,[*]Coverlet.Core* Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute @@ -138,13 +149,13 @@ How to specify these options via runsettings? ``` + Filtering details are present on [msbuild guide](MSBuildIntegration.md#excluding-from-coverage). This runsettings file can easily be provided using command line option as given : -1. `dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings` - -2. `dotnet vstest C:\project\bin\Debug\netcoreapp3.0\publish\testdll.dll --collect:"XPlat Code Coverage" --settings coverlet.runsettings` +* `dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings` +* `dotnet vstest C:\project\bin\Debug\netcoreapp3.0\publish\testdll.dll --collect:"XPlat Code Coverage" --settings coverlet.runsettings` Take a look at our [`HelloWorld`](Examples/VSTest/HelloWorld/HowTo.md) sample. @@ -154,20 +165,20 @@ You can avoid passing a `runsettings` file to `dotnet test` driver by using the For instance if you want to set the `Format` element as a runsettings option you can use this syntax: -``` +```shell dotnet test --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=json,cobertura,lcov,teamcity,opencover ``` -Take a look here for further information: https://github.com/microsoft/vstest-docs/blob/master/docs/RunSettingsArguments.md +Take a look here for further information: ## How it works -Coverlet integration is implemented with the help of [datacollectors](https://github.com/Microsoft/vstest-docs/blob/master/docs/extensions/datacollector.md). +Coverlet integration is implemented with the help of [datacollectors](https://github.com/microsoft/vstest/blob/main/docs/extensions/datacollector.md). When we specify `--collect:"XPlat Code Coverage"` VSTest platform tries to load coverlet collectors inside `coverlet.collector.dll` 1. Out-of-proc Datacollector: The outproc collector run in a separate process(datacollector.exe/datacollector.dll) than the process in which tests are being executed(testhost*.exe/testhost.dll). This datacollector is responsible for calling into Coverlet APIs for instrumenting dlls, collecting coverage results and sending the coverage output file back to test platform. -2. In-proc Datacollector: The in-proc collector is loaded in the testhost process executing the tests. This collector will be needed to remove the dependency on the process exit handler to flush the hit files and avoid to hit this [serious known issue](KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test) +1. In-proc Datacollector: The in-proc collector is loaded in the testhost process executing the tests. This collector will be needed to remove the dependency on the process exit handler to flush the hit files and avoid to hit this [serious known issue](KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test) ## Known Issues diff --git a/README.md b/README.md index c60b9d37c..cea37fcfc 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,54 @@ # Coverlet -[![Build Status](https://dev.azure.com/tonerdo/coverlet/_apis/build/status/coverlet-coverage.coverlet?branchName=master)](https://dev.azure.com/tonerdo/coverlet/_build/latest?definitionId=5&branchName=master) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/coverlet-coverage/coverlet/blob/master/LICENSE) +[![Build Status](https://dev.azure.com/tonerdo/coverlet/_apis/build/status/coverlet-coverage.coverlet?branchName=master)](https://dev.azure.com/tonerdo/coverlet/_build/latest?definitionId=5&branchName=master) ![Code%20Coverage](https://img.shields.io/azure-devops/coverage/tonerdo/coverlet/5/master?label=Code%20Coverage) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/coverlet-coverage/coverlet/blob/master/LICENSE) | Driver | Current version | Downloads | |---|---|---| -| coverlet.collector | [![NuGet](https://img.shields.io/nuget/v/coverlet.collector.svg)](https://www.nuget.org/packages/coverlet.collector/) | [![NuGet](https://img.shields.io/nuget/dt/coverlet.collector.svg)](https://www.nuget.org/packages/coverlet.collector/) +| coverlet.collector | [![NuGet](https://img.shields.io/nuget/v/coverlet.collector.svg)](https://www.nuget.org/packages/coverlet.collector/) | [![NuGet](https://img.shields.io/nuget/dt/coverlet.collector.svg)](https://www.nuget.org/packages/coverlet.collector/) | coverlet.msbuild | [![NuGet](https://img.shields.io/nuget/v/coverlet.msbuild.svg)](https://www.nuget.org/packages/coverlet.msbuild/) | [![NuGet](https://img.shields.io/nuget/dt/coverlet.msbuild.svg)](https://www.nuget.org/packages/coverlet.msbuild/) | | coverlet.console | [![NuGet](https://img.shields.io/nuget/v/coverlet.console.svg)](https://www.nuget.org/packages/coverlet.console/) | [![NuGet](https://img.shields.io/nuget/dt/coverlet.console.svg)](https://www.nuget.org/packages/coverlet.console/) | -Coverlet is a cross platform code coverage framework for .NET, with support for line, branch and method coverage. It works with .NET Framework on Windows and .NET Core on all supported platforms. +Coverlet is a cross platform code coverage framework for .NET, with support for line, branch and method coverage. It works with [.NET Framework](Documentation/KnownIssues.md#badimageformatexception-net-framework-47x-48x) on Windows and .NET Core on all supported platforms. -**Coverlet documentation reflect the current repository state of the features, not the released ones.** +**Coverlet documentation reflect the current repository state of the features, not the released ones.** **Check the [changelog](Documentation/Changelog.md) to understand if the documented feature you want to use has been officially released.** -# Main contents -* [QuickStart](#Quick-Start) -* [How It Works](#How-It-Works) +## Main contents + +* [QuickStart](#quick-start) +* [How It Works](#how-it-works) * [Drivers features differences](Documentation/DriversFeatures.md) -* [Deterministic build support](#Deterministic-build-support) -* [Known Issues](#Known-Issues) -* [Consume nightly build](#Consume-nightly-build) +* [Deterministic build support](#deterministic-build-support) +* [Known Issues](#known-issues) +* [Consume nightly build](#consume-nightly-build) * [Feature samples](Documentation/Examples.md) -* [Cake Add-In](#Cake-Add-In) -* [Visual Studio Add-In](#Visual-Studio-Add-In) +* [Cake Add-In](#cake-add-in) +* [Visual Studio Add-In](#visual-studio-add-in) * [Changelog](Documentation/Changelog.md) * [Roadmap](Documentation/Roadmap.md) ## Quick Start -Coverlet can be used through three different *drivers* +Coverlet can be used through three different *drivers* * VSTest engine integration * MSBuild task integration * As a .NET Global tool (supports standalone integration tests) -Coverlet supports only SDK-style projects https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk?view=vs-2019 - +Coverlet supports only SDK-style projects https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk?view=vs-2019 ### VSTest Integration (preferred due to [known issue](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test)) -### Installation +### Installation (coverlet.collector) + ```bash dotnet add package coverlet.collector ``` -N.B. You **MUST** add package only to test projects and if you create xunit test projects (`dotnet new xunit`) you'll find the reference already present in `csproj` file because Coverlet is the default coverage tool for every .NET Core and >= .NET 5 applications, you've only to update to last version if needed. -### Usage +N.B. You **MUST** add package only to test projects and if you create xunit test projects (`dotnet new xunit`) you'll find the reference already present in `csproj` file because Coverlet is the default coverage tool for every .NET Core and >= .NET 6 applications, you've only to update to last version if needed. Do not add `coverlet.collector` and `coverlet.msbuild` package in a test project. + +### Usage (coverlet.collector) + Coverlet is integrated into the Visual Studio Test Platform as a [data collector](https://github.com/Microsoft/vstest-docs/blob/master/docs/extensions/datacollector.md). To get coverage simply run the following command: ```bash @@ -56,22 +59,26 @@ After the above command is run, a `coverage.cobertura.xml` file containing the r See [documentation](Documentation/VSTestIntegration.md) for advanced usage. -#### Requirements -* _You need to be running .NET Core SDK v2.2.401 or newer_ -* _You need to reference version 16.5.0 and above of Microsoft.NET.Test.Sdk_ -``` - +#### Requirements (coverlet.collector) + +* _You need to be running .NET 6.0 SDK v6.0.316 or newer_ +* _You need to reference version 17.5.0 and above of Microsoft.NET.Test.Sdk_ + +```xml + ``` ### MSBuild Integration (suffers of possible [known issue](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test)) -### Installation +### Installation (coverlet.msbuild) + ```bash dotnet add package coverlet.msbuild ``` -N.B. You **MUST** add package only to test projects -### Usage +N.B. Typically you **MUST** add package only to test projects. Do not add `coverlet.msbuild` and `coverlet.collector` package in a test project. + +### Usage (coverlet.msbuild) Coverlet also integrates with the build system to run code coverage after tests. Enabling code coverage is as simple as setting the `CollectCoverage` property to `true` @@ -83,18 +90,19 @@ After the above command is run, a `coverage.json` file containing the results wi See [documentation](Documentation/MSBuildIntegration.md) for advanced usage. -#### Requirements +#### Requirements (coverlet.msbuild) + Requires a runtime that support _.NET Standard 2.0 and above_ ### .NET Global Tool ([guide](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools), suffers from possible [known issue](https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/KnownIssues.md#1-vstest-stops-process-execution-earlydotnet-test)) -### Installation +### Installation (coverlet.console) ```bash dotnet tool install --global coverlet.console ``` -### Usage +### Usage (coverlet.console) The `coverlet` tool is invoked by specifying the path to the assembly that contains the unit tests. You also need to specify the test runner and the arguments to pass to the test runner using the `--target` and `--targetargs` options respectively. The invocation of the test runner with the supplied arguments **must not** involve a recompilation of the unit test assembly or no coverage result will be generated. @@ -108,11 +116,11 @@ _Note: The `--no-build` flag is specified so that the `/path/to/test-assembly.dl See [documentation](Documentation/GlobalTool.md) for advanced usage. -#### Requirements -.NET global tools rely on a .NET Core runtime installed on your machine https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools#what-could-go-wrong +#### Requirements (coverlet.console) -.NET Coverlet global tool requires _.NET Core 2.2 and above_ +.NET global tools rely on a .NET Core runtime installed on your machine https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools#what-could-go-wrong +.NET Coverlet global tool requires _.NET Core 2.2 and above_ ## How It Works @@ -131,14 +139,14 @@ Coverlet generates code coverage information by going through the following proc ## Deterministic build support -Coverlet supports coverage for deterministic builds. The solution at the moment is not optimal and need a workaround. +Coverlet supports coverage for deterministic builds. The solution at the moment is not optimal and need a workaround. Take a look at [documentation](Documentation/DeterministicBuild.md). ## Are you in trouble with some feature? Check on [examples](Documentation/Examples.md)! ## Known Issues -Unfortunately we have some known issues, check it [here](Documentation/KnownIssues.md) +Unfortunately we have some known issues, check it [here](Documentation/KnownIssues.md) ## Cake Add-In @@ -149,10 +157,12 @@ If you're using [Cake Build](https://cakebuild.net) for your build script you ca If you want to visualize coverlet output inside Visual Studio while you code, you can use the following addins depending on your platform. ### Windows + If you're using Visual Studio on Windows, you can use the [Fine Code Coverage](https://marketplace.visualstudio.com/items?itemName=FortuneNgwenya.FineCodeCoverage) extension. Visualization is updated when you run unit tests inside Visual Studio. ### Mac OS + If you're using Visual Studio for Mac, you can use the [VSMac-CodeCoverage](https://github.com/ademanuele/VSMac-CodeCoverage) extension. ## Consume nightly build @@ -166,13 +176,14 @@ If you find a bug or have a feature request, please report them at this reposito ## Coverlet Team -Author and owner -* [Toni Solarin-Sodara](https://github.com/tonerdo) +Author and owner +* [Toni Solarin-Sodara](https://github.com/tonerdo) Co-maintainers -* [Peter Liljenberg](https://github.com/petli) * [David Müller](https://github.com/daveMueller) +* [Bert](https://github.com/Bertk) +* [Peter Liljenberg](https://github.com/petli) * [Marco Rossignoli](https://github.com/MarcoRossignoli) ## Code of Conduct @@ -188,6 +199,6 @@ Part of the code is based on work done by OpenCover team https://github.com/Open ## License -This project is licensed under the MIT license. See the [LICENSE](LICENSE) file for more info. - +This project is licensed under the MIT license. See the [LICENSE](LICENSE) file for more info. + ## Supported by the [.NET Foundation](https://dotnetfoundation.org/) diff --git a/coverlet.sln b/coverlet.sln index efccfa31f..85241f5e4 100644 --- a/coverlet.sln +++ b/coverlet.sln @@ -1,164 +1,234 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.2.32208.508 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E877EBA4-E78B-4F7D-A2D3-1E070FED04CD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core", "src\coverlet.core\coverlet.core.csproj", "{31084026-D563-4B91-BE71-174C4270CCF4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.msbuild.tasks", "src\coverlet.msbuild.tasks\coverlet.msbuild.tasks.csproj", "{FA73E423-9790-4F35-B018-3C4E3CA338BA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.tests", "test\coverlet.core.tests\coverlet.core.tests.csproj", "{E7637CC6-43F7-461A-A0BF-3C14562419BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.console", "src\coverlet.console\coverlet.console.csproj", "{F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.testsubject", "test\coverlet.testsubject\coverlet.testsubject.csproj", "{AE117FAA-C21D-4F23-917E-0C8050614750}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.performancetest", "test\coverlet.core.performancetest\coverlet.core.performancetest.csproj", "{C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector", "src\coverlet.collector\coverlet.collector.csproj", "{F5B2C45B-274B-43D6-9565-8B50659CFE56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector.tests", "test\coverlet.collector.tests\coverlet.collector.tests.csproj", "{5ED4FA81-8F8C-4211-BA88-7573BD63262E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.empty", "test\coverlet.tests.projectsample.empty\coverlet.tests.projectsample.empty.csproj", "{085A3AFB-C086-4E98-86F1-1B481446EC5E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{77A15177-8262-488F-AF2B-91B9055715DA}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .gitignore = .gitignore - eng\azure-pipelines-nightly.yml = eng\azure-pipelines-nightly.yml - eng\azure-pipelines.yml = eng\azure-pipelines.yml - eng\build.yml = eng\build.yml - DeterministicBuild.targets = DeterministicBuild.targets - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - global.json = global.json - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.excludedbyattribute", "test\coverlet.tests.projectsample.excludedbyattribute\coverlet.tests.projectsample.excludedbyattribute.csproj", "{D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.integration.tests", "test\coverlet.integration.tests\coverlet.integration.tests.csproj", "{99B4059C-B25C-4B82-8117-A0E9DC9B0949}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.integration.template", "test\coverlet.integration.template\coverlet.integration.template.csproj", "{F6FE7678-C662-43D3-AC6A-64F6AC5A5935}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.tests.samples.netstandard", "test\coverlet.core.tests.samples.netstandard\coverlet.core.tests.samples.netstandard.csproj", "{5FF404AD-7C0B-465A-A1E9-558CDC642B0C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.xunit.extensions", "test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj", "{F8199E19-FA9A-4559-9101-CAD7028121B4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4-4A24-4217-AEFE-159B68F029A1}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - test\Directory.Build.targets = test\Directory.Build.targets - EndProjectSection -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "coverlet.tests.projectsample.vbmynamespace", "test\coverlet.tests.projectsample.vbmynamespace\coverlet.tests.projectsample.vbmynamespace.vbproj", "{C9B7DC34-3E04-4F20-AED4-73791AF8020D}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "coverlet.tests.projectsample.fsharp", "test\coverlet.tests.projectsample.fsharp\coverlet.tests.projectsample.fsharp.fsproj", "{1CBF6966-2A67-4D2C-8598-D174B83072F4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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 - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {31084026-D563-4B91-BE71-174C4270CCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31084026-D563-4B91-BE71-174C4270CCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31084026-D563-4B91-BE71-174C4270CCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31084026-D563-4B91-BE71-174C4270CCF4}.Release|Any CPU.Build.0 = Release|Any CPU - {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Release|Any CPU.Build.0 = Release|Any CPU - {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Release|Any CPU.Build.0 = Release|Any CPU - {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Release|Any CPU.Build.0 = Release|Any CPU - {AE117FAA-C21D-4F23-917E-0C8050614750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE117FAA-C21D-4F23-917E-0C8050614750}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE117FAA-C21D-4F23-917E-0C8050614750}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE117FAA-C21D-4F23-917E-0C8050614750}.Release|Any CPU.Build.0 = Release|Any CPU - {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Release|Any CPU.Build.0 = Release|Any CPU - {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Release|Any CPU.Build.0 = Release|Any CPU - {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Release|Any CPU.Build.0 = Release|Any CPU - {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Release|Any CPU.Build.0 = Release|Any CPU - {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Release|Any CPU.Build.0 = Release|Any CPU - {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Release|Any CPU.Build.0 = Release|Any CPU - {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Release|Any CPU.Build.0 = Release|Any CPU - {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Release|Any CPU.Build.0 = Release|Any CPU - {F8199E19-FA9A-4559-9101-CAD7028121B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {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 - {C9B7DC34-3E04-4F20-AED4-73791AF8020D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9B7DC34-3E04-4F20-AED4-73791AF8020D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9B7DC34-3E04-4F20-AED4-73791AF8020D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9B7DC34-3E04-4F20-AED4-73791AF8020D}.Release|Any CPU.Build.0 = Release|Any CPU - {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CBF6966-2A67-4D2C-8598-D174B83072F4}.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 - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {31084026-D563-4B91-BE71-174C4270CCF4} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} - {FA73E423-9790-4F35-B018-3C4E3CA338BA} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} - {E7637CC6-43F7-461A-A0BF-3C14562419BD} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} - {AE117FAA-C21D-4F23-917E-0C8050614750} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {F5B2C45B-274B-43D6-9565-8B50659CFE56} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} - {5ED4FA81-8F8C-4211-BA88-7573BD63262E} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {085A3AFB-C086-4E98-86F1-1B481446EC5E} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {99B4059C-B25C-4B82-8117-A0E9DC9B0949} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {F6FE7678-C662-43D3-AC6A-64F6AC5A5935} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {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} - {1CBF6966-2A67-4D2C-8598-D174B83072F4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {E69D68C9-78ED-4076-A14B-D07295A4B2A5} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - {C9B7DC34-3E04-4F20-AED4-73791AF8020D} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {9CA57C02-97B0-4C38-A027-EA61E8741F10} - EndGlobalSection -EndGlobal +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32208.508 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E877EBA4-E78B-4F7D-A2D3-1E070FED04CD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core", "src\coverlet.core\coverlet.core.csproj", "{31084026-D563-4B91-BE71-174C4270CCF4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.msbuild.tasks", "src\coverlet.msbuild.tasks\coverlet.msbuild.tasks.csproj", "{FA73E423-9790-4F35-B018-3C4E3CA338BA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.tests", "test\coverlet.core.tests\coverlet.core.tests.csproj", "{E7637CC6-43F7-461A-A0BF-3C14562419BD}" + ProjectSection(ProjectDependencies) = postProject + {F5B2C45B-274B-43D6-9565-8B50659CFE56} = {F5B2C45B-274B-43D6-9565-8B50659CFE56} + {FA73E423-9790-4F35-B018-3C4E3CA338BA} = {FA73E423-9790-4F35-B018-3C4E3CA338BA} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.console", "src\coverlet.console\coverlet.console.csproj", "{F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.testsubject", "test\coverlet.testsubject\coverlet.testsubject.csproj", "{AE117FAA-C21D-4F23-917E-0C8050614750}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.performancetest", "test\coverlet.core.performancetest\coverlet.core.performancetest.csproj", "{C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector", "src\coverlet.collector\coverlet.collector.csproj", "{F5B2C45B-274B-43D6-9565-8B50659CFE56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector.tests", "test\coverlet.collector.tests\coverlet.collector.tests.csproj", "{5ED4FA81-8F8C-4211-BA88-7573BD63262E}" + ProjectSection(ProjectDependencies) = postProject + {FA73E423-9790-4F35-B018-3C4E3CA338BA} = {FA73E423-9790-4F35-B018-3C4E3CA338BA} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.empty", "test\coverlet.tests.projectsample.empty\coverlet.tests.projectsample.empty.csproj", "{085A3AFB-C086-4E98-86F1-1B481446EC5E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{77A15177-8262-488F-AF2B-91B9055715DA}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitignore = .gitignore + eng\azure-pipelines-nightly.yml = eng\azure-pipelines-nightly.yml + eng\azure-pipelines.yml = eng\azure-pipelines.yml + eng\build.yml = eng\build.yml + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + Directory.Packages.props = Directory.Packages.props + global.json = global.json + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.excludedbyattribute", "test\coverlet.tests.projectsample.excludedbyattribute\coverlet.tests.projectsample.excludedbyattribute.csproj", "{D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.integration.tests", "test\coverlet.integration.tests\coverlet.integration.tests.csproj", "{99B4059C-B25C-4B82-8117-A0E9DC9B0949}" + ProjectSection(ProjectDependencies) = postProject + {F5B2C45B-274B-43D6-9565-8B50659CFE56} = {F5B2C45B-274B-43D6-9565-8B50659CFE56} + {FA73E423-9790-4F35-B018-3C4E3CA338BA} = {FA73E423-9790-4F35-B018-3C4E3CA338BA} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.integration.template", "test\coverlet.integration.template\coverlet.integration.template.csproj", "{F6FE7678-C662-43D3-AC6A-64F6AC5A5935}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.core.tests.samples.netstandard", "test\coverlet.core.tests.samples.netstandard\coverlet.core.tests.samples.netstandard.csproj", "{5FF404AD-7C0B-465A-A1E9-558CDC642B0C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.xunit.extensions", "test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj", "{F8199E19-FA9A-4559-9101-CAD7028121B4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4-4A24-4217-AEFE-159B68F029A1}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + test\Directory.Build.targets = test\Directory.Build.targets + EndProjectSection +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "coverlet.tests.projectsample.fsharp", "test\coverlet.tests.projectsample.fsharp\coverlet.tests.projectsample.fsharp.fsproj", "{1CBF6966-2A67-4D2C-8598-D174B83072F4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.netframework", "test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj", "{E69D68C9-78ED-4076-A14B-D07295A4B2A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.aspnet8", "test\coverlet.tests.projectsample.aspnet8\coverlet.tests.projectsample.aspnet8.csproj", "{1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.aspnet8.tests", "test\coverlet.tests.projectsample.aspnet8.tests\coverlet.tests.projectsample.aspnet8.tests.csproj", "{8EC065A4-7700-45E6-8B90-0182E3649DEA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.wpf8", "test\coverlet.tests.projectsample.wpf8\coverlet.tests.projectsample.wpf8.csproj", "{988A5FF0-4326-4F5B-9F05-CB165543A555}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.aspmvcrazor", "test\coverlet.tests.projectsample.aspmvcrazor\coverlet.tests.projectsample.aspmvcrazor.csproj", "{6ACF69B1-C01F-44A4-8F8E-2501884238D4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.aspmvcrazor.tests", "test\coverlet.tests.projectsample.aspmvcrazor.tests\coverlet.tests.projectsample.aspmvcrazor.tests.csproj", "{F508CCDD-5BC8-4AB6-97B3-D37498813C41}" + ProjectSection(ProjectDependencies) = postProject + {31084026-D563-4B91-BE71-174C4270CCF4} = {31084026-D563-4B91-BE71-174C4270CCF4} + {6ACF69B1-C01F-44A4-8F8E-2501884238D4} = {6ACF69B1-C01F-44A4-8F8E-2501884238D4} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.msbuild.tasks.tests", "test\coverlet.msbuild.tasks.tests\coverlet.msbuild.tasks.tests.csproj", "{351A034E-E642-4DB9-A21D-F71C8151C243}" +EndProject +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "coverlet.tests.projectsample.vbmynamespace", "test\coverlet.tests.projectsample.vbmynamespace\coverlet.tests.projectsample.vbmynamespace.vbproj", "{03400776-1F9A-4326-B927-1CA9B64B42A1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.utils", "test\coverlet.tests.utils\coverlet.tests.utils.csproj", "{0B109210-03CB-413F-888C-3023994AA384}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.tests.projectsample.wpf8.selfcontained", "test\coverlet.tests.projectsample.wpf8.selfcontained\coverlet.tests.projectsample.wpf8.selfcontained.csproj", "{71004336-9896-4AE5-8367-B29BB1680542}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {31084026-D563-4B91-BE71-174C4270CCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31084026-D563-4B91-BE71-174C4270CCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31084026-D563-4B91-BE71-174C4270CCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31084026-D563-4B91-BE71-174C4270CCF4}.Release|Any CPU.Build.0 = Release|Any CPU + {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA73E423-9790-4F35-B018-3C4E3CA338BA}.Release|Any CPU.Build.0 = Release|Any CPU + {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7637CC6-43F7-461A-A0BF-3C14562419BD}.Release|Any CPU.Build.0 = Release|Any CPU + {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E}.Release|Any CPU.Build.0 = Release|Any CPU + {AE117FAA-C21D-4F23-917E-0C8050614750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE117FAA-C21D-4F23-917E-0C8050614750}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE117FAA-C21D-4F23-917E-0C8050614750}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE117FAA-C21D-4F23-917E-0C8050614750}.Release|Any CPU.Build.0 = Release|Any CPU + {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9}.Release|Any CPU.Build.0 = Release|Any CPU + {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5B2C45B-274B-43D6-9565-8B50659CFE56}.Release|Any CPU.Build.0 = Release|Any CPU + {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5ED4FA81-8F8C-4211-BA88-7573BD63262E}.Release|Any CPU.Build.0 = Release|Any CPU + {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {085A3AFB-C086-4E98-86F1-1B481446EC5E}.Release|Any CPU.Build.0 = Release|Any CPU + {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6}.Release|Any CPU.Build.0 = Release|Any CPU + {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99B4059C-B25C-4B82-8117-A0E9DC9B0949}.Release|Any CPU.Build.0 = Release|Any CPU + {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6FE7678-C662-43D3-AC6A-64F6AC5A5935}.Release|Any CPU.Build.0 = Release|Any CPU + {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FF404AD-7C0B-465A-A1E9-558CDC642B0C}.Release|Any CPU.Build.0 = Release|Any CPU + {F8199E19-FA9A-4559-9101-CAD7028121B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 + {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CBF6966-2A67-4D2C-8598-D174B83072F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1CBF6966-2A67-4D2C-8598-D174B83072F4}.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 + {1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6}.Release|Any CPU.Build.0 = Release|Any CPU + {8EC065A4-7700-45E6-8B90-0182E3649DEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EC065A4-7700-45E6-8B90-0182E3649DEA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EC065A4-7700-45E6-8B90-0182E3649DEA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EC065A4-7700-45E6-8B90-0182E3649DEA}.Release|Any CPU.Build.0 = Release|Any CPU + {988A5FF0-4326-4F5B-9F05-CB165543A555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {988A5FF0-4326-4F5B-9F05-CB165543A555}.Debug|Any CPU.Build.0 = Debug|Any CPU + {988A5FF0-4326-4F5B-9F05-CB165543A555}.Release|Any CPU.ActiveCfg = Release|Any CPU + {988A5FF0-4326-4F5B-9F05-CB165543A555}.Release|Any CPU.Build.0 = Release|Any CPU + {6ACF69B1-C01F-44A4-8F8E-2501884238D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6ACF69B1-C01F-44A4-8F8E-2501884238D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6ACF69B1-C01F-44A4-8F8E-2501884238D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6ACF69B1-C01F-44A4-8F8E-2501884238D4}.Release|Any CPU.Build.0 = Release|Any CPU + {F508CCDD-5BC8-4AB6-97B3-D37498813C41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F508CCDD-5BC8-4AB6-97B3-D37498813C41}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F508CCDD-5BC8-4AB6-97B3-D37498813C41}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F508CCDD-5BC8-4AB6-97B3-D37498813C41}.Release|Any CPU.Build.0 = Release|Any CPU + {351A034E-E642-4DB9-A21D-F71C8151C243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {351A034E-E642-4DB9-A21D-F71C8151C243}.Debug|Any CPU.Build.0 = Debug|Any CPU + {351A034E-E642-4DB9-A21D-F71C8151C243}.Release|Any CPU.ActiveCfg = Release|Any CPU + {351A034E-E642-4DB9-A21D-F71C8151C243}.Release|Any CPU.Build.0 = Release|Any CPU + {03400776-1F9A-4326-B927-1CA9B64B42A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03400776-1F9A-4326-B927-1CA9B64B42A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03400776-1F9A-4326-B927-1CA9B64B42A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03400776-1F9A-4326-B927-1CA9B64B42A1}.Release|Any CPU.Build.0 = Release|Any CPU + {0B109210-03CB-413F-888C-3023994AA384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B109210-03CB-413F-888C-3023994AA384}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B109210-03CB-413F-888C-3023994AA384}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B109210-03CB-413F-888C-3023994AA384}.Release|Any CPU.Build.0 = Release|Any CPU + {71004336-9896-4AE5-8367-B29BB1680542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71004336-9896-4AE5-8367-B29BB1680542}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71004336-9896-4AE5-8367-B29BB1680542}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71004336-9896-4AE5-8367-B29BB1680542}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {31084026-D563-4B91-BE71-174C4270CCF4} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} + {FA73E423-9790-4F35-B018-3C4E3CA338BA} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} + {E7637CC6-43F7-461A-A0BF-3C14562419BD} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {F3DBE7C3-ABBB-4B8B-A6CB-A1D3D607163E} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} + {AE117FAA-C21D-4F23-917E-0C8050614750} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {C68CF6DE-F86C-4BCF-BAB9-7A60C320E1F9} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {F5B2C45B-274B-43D6-9565-8B50659CFE56} = {E877EBA4-E78B-4F7D-A2D3-1E070FED04CD} + {5ED4FA81-8F8C-4211-BA88-7573BD63262E} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {085A3AFB-C086-4E98-86F1-1B481446EC5E} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {D6B14F2F-9E7D-4D2C-BAC8-48834F853ED6} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {99B4059C-B25C-4B82-8117-A0E9DC9B0949} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {F6FE7678-C662-43D3-AC6A-64F6AC5A5935} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {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} + {1CBF6966-2A67-4D2C-8598-D174B83072F4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {E69D68C9-78ED-4076-A14B-D07295A4B2A5} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {1C3CA3F8-DF8C-433F-8A56-69102D2BBDF6} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {8EC065A4-7700-45E6-8B90-0182E3649DEA} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {988A5FF0-4326-4F5B-9F05-CB165543A555} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {6ACF69B1-C01F-44A4-8F8E-2501884238D4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {F508CCDD-5BC8-4AB6-97B3-D37498813C41} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {351A034E-E642-4DB9-A21D-F71C8151C243} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {03400776-1F9A-4326-B927-1CA9B64B42A1} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {0B109210-03CB-413F-888C-3023994AA384} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + {71004336-9896-4AE5-8367-B29BB1680542} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9CA57C02-97B0-4C38-A027-EA61E8741F10} + EndGlobalSection +EndGlobal diff --git a/eng/CheckNugetStatus.yml b/eng/CheckNugetStatus.yml new file mode 100644 index 000000000..8eaf4797b --- /dev/null +++ b/eng/CheckNugetStatus.yml @@ -0,0 +1,69 @@ +# File: CheckNugetStatus.yml +# the template will write lists of outdated, deprecated or vulnerable nuget packages to build log for every C# project. If a deprecated or vulnerable package is detected, an error will be written to the build log. +# Precondition: restore and build was executed before this template is used +# Limitation: dotnet SDK does not provide .NET framework MSBuild targets like "Microsoft.WebApplication.targets". This c# projects will be ignored and "An error occurred for " message is added in build log. + +parameters: + condition: 'succeeded()' + enableQualitySteps: true + sourcePath: '' + nugetConfig: '' + breakBuild: false + +steps: +- task: NuGetAuthenticate@1 + condition: ${{parameters.condition}} + enabled: ${{parameters.enableQualitySteps}} + +- task: PowerShell@2 + displayName: 'Check nuget package status' + inputs: + targetType: 'inline' + pwsh: true + script: | + Write-Information -MessageData "sourcePath='${{parameters.sourcePath}}'" -InformationAction Continue + Write-Information -MessageData "nugetConfig='${{parameters.nugetConfig}}'" -InformationAction Continue + Write-Information -MessageData "#########################################" -InformationAction Continue + if (!(Test-Path "${{parameters.sourcePath}}" -PathType Container)) { + Write-Host "##vso[task.LogIssue type=error;]sourcePath does not exist." + } + $existsDeprecatedPackage = $false + $existsVulnerablePackage = $false + + $projectFiles = Get-ChildItem -Path ${{parameters.sourcePath}} -Filter *.csproj -Recurse + foreach ($project in $projectFiles) { + try { + $outdatedList = dotnet list $project package --outdated --include-transitive --source https://api.nuget.org/v3/index.json + if ($LASTEXITCODE -gt 0) { + Throw "The command exited with error code: $lastexitcode" + } + $outdatedList + $deprecatedList = dotnet list $project package --deprecated --include-transitive --source https://api.nuget.org/v3/index.json + if ($deprecatedList.Length -gt 5) { + $deprecatedList + $existsDeprecatedPackage = $true + } else { + $deprecatedList[4] + } + $vulnerableList = dotnet list $project package --vulnerable --source https://api.nuget.org/v3/index.json + if ($vulnerableList.Length -gt 5) { + $vulnerableList + $existsVulnerablePackage = $true + } else { + $vulnerableList[4] + } + } catch { "An error occurred for $($project.PSChildName)" } + } + if ( $existsDeprecatedPackage -or $existsVulnerablePackage) { + Write-Host "##vso[task.LogIssue type=error;]Detected nuget package: Deprecated = $existsDeprecatedPackage, Vulnerable = $existsVulnerablePackage" + if ("${{parameters.breakBuild}}" -eq "true") { + exit 42 + } + } else { + Write-Information -MessageData "Did not detected deprecated or vulnerable nuget package." -InformationAction Continue + } + exit 0 + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + condition: ${{parameters.condition}} + enabled: ${{parameters.enableQualitySteps}} diff --git a/eng/azure-pipelines-nightly.yml b/eng/azure-pipelines-nightly.yml index 3535bd2bc..6cf27c1e0 100644 --- a/eng/azure-pipelines-nightly.yml +++ b/eng/azure-pipelines-nightly.yml @@ -1,18 +1,18 @@ pool: - vmImage: 'windows-2019' + vmImage: 'windows-latest' steps: - task: UseDotNet@2 inputs: - version: 3.1.404 - displayName: Install .NET Core SDK 3.1.404 + version: 6.0.428 + displayName: Install .NET Core SDK 6.0.428 - task: UseDotNet@2 inputs: - version: 5.0.401 - displayName: Install .NET Core SDK 5.0.401 + useGlobalJson: true + displayName: Install .NET Core SDK 8.0.111 -- task: NuGetAuthenticate@0 +- task: NuGetAuthenticate@1 displayName: Authenticate with NuGet feeds - script: dotnet pack -c Release /p:PublicRelease=false @@ -21,7 +21,7 @@ steps: - task: NuGetCommand@2 inputs: command: push - packagesToPush: $(Build.SourcesDirectory)/bin/Release/Packages/*.nupkg + packagesToPush: $(Build.SourcesDirectory)\artifacts\package\release\*.nupkg nuGetFeedType: internal publishVstsFeed: coverlet/coverlet-nightly displayName: Publish NuGet packages @@ -29,7 +29,7 @@ steps: - task: NuGetCommand@2 inputs: command: push - packagesToPush: $(Build.SourcesDirectory)/bin/Release/Packages/*.snupkg + packagesToPush: $(Build.SourcesDirectory)\artifacts\package\release\*.snupkg nuGetFeedType: internal publishVstsFeed: coverlet/coverlet-nightly displayName: Publish NuGet symbol packages diff --git a/eng/azure-pipelines.yml b/eng/azure-pipelines.yml index 67d6bc41e..f3f008cdb 100644 --- a/eng/azure-pipelines.yml +++ b/eng/azure-pipelines.yml @@ -2,12 +2,17 @@ trigger: branches: include: ["master", "*_validate"] paths: - exclude: [".github", "doc", "*.md"] + exclude: [".github", "Documentation", "*.md"] + +variables: + system.debug: false jobs: - job: Windows displayName: Windows continueOnError: 'true' + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 5 strategy: matrix: Debug: @@ -21,7 +26,7 @@ jobs: - task: CopyFiles@2 displayName: Collect packages inputs: - SourceFolder: bin\$(BuildConfiguration)\Packages + SourceFolder: artifacts\package\$(BuildConfiguration) Contents: | *.nupkg *.snupkg @@ -34,10 +39,24 @@ jobs: ArtifactName: Packages publishLocation: Container condition: eq(variables['BuildConfiguration'], 'Release') + - task: PublishBuildArtifacts@1 + displayName: Publish tests artifacts + inputs: + PathtoPublish: $(Build.SourcesDirectory)\artifacts\publish + ArtifactName: PublishedTests + publishLocation: Container + condition: eq(variables['BuildConfiguration'], 'Debug') + - template: CheckNugetStatus.yml + parameters: + sourcePath: '$(Build.SourcesDirectory)/src' + breakBuild: false + # nugetConfig: '$(Build.SourcesDirectory)/nuget.config' - job: macOS displayName: macOS continueOnError: 'true' + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 5 strategy: matrix: Debug: @@ -52,6 +71,8 @@ jobs: - job: Linux displayName: Linux continueOnError: 'true' + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 5 strategy: matrix: Debug: diff --git a/eng/build.yml b/eng/build.yml index e4db0b0a6..bd3c56e48 100644 --- a/eng/build.yml +++ b/eng/build.yml @@ -1,36 +1,52 @@ steps: - task: UseDotNet@2 inputs: - version: 3.1.404 - displayName: Install .NET Core SDK 3.1.404 + version: 6.0.428 + displayName: Install .NET Core SDK 6.0.428 - task: UseDotNet@2 inputs: - version: 5.0.401 - displayName: Install .NET Core SDK 5.0.401 + useGlobalJson: true + displayName: Install .NET Core SDK 8.0.111 -- task: UseDotNet@2 - inputs: - version: 6.0.408 - displayName: Install .NET Core SDK 6.0.408 - -- task: UseDotNet@2 - inputs: - version: 7.0.203 - displayName: Install .NET Core SDK 7.0.203 +# create artifact/package folder +- pwsh: | + New-Item -ItemType Directory -Path artifacts/package/debug -Force + New-Item -ItemType Directory -Path artifacts/package/release -Force + displayName: create folder artifacts/package/$(BuildConfiguration) - script: dotnet restore displayName: Restore packages -- script: dotnet build -c $(BuildConfiguration) --no-restore +- script: dotnet build -c $(BuildConfiguration) --no-restore -bl:build.msbuild.binlog displayName: Build - script: dotnet pack -c $(BuildConfiguration) --no-restore displayName: Pack -- task: DotNetCoreCLI@2 - displayName: Run tests +- script: | + dotnet test test/coverlet.collector.tests/coverlet.collector.tests.csproj -c $(BuildConfiguration) --no-build -bl:test.collector.binlog --results-directory:"$(Build.SourcesDirectory)\artifacts\Reports" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*%2c[coverlet.tests.xunit.extensions]*%2c[coverlet.tests.projectsample]*%2c[testgen_]*" /p:ExcludeByAttribute="GeneratedCodeAttribute" --diag:"$(Build.SourcesDirectory)\artifacts\log\$(buildConfiguration)\coverlet.collector.test.diag.log;tracelevel=verbose" + dotnet test test/coverlet.core.tests/coverlet.core.tests.csproj -c $(BuildConfiguration) --no-build -bl:test.core.binlog --results-directory:"$(Build.SourcesDirectory)\artifacts\Reports" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*%2c[coverlet.tests.xunit.extensions]*%2c[coverlet.tests.projectsample]*%2c[testgen_]*" /p:ExcludeByAttribute="GeneratedCodeAttribute" --diag:"$(Build.SourcesDirectory)\artifacts\log\$(buildConfiguration)\coverlet.core.test.diag.log;tracelevel=verbose" + dotnet test test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.csproj -c $(BuildConfiguration) --no-build -bl:test.msbuild.binlog --results-directory:"$(Build.SourcesDirectory)\artifacts\Reports" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Exclude="[coverlet.core.tests.samples.netstandard]*%2c[coverlet.tests.xunit.extensions]*%2c[coverlet.tests.projectsample]*%2c[testgen_]*" /p:ExcludeByAttribute="GeneratedCodeAttribute" --diag:"$(Build.SourcesDirectory)\artifacts\log\$(buildConfiguration)\coverlet.msbuild.test.diag.log;tracelevel=verbose" + dotnet test test/coverlet.integration.tests/coverlet.integration.tests.csproj -c $(BuildConfiguration) --no-build -bl:test.integration.binlog --results-directory:"$(Build.SourcesDirectory)\artifacts\Reports" --diag:"$(Build.SourcesDirectory)\artifacts\log\$(buildConfiguration)\coverlet.integration.test.diag.log;tracelevel=verbose" + displayName: Run unit tests with coverage + env: + MSBUILDDISABLENODEREUSE: 1 + +- task: PublishTestResults@2 inputs: - command: test - arguments: -c $(BuildConfiguration) --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include="[coverlet.collector]*%2c[coverlet.core]*%2c[coverlet.msbuild.tasks]*" /p:Exclude="[coverlet.core.tests.samples.netstandard]*%2c[coverlet.tests.xunit.extensions]*" - testRunTitle: $(Agent.JobName) + testResultsFormat: 'VSTest' + testResultsFiles: '**/*.trx' + mergeTestResults: false + publishRunAttachments: true + failTaskOnFailedTests: true + condition: succeededOrFailed() + +- template: publish-coverlet-result-files.yml + +- template: publish-coverage-results.yml + parameters: + reports: $(Build.SourcesDirectory)\**\*.opencover.xml + condition: and(succeeded(), eq(variables['BuildConfiguration'], 'Debug'), eq(variables['agent.os'], 'Windows_NT')) + assemblyfilters: '-xunit;-coverlet.testsubject;-Coverlet.Tests.ProjectSample.*;-coverlet.core.tests.samples.netstandard;-coverlet.tests.xunit.extensions;-coverletsamplelib.integration.template;-coverlet.tests.utils' + diff --git a/eng/publish-coverage-results.yml b/eng/publish-coverage-results.yml new file mode 100644 index 000000000..796d8f577 --- /dev/null +++ b/eng/publish-coverage-results.yml @@ -0,0 +1,35 @@ +# File: publish-coverage-results.yml +# uses reportgenerator task to create a code coverage report and aggregates available cobertura XML files. The results are publishes as a build artifact. + +parameters: + condition: 'succeeded()' + reports: '' + assemblyfilters: '-xunit*' + classfilters: '' + breakBuild: false + minimumLineCoverage: 75 + +steps: +- task: Powershell@2 + displayName: ReportGenerator + condition: ${{parameters.condition}} + inputs: + targetType: inline + pwsh: true + script: | + dotnet tool restore --add-source https://api.nuget.org/v3/index.json + dotnet tool list + dotnet reportgenerator -reports:"${{parameters.reports}}" -targetdir:"$(Build.SourcesDirectory)\artifacts\CoverageReport" -reporttypes:"HtmlInline_AzurePipelines_Dark;Cobertura" -assemblyfilters:"${{parameters.assemblyfilters}}" -classfilters:"${{parameters.classfilters}}" -verbosity:Verbose --minimumCoverageThresholds:lineCoverage=${{parameters.minimumLineCoverage}} + +- publish: '$(Build.SourcesDirectory)/artifacts/CoverageReport' + displayName: 'Publish CoverageReport Artifact' + artifact: CoverageResults_$(Agent.Os)_$(BuildConfiguration) + condition: ${{parameters.condition}} + +- task: PublishCodeCoverageResults@2 + displayName: 'Publish code coverage' + condition: ${{parameters.condition}} + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(Build.SourcesDirectory)/artifacts/CoverageReport/Cobertura.xml' + failIfCoverageEmpty: ${{parameters.breakBuild}} diff --git a/eng/publish-coverlet-result-files.yml b/eng/publish-coverlet-result-files.yml new file mode 100644 index 000000000..c8addb84c --- /dev/null +++ b/eng/publish-coverlet-result-files.yml @@ -0,0 +1,46 @@ +steps: +- task: CopyFiles@2 + displayName: Copy test results + continueOnError: true + condition: always() + inputs: + SourceFolder: '$(Build.SourcesDirectory)/artifacts' + Contents: | + **/*.trx + **/*.html + **/*.opencover.xml + **/*.cobertura.xml + **/*.coverage.json + **/*.diag.log + **/log.txt + **/log.datacollector.*.txt + **/log.host.*.txt + TargetFolder: '$(Build.SourcesDirectory)/artifacts/TestLogs' + +- task: CopyFiles@2 + displayName: Copy trx files + condition: always() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: | + **/*.trx + **/coverage.opencover.xml + **/coverage.cobertura.xml + **/coverage.json + TargetFolder: '$(Build.SourcesDirectory)/artifacts/TestLogs' + +- task: CopyFiles@2 + displayName: Copy binlog files + condition: always() + inputs: + SourceFolder: '$(Build.SourcesDirectory)' + Contents: '**/*.binlog' + TargetFolder: '$(Build.SourcesDirectory)/artifacts/TestLogs' + +- task: PublishPipelineArtifact@1 + displayName: Publish Coverlet logs + continueOnError: true + condition: always() + inputs: + path: artifacts/TestLogs + artifactName: TestLogs_$(Agent.Os)_$(BuildConfiguration) diff --git a/global.json b/global.json index 2dbcd442b..19f8c0399 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,5 @@ { - "sdk": { - "version": "6.0.408", - "rollForward": "latestMajor" - } + "sdk": { + "version": "8.0.111" + } } diff --git a/src/coverlet.collector/DataCollection/AttachmentManager.cs b/src/coverlet.collector/DataCollection/AttachmentManager.cs index 8259f71f3..a062a40bc 100644 --- a/src/coverlet.collector/DataCollection/AttachmentManager.cs +++ b/src/coverlet.collector/DataCollection/AttachmentManager.cs @@ -4,173 +4,170 @@ using System; using System.ComponentModel; using System.IO; -using coverlet.collector.Resources; using Coverlet.Collector.Utilities; using Coverlet.Collector.Utilities.Interfaces; using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; namespace Coverlet.Collector.DataCollection { - /// - /// Manages coverage report attachments - /// - internal class AttachmentManager : IDisposable - { - private readonly DataCollectionSink _dataSink; - private readonly TestPlatformEqtTrace _eqtTrace; - private readonly TestPlatformLogger _logger; - private readonly DataCollectionContext _dataCollectionContext; - private readonly IFileHelper _fileHelper; - private readonly IDirectoryHelper _directoryHelper; - private readonly ICountDownEvent _countDownEvent; - private readonly string _reportDirectory; + /// + /// Manages coverage report attachments + /// + internal class AttachmentManager : IDisposable + { + private readonly DataCollectionSink _dataSink; + private readonly TestPlatformEqtTrace _eqtTrace; + private readonly TestPlatformLogger _logger; + private readonly DataCollectionContext _dataCollectionContext; + private readonly IFileHelper _fileHelper; + private readonly IDirectoryHelper _directoryHelper; + private readonly ICountDownEvent _countDownEvent; + private readonly string _reportDirectory; - public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, ICountDownEvent countDownEvent) - : this(dataSink, - dataCollectionContext, - logger, - eqtTrace, - Guid.NewGuid().ToString(), - new FileHelper(), - new DirectoryHelper(), - countDownEvent) - { - } + public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, ICountDownEvent countDownEvent) + : this(dataSink, + dataCollectionContext, + logger, + eqtTrace, + Guid.NewGuid().ToString(), + new FileHelper(), + new DirectoryHelper(), + countDownEvent) + { + } - public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, string reportDirectoryName, IFileHelper fileHelper, IDirectoryHelper directoryHelper, ICountDownEvent countDownEvent) - { - // Store input variabless - _dataSink = dataSink; - _dataCollectionContext = dataCollectionContext; - _logger = logger; - _eqtTrace = eqtTrace; - _fileHelper = fileHelper; - _directoryHelper = directoryHelper; - _countDownEvent = countDownEvent; + public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, string reportDirectoryName, IFileHelper fileHelper, IDirectoryHelper directoryHelper, ICountDownEvent countDownEvent) + { + // Store input variables + _dataSink = dataSink; + _dataCollectionContext = dataCollectionContext; + _logger = logger; + _eqtTrace = eqtTrace; + _fileHelper = fileHelper; + _directoryHelper = directoryHelper; + _countDownEvent = countDownEvent; - // Report directory to store the coverage reports. - _reportDirectory = Path.Combine(Path.GetTempPath(), reportDirectoryName); + // Report directory to store the coverage reports. + _reportDirectory = Path.Combine(Path.GetTempPath(), reportDirectoryName); - // Register events - _dataSink.SendFileCompleted += OnSendFileCompleted; - } + // Register events + _dataSink.SendFileCompleted += OnSendFileCompleted; + } - /// - /// Sends coverage report to test platform - /// - /// Coverage report - /// Coverage report file name - public void SendCoverageReport(string coverageReport, string coverageReportFileName) - { - // Save coverage report to file - string coverageReportPath = SaveCoverageReport(coverageReport, coverageReportFileName); + /// + /// Sends coverage report to test platform + /// + /// Coverage report + /// Coverage report file name + public void SendCoverageReport(string coverageReport, string coverageReportFileName) + { + // Save coverage report to file + string coverageReportPath = SaveCoverageReport(coverageReport, coverageReportFileName); - // Send coverage attachment to test platform. - SendAttachment(coverageReportPath); - } + // Send coverage attachment to test platform. + SendAttachment(coverageReportPath); + } - /// - /// Disposes attachment manager - /// - public void Dispose() + /// + /// Disposes attachment manager + /// + public void Dispose() + { + // Unregister events + try + { + _countDownEvent.Wait(); + if (_dataSink != null) { - // Unregister events - try - { - _countDownEvent.Wait(); - if (_dataSink != null) - { - _dataSink.SendFileCompleted -= OnSendFileCompleted; - } - CleanupReportDirectory(); - } - catch (Exception ex) - { - _logger.LogWarning(ex.ToString()); - } + _dataSink.SendFileCompleted -= OnSendFileCompleted; } + CleanupReportDirectory(); + } + catch (Exception ex) + { + _logger.LogWarning(ex.ToString()); + } + } - /// - /// Saves coverage report to file system - /// - /// Coverage report - /// Coverage report file name - /// Coverage report file path - private string SaveCoverageReport(string report, string reportFileName) - { - try - { - _directoryHelper.CreateDirectory(_reportDirectory); - string filePath = Path.Combine(_reportDirectory, reportFileName); - _fileHelper.WriteAllText(filePath, report); - _eqtTrace.Info("{0}: Saved coverage report to path: '{1}'", CoverletConstants.DataCollectorName, filePath); + /// + /// Saves coverage report to file system + /// + /// Coverage report + /// Coverage report file name + /// Coverage report file path + private string SaveCoverageReport(string report, string reportFileName) + { + try + { + _directoryHelper.CreateDirectory(_reportDirectory); + string filePath = Path.Combine(_reportDirectory, reportFileName); + _fileHelper.WriteAllText(filePath, report); + _eqtTrace.Info("{0}: Saved coverage report to path: '{1}'", CoverletConstants.DataCollectorName, filePath); - return filePath; - } - catch (Exception ex) - { - string errorMessage = string.Format(Resources.FailedToSaveCoverageReport, CoverletConstants.DataCollectorName, reportFileName, _reportDirectory); - throw new CoverletDataCollectorException(errorMessage, ex); - } - } + return filePath; + } + catch (Exception ex) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: Failed to save coverage report '{reportFileName}' in directory '{_reportDirectory}'", ex); + } + } - /// - /// SendFileCompleted event handler - /// - /// Sender - /// Event args - public void OnSendFileCompleted(object sender, AsyncCompletedEventArgs e) - { - try - { - _eqtTrace.Verbose("{0}: SendFileCompleted received", CoverletConstants.DataCollectorName); - } - catch (Exception ex) - { - _logger.LogWarning(ex.ToString()); - } - finally - { - _countDownEvent.Signal(); - } - } + /// + /// SendFileCompleted event handler + /// + /// Sender + /// Event args + public void OnSendFileCompleted(object sender, AsyncCompletedEventArgs e) + { + try + { + _eqtTrace.Verbose("{0}: SendFileCompleted received", CoverletConstants.DataCollectorName); + } + catch (Exception ex) + { + _logger.LogWarning(ex.ToString()); + } + finally + { + _countDownEvent.Signal(); + } + } - /// - /// Sends attachment file to test platform - /// - /// Attachment file path - private void SendAttachment(string attachmentPath) - { - if (_fileHelper.Exists(attachmentPath)) - { - // Send coverage attachment to test platform. - _eqtTrace.Verbose("{0}: Sending attachment to test platform", CoverletConstants.DataCollectorName); - _dataSink.SendFileAsync(_dataCollectionContext, attachmentPath, false); - } - else - { - _eqtTrace.Warning("{0}: Attachment file does not exist", CoverletConstants.DataCollectorName); - } - } + /// + /// Sends attachment file to test platform + /// + /// Attachment file path + private void SendAttachment(string attachmentPath) + { + if (_fileHelper.Exists(attachmentPath)) + { + // Send coverage attachment to test platform. + _eqtTrace.Verbose("{0}: Sending attachment to test platform", CoverletConstants.DataCollectorName); + _dataSink.SendFileAsync(_dataCollectionContext, attachmentPath, false); + } + else + { + _eqtTrace.Warning("{0}: Attachment file does not exist", CoverletConstants.DataCollectorName); + } + } - /// - /// Cleans up coverage report directory - /// - private void CleanupReportDirectory() + /// + /// Cleans up coverage report directory + /// + private void CleanupReportDirectory() + { + try + { + if (_directoryHelper.Exists(_reportDirectory)) { - try - { - if (_directoryHelper.Exists(_reportDirectory)) - { - _directoryHelper.Delete(_reportDirectory, true); - _eqtTrace.Verbose("{0}: Deleted report directory: '{1}'", CoverletConstants.DataCollectorName, _reportDirectory); - } - } - catch (Exception ex) - { - string errorMessage = string.Format(Resources.FailedToCleanupReportDirectory, CoverletConstants.DataCollectorName, _reportDirectory); - throw new CoverletDataCollectorException(errorMessage, ex); - } + _directoryHelper.Delete(_reportDirectory, true); + _eqtTrace.Verbose("{0}: Deleted report directory: '{1}'", CoverletConstants.DataCollectorName, _reportDirectory); } + } + catch (Exception ex) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: Failed to cleanup report directory: '{_reportDirectory}'", ex); + } } + } } diff --git a/src/coverlet.collector/DataCollection/CoverageManager.cs b/src/coverlet.collector/DataCollection/CoverageManager.cs index 89ec41eb1..f0453501c 100644 --- a/src/coverlet.collector/DataCollection/CoverageManager.cs +++ b/src/coverlet.collector/DataCollection/CoverageManager.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using coverlet.collector.Resources; using Coverlet.Collector.Utilities; using Coverlet.Collector.Utilities.Interfaces; using Coverlet.Core; @@ -14,109 +13,106 @@ namespace Coverlet.Collector.DataCollection { - /// - /// Manages coverlet coverage - /// - internal class CoverageManager - { - private readonly Coverage _coverage; - private readonly ICoverageWrapper _coverageWrapper; - private readonly ISourceRootTranslator _sourceRootTranslator; - public IReporter[] Reporters { get; } + /// + /// Manages coverlet coverage + /// + internal class CoverageManager + { + private readonly Coverage _coverage; + private readonly ICoverageWrapper _coverageWrapper; + private readonly ISourceRootTranslator _sourceRootTranslator; + public IReporter[] Reporters { get; } - public CoverageManager(CoverletSettings settings, TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, ICoverageWrapper coverageWrapper, - IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) - : this(settings, - settings.ReportFormats.Select(format => - { - var reporterFactory = new ReporterFactory(format); - if (!reporterFactory.IsValidFormat()) - { - eqtTrace.Warning($"Invalid report format '{format}'"); - return null; - } - else - { - return reporterFactory.CreateReporter(); - } - }).Where(r => r != null).ToArray(), - new CoverletLogger(eqtTrace, logger), - coverageWrapper, instrumentationHelper, fileSystem, sourceRootTranslator, cecilSymbolHelper) + public CoverageManager(CoverletSettings settings, TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, ICoverageWrapper coverageWrapper, + IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) + : this(settings, + settings.ReportFormats.Select(format => { - } + var reporterFactory = new ReporterFactory(format); + if (!reporterFactory.IsValidFormat()) + { + eqtTrace.Warning($"Invalid report format '{format}'"); + return null; + } + else + { + return reporterFactory.CreateReporter(); + } + }).Where(r => r != null).ToArray(), + new CoverletLogger(eqtTrace, logger), + coverageWrapper, instrumentationHelper, fileSystem, sourceRootTranslator, cecilSymbolHelper) + { + } - public CoverageManager(CoverletSettings settings, IReporter[] reporters, ILogger logger, ICoverageWrapper coverageWrapper, - IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) - { - // Store input vars - Reporters = reporters; - _coverageWrapper = coverageWrapper; - _sourceRootTranslator = sourceRootTranslator; - // Coverage object - _coverage = _coverageWrapper.CreateCoverage(settings, logger, instrumentationHelper, fileSystem, sourceRootTranslator, cecilSymbolHelper); - } + public CoverageManager(CoverletSettings settings, IReporter[] reporters, ILogger logger, ICoverageWrapper coverageWrapper, + IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) + { + // Store input vars + Reporters = reporters; + _coverageWrapper = coverageWrapper; + _sourceRootTranslator = sourceRootTranslator; + // Coverage object + _coverage = _coverageWrapper.CreateCoverage(settings, logger, instrumentationHelper, fileSystem, sourceRootTranslator, cecilSymbolHelper); + } - /// - /// Instrument modules - /// - public void InstrumentModules() - { - try - { - // Instrument modules - _coverageWrapper.PrepareModules(_coverage); - } - catch (Exception ex) - { - string errorMessage = string.Format(Resources.InstrumentationException, CoverletConstants.DataCollectorName); - throw new CoverletDataCollectorException(errorMessage, ex); - } - } + /// + /// Instrument modules + /// + public void InstrumentModules() + { + try + { + // Instrument modules + _coverageWrapper.PrepareModules(_coverage); + } + catch (Exception ex) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: Failed to instrument modules", ex); + } + } - /// - /// Gets coverlet coverage reports - /// - /// Coverage reports - public IEnumerable<(string report, string fileName)> GetCoverageReports() - { - // Get coverage result - CoverageResult coverageResult = GetCoverageResult(); - return GetCoverageReports(coverageResult); - } + /// + /// Gets coverlet coverage reports + /// + /// Coverage reports + public IEnumerable<(string report, string fileName)> GetCoverageReports() + { + // Get coverage result + CoverageResult coverageResult = GetCoverageResult(); + return GetCoverageReports(coverageResult); + } - /// - /// Gets coverlet coverage result - /// - /// Coverage result - private CoverageResult GetCoverageResult() - { - try - { - return _coverageWrapper.GetCoverageResult(_coverage); - } - catch (Exception ex) - { - string errorMessage = string.Format(Resources.CoverageResultException, CoverletConstants.DataCollectorName); - throw new CoverletDataCollectorException(errorMessage, ex); - } - } + /// + /// Gets coverlet coverage result + /// + /// Coverage result + private CoverageResult GetCoverageResult() + { + try + { + return _coverageWrapper.GetCoverageResult(_coverage); + } + catch (Exception ex) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: Failed to get coverage result", ex); + } + } - /// - /// Gets coverage reports from coverage result - /// - /// Coverage result - /// Coverage reports - private IEnumerable<(string report, string fileName)> GetCoverageReports(CoverageResult coverageResult) - { - try - { - return Reporters.Select(reporter => (reporter.Report(coverageResult, _sourceRootTranslator), Path.ChangeExtension(CoverletConstants.DefaultFileName, reporter.Extension))); - } - catch (Exception ex) - { - string errorMessage = string.Format(Resources.CoverageReportException, CoverletConstants.DataCollectorName); - throw new CoverletDataCollectorException(errorMessage, ex); - } - } + /// + /// Gets coverage reports from coverage result + /// + /// Coverage result + /// Coverage reports + private IEnumerable<(string report, string fileName)> GetCoverageReports(CoverageResult coverageResult) + { + try + { + return Reporters.Select(reporter => (reporter.Report(coverageResult, _sourceRootTranslator), Path.ChangeExtension(CoverletConstants.DefaultFileName, reporter.Extension))); + } + catch (Exception ex) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: Failed to get coverage report", ex); + } } + } } diff --git a/src/coverlet.collector/DataCollection/CoverageWrapper.cs b/src/coverlet.collector/DataCollection/CoverageWrapper.cs index 0569ab277..4e3f5a729 100644 --- a/src/coverlet.collector/DataCollection/CoverageWrapper.cs +++ b/src/coverlet.collector/DataCollection/CoverageWrapper.cs @@ -7,64 +7,68 @@ namespace Coverlet.Collector.DataCollection { + /// + /// Implementation for wrapping over Coverage class in coverlet.core + /// + internal class CoverageWrapper : ICoverageWrapper + { /// - /// Implementation for wrapping over Coverage class in coverlet.core + /// Creates a coverage object from given coverlet settings /// - internal class CoverageWrapper : ICoverageWrapper + /// Coverlet settings + /// Coverlet logger + /// + /// + /// + /// + /// Coverage object + public Coverage CreateCoverage(CoverletSettings settings, ILogger coverletLogger, IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) { - /// - /// Creates a coverage object from given coverlet settings - /// - /// Coverlet settings - /// Coverlet logger - /// Coverage object - public Coverage CreateCoverage(CoverletSettings settings, ILogger coverletLogger, IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper) - { - CoverageParameters parameters = new() - { - IncludeFilters = settings.IncludeFilters, - IncludeDirectories = settings.IncludeDirectories, - ExcludeFilters = settings.ExcludeFilters, - ExcludedSourceFiles = settings.ExcludeSourceFiles, - ExcludeAttributes = settings.ExcludeAttributes, - IncludeTestAssembly = settings.IncludeTestAssembly, - SingleHit = settings.SingleHit, - MergeWith = settings.MergeWith, - UseSourceLink = settings.UseSourceLink, - SkipAutoProps = settings.SkipAutoProps, - DoesNotReturnAttributes = settings.DoesNotReturnAttributes, - DeterministicReport = settings.DeterministicReport, - ExcludeAssembliesWithoutSources = settings.ExcludeAssembliesWithoutSources - }; + CoverageParameters parameters = new() + { + IncludeFilters = settings.IncludeFilters, + IncludeDirectories = settings.IncludeDirectories, + ExcludeFilters = settings.ExcludeFilters, + ExcludedSourceFiles = settings.ExcludeSourceFiles, + ExcludeAttributes = settings.ExcludeAttributes, + IncludeTestAssembly = settings.IncludeTestAssembly, + SingleHit = settings.SingleHit, + MergeWith = settings.MergeWith, + UseSourceLink = settings.UseSourceLink, + SkipAutoProps = settings.SkipAutoProps, + DoesNotReturnAttributes = settings.DoesNotReturnAttributes, + DeterministicReport = settings.DeterministicReport, + ExcludeAssembliesWithoutSources = settings.ExcludeAssembliesWithoutSources + }; - return new Coverage( - settings.TestModule, - parameters, - coverletLogger, - instrumentationHelper, - fileSystem, - sourceRootTranslator, - cecilSymbolHelper); - } + return new Coverage( + settings.TestModule, + parameters, + coverletLogger, + instrumentationHelper, + fileSystem, + sourceRootTranslator, + cecilSymbolHelper); + } - /// - /// Gets the coverage result from provided coverage object - /// - /// Coverage - /// The coverage result - public CoverageResult GetCoverageResult(Coverage coverage) - { - return coverage.GetCoverageResult(); - } + /// + /// Gets the coverage result from provided coverage object + /// + /// Coverage + /// The coverage result + public CoverageResult GetCoverageResult(Coverage coverage) + { + return coverage.GetCoverageResult(); + } - /// - /// Prepares modules for getting coverage. - /// Wrapper over coverage.PrepareModules - /// - /// - public void PrepareModules(Coverage coverage) - { - coverage.PrepareModules(); - } + /// + /// Prepares modules for getting coverage. + /// Wrapper over coverage.PrepareModules + /// + /// + public void PrepareModules(Coverage coverage) + { + coverage.PrepareModules(); } + } } diff --git a/src/coverlet.collector/DataCollection/CoverletCoverageCollector.cs b/src/coverlet.collector/DataCollection/CoverletCoverageCollector.cs index d40a02e86..c95ba217b 100644 --- a/src/coverlet.collector/DataCollection/CoverletCoverageCollector.cs +++ b/src/coverlet.collector/DataCollection/CoverletCoverageCollector.cs @@ -16,223 +16,223 @@ namespace Coverlet.Collector.DataCollection { + /// + /// Coverlet coverage out-proc data collector. + /// + [DataCollectorTypeUri(CoverletConstants.DefaultUri)] + [DataCollectorFriendlyName(CoverletConstants.FriendlyName)] + public class CoverletCoverageCollector : DataCollector + { + private readonly TestPlatformEqtTrace _eqtTrace; + private readonly ICoverageWrapper _coverageWrapper; + private readonly ICountDownEventFactory _countDownEventFactory; + private readonly Func _serviceCollectionFactory; + + private DataCollectionEvents _events; + private TestPlatformLogger _logger; + private XmlElement _configurationElement; + private DataCollectionSink _dataSink; + private DataCollectionContext _dataCollectionContext; + private CoverageManager _coverageManager; + private IServiceProvider _serviceProvider; + + public CoverletCoverageCollector() : this(new TestPlatformEqtTrace(), new CoverageWrapper(), new CollectorCountdownEventFactory(), GetDefaultServiceCollection) + { + } + + internal CoverletCoverageCollector(TestPlatformEqtTrace eqtTrace, ICoverageWrapper coverageWrapper, ICountDownEventFactory countDownEventFactory, Func serviceCollectionFactory) : base() + { + _eqtTrace = eqtTrace; + _coverageWrapper = coverageWrapper; + _countDownEventFactory = countDownEventFactory; + _serviceCollectionFactory = serviceCollectionFactory; + } + + private void AttachDebugger() + { + if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_OUTOFPROC_DEBUG"), out int result) && result == 1) + { + Debugger.Launch(); + Debugger.Break(); + } + } + /// - /// Coverlet coverage out-proc data collector. + /// Initializes data collector /// - [DataCollectorTypeUri(CoverletConstants.DefaultUri)] - [DataCollectorFriendlyName(CoverletConstants.FriendlyName)] - public class CoverletCoverageCollector : DataCollector + /// Configuration element + /// Events to register on + /// Data sink to send attachments to test platform + /// Test platform logger + /// Environment context + public override void Initialize( + XmlElement configurationElement, + DataCollectionEvents events, + DataCollectionSink dataSink, + DataCollectionLogger logger, + DataCollectionEnvironmentContext environmentContext) { - private readonly TestPlatformEqtTrace _eqtTrace; - private readonly ICoverageWrapper _coverageWrapper; - private readonly ICountDownEventFactory _countDownEventFactory; - private readonly Func _serviceCollectionFactory; - - private DataCollectionEvents _events; - private TestPlatformLogger _logger; - private XmlElement _configurationElement; - private DataCollectionSink _dataSink; - private DataCollectionContext _dataCollectionContext; - private CoverageManager _coverageManager; - private IServiceProvider _serviceProvider; - - public CoverletCoverageCollector() : this(new TestPlatformEqtTrace(), new CoverageWrapper(), new CollectorCountdownEventFactory(), GetDefaultServiceCollection) - { - } - internal CoverletCoverageCollector(TestPlatformEqtTrace eqtTrace, ICoverageWrapper coverageWrapper, ICountDownEventFactory countDownEventFactory, Func serviceCollectionFactory) : base() - { - _eqtTrace = eqtTrace; - _coverageWrapper = coverageWrapper; - _countDownEventFactory = countDownEventFactory; - _serviceCollectionFactory = serviceCollectionFactory; - } + AttachDebugger(); - private void AttachDebugger() - { - if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_OUTOFPROC_DEBUG"), out int result) && result == 1) - { - Debugger.Launch(); - Debugger.Break(); - } - } + if (_eqtTrace.IsInfoEnabled) + { + _eqtTrace.Info("Initializing {0} with configuration: '{1}'", CoverletConstants.DataCollectorName, configurationElement?.OuterXml); + } - /// - /// Initializes data collector - /// - /// Configuration element - /// Events to register on - /// Data sink to send attachments to test platform - /// Test platform logger - /// Environment context - public override void Initialize( - XmlElement configurationElement, - DataCollectionEvents events, - DataCollectionSink dataSink, - DataCollectionLogger logger, - DataCollectionEnvironmentContext environmentContext) - { + // Store input variables + _events = events; + _configurationElement = configurationElement; + _dataSink = dataSink; + _dataCollectionContext = environmentContext.SessionDataCollectionContext; + _logger = new TestPlatformLogger(logger, _dataCollectionContext); - AttachDebugger(); + // Register events + _events.SessionStart += OnSessionStart; + _events.SessionEnd += OnSessionEnd; + } - if (_eqtTrace.IsInfoEnabled) - { - _eqtTrace.Info("Initializing {0} with configuration: '{1}'", CoverletConstants.DataCollectorName, configurationElement?.OuterXml); - } + /// + /// Disposes the data collector + /// + /// Disposing flag + protected override void Dispose(bool disposing) + { + _eqtTrace.Verbose("{0}: Disposing", CoverletConstants.DataCollectorName); - // Store input variables - _events = events; - _configurationElement = configurationElement; - _dataSink = dataSink; - _dataCollectionContext = environmentContext.SessionDataCollectionContext; - _logger = new TestPlatformLogger(logger, _dataCollectionContext); + // Unregister events + if (_events != null) + { + _events.SessionStart -= OnSessionStart; + _events.SessionEnd -= OnSessionEnd; + } - // Register events - _events.SessionStart += OnSessionStart; - _events.SessionEnd += OnSessionEnd; - } + // Remove vars + _events = null; + _dataSink = null; + _coverageManager = null; - /// - /// Disposes the data collector - /// - /// Disposing flag - protected override void Dispose(bool disposing) - { - _eqtTrace.Verbose("{0}: Disposing", CoverletConstants.DataCollectorName); + base.Dispose(disposing); + } - // Unregister events - if (_events != null) - { - _events.SessionStart -= OnSessionStart; - _events.SessionEnd -= OnSessionEnd; - } + /// + /// SessionStart event handler + /// + /// Sender + /// Event args + private void OnSessionStart(object sender, SessionStartEventArgs sessionStartEventArgs) + { + _eqtTrace.Verbose("{0}: SessionStart received", CoverletConstants.DataCollectorName); + + try + { + // Get coverlet settings + IEnumerable testModules = GetTestModules(sessionStartEventArgs); + var coverletSettingsParser = new CoverletSettingsParser(_eqtTrace); + CoverletSettings coverletSettings = coverletSettingsParser.Parse(_configurationElement, testModules); + + // Build services container + _serviceProvider = _serviceCollectionFactory(_eqtTrace, _logger, coverletSettings.TestModule).BuildServiceProvider(); + + // Get coverage and attachment managers + _coverageManager = new CoverageManager(coverletSettings, _eqtTrace, _logger, _coverageWrapper, + _serviceProvider.GetRequiredService(), _serviceProvider.GetRequiredService(), + _serviceProvider.GetRequiredService(), _serviceProvider.GetRequiredService()); + + // Instrument modules + _coverageManager.InstrumentModules(); + } + catch (Exception ex) + { + _logger.LogWarning(ex.ToString()); + Dispose(true); + } + } - // Remove vars - _events = null; - _dataSink = null; - _coverageManager = null; + /// + /// SessionEnd event handler + /// + /// Sender + /// Event args + private void OnSessionEnd(object sender, SessionEndEventArgs e) + { + try + { + _eqtTrace.Verbose("{0}: SessionEnd received", CoverletConstants.DataCollectorName); - base.Dispose(disposing); - } + // Get coverage reports + IEnumerable<(string report, string fileName)> coverageReports = _coverageManager?.GetCoverageReports(); - /// - /// SessionStart event handler - /// - /// Sender - /// Event args - private void OnSessionStart(object sender, SessionStartEventArgs sessionStartEventArgs) + if (coverageReports != null && coverageReports.Any()) { - _eqtTrace.Verbose("{0}: SessionStart received", CoverletConstants.DataCollectorName); - - try - { - // Get coverlet settings - IEnumerable testModules = GetTestModules(sessionStartEventArgs); - var coverletSettingsParser = new CoverletSettingsParser(_eqtTrace); - CoverletSettings coverletSettings = coverletSettingsParser.Parse(_configurationElement, testModules); - - // Build services container - _serviceProvider = _serviceCollectionFactory(_eqtTrace, _logger, coverletSettings.TestModule).BuildServiceProvider(); - - // Get coverage and attachment managers - _coverageManager = new CoverageManager(coverletSettings, _eqtTrace, _logger, _coverageWrapper, - _serviceProvider.GetRequiredService(), _serviceProvider.GetRequiredService(), - _serviceProvider.GetRequiredService(), _serviceProvider.GetRequiredService()); - - // Instrument modules - _coverageManager.InstrumentModules(); - } - catch (Exception ex) - { - _logger.LogWarning(ex.ToString()); - Dispose(true); - } + // Send result attachments to test platform. + using var attachmentManager = new AttachmentManager(_dataSink, _dataCollectionContext, _logger, _eqtTrace, _countDownEventFactory.Create(coverageReports.Count(), TimeSpan.FromSeconds(30))); + foreach ((string report, string fileName) in coverageReports) + { + attachmentManager.SendCoverageReport(report, fileName); + } } - - /// - /// SessionEnd event handler - /// - /// Sender - /// Event args - private void OnSessionEnd(object sender, SessionEndEventArgs e) + else { - try - { - _eqtTrace.Verbose("{0}: SessionEnd received", CoverletConstants.DataCollectorName); - - // Get coverage reports - IEnumerable<(string report, string fileName)> coverageReports = _coverageManager?.GetCoverageReports(); - - if (coverageReports != null && coverageReports.Any()) - { - // Send result attachments to test platform. - using var attachmentManager = new AttachmentManager(_dataSink, _dataCollectionContext, _logger, _eqtTrace, _countDownEventFactory.Create(coverageReports.Count(), TimeSpan.FromSeconds(30))); - foreach ((string report, string fileName) in coverageReports) - { - attachmentManager.SendCoverageReport(report, fileName); - } - } - else - { - _eqtTrace.Verbose("{0}: No coverage reports specified", CoverletConstants.DataCollectorName); - } - } - catch (Exception ex) - { - _logger.LogWarning(ex.ToString()); - Dispose(true); - } + _eqtTrace.Verbose("{0}: No coverage reports specified", CoverletConstants.DataCollectorName); } + } + catch (Exception ex) + { + _logger.LogWarning(ex.ToString()); + Dispose(true); + } + } - /// - /// Gets test modules - /// - /// Event args - /// Test modules list - private IEnumerable GetTestModules(SessionStartEventArgs sessionStartEventArgs) + /// + /// Gets test modules + /// + /// Event args + /// Test modules list + private IEnumerable GetTestModules(SessionStartEventArgs sessionStartEventArgs) + { + try + { + IEnumerable testModules = GetPropertyValueWrapper(sessionStartEventArgs); + if (_eqtTrace.IsInfoEnabled) { - try - { - IEnumerable testModules = GetPropertyValueWrapper(sessionStartEventArgs); - if (_eqtTrace.IsInfoEnabled) - { - _eqtTrace.Info("{0}: TestModules: '{1}'", - CoverletConstants.DataCollectorName, - string.Join(",", testModules ?? Enumerable.Empty())); - } - return testModules; - } - catch (MissingMethodException ex) - { - throw new MissingMethodException("Make sure to use .NET core SDK Version >= 2.2.300", ex); - } + _eqtTrace.Info("{0}: TestModules: '{1}'", + CoverletConstants.DataCollectorName, + string.Join(",", testModules ?? Enumerable.Empty())); } + return testModules; + } + catch (MissingMethodException ex) + { + throw new MissingMethodException("Make sure to use .NET core SDK Version >= 2.2.300", ex); + } + } - /// - /// Wraps GetPropertyValue to catch possible MissingMethodException on unsupported runtime - /// - /// - /// - private static IEnumerable GetPropertyValueWrapper(SessionStartEventArgs sessionStartEventArgs) - { - return sessionStartEventArgs.GetPropertyValue>(CoverletConstants.TestSourcesPropertyName); - } + /// + /// Wraps GetPropertyValue to catch possible MissingMethodException on unsupported runtime + /// + /// + /// + private static IEnumerable GetPropertyValueWrapper(SessionStartEventArgs sessionStartEventArgs) + { + return sessionStartEventArgs.GetPropertyValue>(CoverletConstants.TestSourcesPropertyName); + } - private static IServiceCollection GetDefaultServiceCollection(TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) - { - IServiceCollection serviceCollection = new ServiceCollection(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - // We need to keep singleton/static semantics - serviceCollection.AddSingleton(); - // We cache resolutions - serviceCollection.AddSingleton(serviceProvider => - new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); - serviceCollection.AddSingleton(); - return serviceCollection; - } + private static IServiceCollection GetDefaultServiceCollection(TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) + { + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + // We need to keep singleton/static semantics + serviceCollection.AddSingleton(); + // We cache resolutions + serviceCollection.AddSingleton(serviceProvider => + new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); + serviceCollection.AddSingleton(); + return serviceCollection; } + } } diff --git a/src/coverlet.collector/DataCollection/CoverletLogger.cs b/src/coverlet.collector/DataCollection/CoverletLogger.cs index 42eb6a1b2..543f5417d 100644 --- a/src/coverlet.collector/DataCollection/CoverletLogger.cs +++ b/src/coverlet.collector/DataCollection/CoverletLogger.cs @@ -7,64 +7,64 @@ namespace Coverlet.Collector.DataCollection { + /// + /// Coverlet logger + /// + internal class CoverletLogger : ILogger + { + private readonly TestPlatformEqtTrace _eqtTrace; + private readonly TestPlatformLogger _logger; + + public CoverletLogger(TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger) + { + _eqtTrace = eqtTrace; + _logger = logger; + } + /// - /// Coverlet logger + /// Logs error /// - internal class CoverletLogger : ILogger + /// Error message + public void LogError(string message) { - private readonly TestPlatformEqtTrace _eqtTrace; - private readonly TestPlatformLogger _logger; - - public CoverletLogger(TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger) - { - _eqtTrace = eqtTrace; - _logger = logger; - } - - /// - /// Logs error - /// - /// Error message - public void LogError(string message) - { - _logger.LogWarning(message); - } + _logger.LogWarning(message); + } - /// - /// Logs error - /// - /// Exception to log - public void LogError(Exception exception) - { - _logger.LogWarning(exception.ToString()); - } + /// + /// Logs error + /// + /// Exception to log + public void LogError(Exception exception) + { + _logger.LogWarning(exception.ToString()); + } - /// - /// Logs information - /// - /// Information message - /// importance - public void LogInformation(string message, bool important = false) - { - _eqtTrace.Info(message); - } + /// + /// Logs information + /// + /// Information message + /// importance + public void LogInformation(string message, bool important = false) + { + _eqtTrace.Info(message); + } - /// - /// Logs verbose - /// - /// Verbose message - public void LogVerbose(string message) - { - _eqtTrace.Verbose(message); - } + /// + /// Logs verbose + /// + /// Verbose message + public void LogVerbose(string message) + { + _eqtTrace.Verbose(message); + } - /// - /// Logs warning - /// - /// Warning message - public void LogWarning(string message) - { - _eqtTrace.Warning(message); - } + /// + /// Logs warning + /// + /// Warning message + public void LogWarning(string message) + { + _eqtTrace.Warning(message); } + } } diff --git a/src/coverlet.collector/DataCollection/CoverletSettings.cs b/src/coverlet.collector/DataCollection/CoverletSettings.cs index 2ebde799f..0c80687f9 100644 --- a/src/coverlet.collector/DataCollection/CoverletSettings.cs +++ b/src/coverlet.collector/DataCollection/CoverletSettings.cs @@ -6,106 +6,106 @@ namespace Coverlet.Collector.DataCollection { + /// + /// Coverlet settings + /// + internal class CoverletSettings + { /// - /// Coverlet settings + /// Test module /// - internal class CoverletSettings + public string TestModule { get; set; } + + /// + /// Report formats + /// + public string[] ReportFormats { get; set; } + + /// + /// Filters to include + /// + public string[] IncludeFilters { get; set; } + + /// + /// Directories to include + /// + public string[] IncludeDirectories { get; set; } + + /// + /// Filters to exclude + /// + public string[] ExcludeFilters { get; set; } + + /// + /// Source files to exclude + /// + public string[] ExcludeSourceFiles { get; set; } + + /// + /// Attributes to exclude + /// + public string[] ExcludeAttributes { get; set; } + + /// + /// Coverate report path to merge with + /// + public string MergeWith { get; set; } + + /// + /// Use source link flag + /// + public bool UseSourceLink { get; set; } + + /// + /// Single hit flag + /// + public bool SingleHit { get; set; } + + /// + /// Includes test assembly + /// + public bool IncludeTestAssembly { get; set; } + + /// + /// Neither track nor record auto-implemented properties. + /// + public bool SkipAutoProps { get; set; } + + /// + /// Attributes that mark methods that never return. + /// + public string[] DoesNotReturnAttributes { get; set; } + + /// + /// DeterministicReport flag + /// + public bool DeterministicReport { get; set; } + + /// + /// Switch for heuristic to automatically exclude assemblies without source. + /// + public string ExcludeAssembliesWithoutSources { get; set; } + + public override string ToString() { - /// - /// Test module - /// - public string TestModule { get; set; } - - /// - /// Report formats - /// - public string[] ReportFormats { get; set; } - - /// - /// Filters to include - /// - public string[] IncludeFilters { get; set; } - - /// - /// Directories to include - /// - public string[] IncludeDirectories { get; set; } - - /// - /// Filters to exclude - /// - public string[] ExcludeFilters { get; set; } - - /// - /// Source files to exclude - /// - public string[] ExcludeSourceFiles { get; set; } - - /// - /// Attributes to exclude - /// - public string[] ExcludeAttributes { get; set; } - - /// - /// Coverate report path to merge with - /// - public string MergeWith { get; set; } - - /// - /// Use source link flag - /// - public bool UseSourceLink { get; set; } - - /// - /// Single hit flag - /// - public bool SingleHit { get; set; } - - /// - /// Includes test assembly - /// - public bool IncludeTestAssembly { get; set; } - - /// - /// Neither track nor record auto-implemented properties. - /// - public bool SkipAutoProps { get; set; } - - /// - /// Attributes that mark methods that never return. - /// - public string[] DoesNotReturnAttributes { get; set; } - - /// - /// DeterministicReport flag - /// - public bool DeterministicReport { get; set; } - - /// - /// Switch for heuristic to automatically exclude assemblies without source. - /// - public string ExcludeAssembliesWithoutSources { get; set; } - - public override string ToString() - { - var builder = new StringBuilder(); - - builder.AppendFormat("TestModule: '{0}', ", TestModule); - builder.AppendFormat("IncludeFilters: '{0}', ", string.Join(",", IncludeFilters ?? Enumerable.Empty())); - builder.AppendFormat("IncludeDirectories: '{0}', ", string.Join(",", IncludeDirectories ?? Enumerable.Empty())); - builder.AppendFormat("ExcludeFilters: '{0}', ", string.Join(",", ExcludeFilters ?? Enumerable.Empty())); - builder.AppendFormat("ExcludeSourceFiles: '{0}', ", string.Join(",", ExcludeSourceFiles ?? Enumerable.Empty())); - builder.AppendFormat("ExcludeAttributes: '{0}', ", string.Join(",", ExcludeAttributes ?? Enumerable.Empty())); - builder.AppendFormat("MergeWith: '{0}', ", MergeWith); - builder.AppendFormat("UseSourceLink: '{0}'", UseSourceLink); - builder.AppendFormat("SingleHit: '{0}'", SingleHit); - builder.AppendFormat("IncludeTestAssembly: '{0}'", IncludeTestAssembly); - builder.AppendFormat("SkipAutoProps: '{0}'", SkipAutoProps); - builder.AppendFormat("DoesNotReturnAttributes: '{0}'", string.Join(",", DoesNotReturnAttributes ?? Enumerable.Empty())); - builder.AppendFormat("DeterministicReport: '{0}'", DeterministicReport); - builder.AppendFormat("ExcludeAssembliesWithoutSources: '{0}'", ExcludeAssembliesWithoutSources); - - return builder.ToString(); - } + var builder = new StringBuilder(); + + builder.AppendFormat("TestModule: '{0}', ", TestModule); + builder.AppendFormat("IncludeFilters: '{0}', ", string.Join(",", IncludeFilters ?? Enumerable.Empty())); + builder.AppendFormat("IncludeDirectories: '{0}', ", string.Join(",", IncludeDirectories ?? Enumerable.Empty())); + builder.AppendFormat("ExcludeFilters: '{0}', ", string.Join(",", ExcludeFilters ?? Enumerable.Empty())); + builder.AppendFormat("ExcludeSourceFiles: '{0}', ", string.Join(",", ExcludeSourceFiles ?? Enumerable.Empty())); + builder.AppendFormat("ExcludeAttributes: '{0}', ", string.Join(",", ExcludeAttributes ?? Enumerable.Empty())); + builder.AppendFormat("MergeWith: '{0}', ", MergeWith); + builder.AppendFormat("UseSourceLink: '{0}'", UseSourceLink); + builder.AppendFormat("SingleHit: '{0}'", SingleHit); + builder.AppendFormat("IncludeTestAssembly: '{0}'", IncludeTestAssembly); + builder.AppendFormat("SkipAutoProps: '{0}'", SkipAutoProps); + builder.AppendFormat("DoesNotReturnAttributes: '{0}'", string.Join(",", DoesNotReturnAttributes ?? Enumerable.Empty())); + builder.AppendFormat("DeterministicReport: '{0}'", DeterministicReport); + builder.AppendFormat("ExcludeAssembliesWithoutSources: '{0}'", ExcludeAssembliesWithoutSources); + + return builder.ToString(); } + } } diff --git a/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs b/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs index 3776c98d4..733dacfcc 100644 --- a/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs +++ b/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs @@ -5,267 +5,265 @@ using System.Collections.Generic; using System.Linq; using System.Xml; -using coverlet.collector.Resources; using Coverlet.Collector.Utilities; namespace Coverlet.Collector.DataCollection { + /// + /// Coverlet settings parser + /// + internal class CoverletSettingsParser + { + private readonly TestPlatformEqtTrace _eqtTrace; + + public CoverletSettingsParser(TestPlatformEqtTrace eqtTrace) + { + _eqtTrace = eqtTrace; + } + /// - /// Coverlet settings parser + /// Parser coverlet settings /// - internal class CoverletSettingsParser + /// Configuration element + /// Test modules + /// Coverlet settings + public CoverletSettings Parse(XmlElement configurationElement, IEnumerable testModules) { - private readonly TestPlatformEqtTrace _eqtTrace; + var coverletSettings = new CoverletSettings + { + TestModule = ParseTestModule(testModules) + }; - public CoverletSettingsParser(TestPlatformEqtTrace eqtTrace) - { - _eqtTrace = eqtTrace; - } + if (configurationElement != null) + { + coverletSettings.IncludeFilters = ParseIncludeFilters(configurationElement); + coverletSettings.IncludeDirectories = ParseIncludeDirectories(configurationElement); + coverletSettings.ExcludeAttributes = ParseExcludeAttributes(configurationElement); + coverletSettings.ExcludeSourceFiles = ParseExcludeSourceFiles(configurationElement); + coverletSettings.MergeWith = ParseMergeWith(configurationElement); + coverletSettings.UseSourceLink = ParseUseSourceLink(configurationElement); + coverletSettings.SingleHit = ParseSingleHit(configurationElement); + coverletSettings.IncludeTestAssembly = ParseIncludeTestAssembly(configurationElement); + coverletSettings.SkipAutoProps = ParseSkipAutoProps(configurationElement); + coverletSettings.DoesNotReturnAttributes = ParseDoesNotReturnAttributes(configurationElement); + coverletSettings.DeterministicReport = ParseDeterministicReport(configurationElement); + coverletSettings.ExcludeAssembliesWithoutSources = ParseExcludeAssembliesWithoutSources(configurationElement); + } - /// - /// Parser coverlet settings - /// - /// Configuration element - /// Test modules - /// Coverlet settings - public CoverletSettings Parse(XmlElement configurationElement, IEnumerable testModules) - { - var coverletSettings = new CoverletSettings - { - TestModule = ParseTestModule(testModules) - }; + coverletSettings.ReportFormats = ParseReportFormats(configurationElement); + coverletSettings.ExcludeFilters = ParseExcludeFilters(configurationElement); - if (configurationElement != null) - { - coverletSettings.IncludeFilters = ParseIncludeFilters(configurationElement); - coverletSettings.IncludeDirectories = ParseIncludeDirectories(configurationElement); - coverletSettings.ExcludeAttributes = ParseExcludeAttributes(configurationElement); - coverletSettings.ExcludeSourceFiles = ParseExcludeSourceFiles(configurationElement); - coverletSettings.MergeWith = ParseMergeWith(configurationElement); - coverletSettings.UseSourceLink = ParseUseSourceLink(configurationElement); - coverletSettings.SingleHit = ParseSingleHit(configurationElement); - coverletSettings.IncludeTestAssembly = ParseIncludeTestAssembly(configurationElement); - coverletSettings.SkipAutoProps = ParseSkipAutoProps(configurationElement); - coverletSettings.DoesNotReturnAttributes = ParseDoesNotReturnAttributes(configurationElement); - coverletSettings.DeterministicReport = ParseDeterministicReport(configurationElement); - coverletSettings.ExcludeAssembliesWithoutSources = ParseExcludeAssembliesWithoutSources(configurationElement); - } + if (_eqtTrace.IsVerboseEnabled) + { + _eqtTrace.Verbose("{0}: Initializing coverlet process with settings: \"{1}\"", CoverletConstants.DataCollectorName, coverletSettings.ToString()); + } - coverletSettings.ReportFormats = ParseReportFormats(configurationElement); - coverletSettings.ExcludeFilters = ParseExcludeFilters(configurationElement); + return coverletSettings; + } - if (_eqtTrace.IsVerboseEnabled) - { - _eqtTrace.Verbose("{0}: Initializing coverlet process with settings: \"{1}\"", CoverletConstants.DataCollectorName, coverletSettings.ToString()); - } + /// + /// Parses test module + /// + /// Test modules + /// Test module + private static string ParseTestModule(IEnumerable testModules) + { + // Validate if at least one source present. + if (testModules == null || !testModules.Any()) + { + throw new CoverletDataCollectorException($"{CoverletConstants.DataCollectorName}: No test modules found"); + } - return coverletSettings; - } + // Note: + // 1) .NET core test run supports one testModule per run. Coverlet also supports one testModule per run. So, we are using first testSource only and ignoring others. + // 2) If and when .NET full is supported with coverlet OR .NET core starts supporting multiple testModules, revisit this code to use other testModules as well. + return testModules.FirstOrDefault(); + } - /// - /// Parses test module - /// - /// Test modules - /// Test module - private static string ParseTestModule(IEnumerable testModules) - { - // Validate if at least one source present. - if (testModules == null || !testModules.Any()) - { - string errorMessage = string.Format(Resources.NoTestModulesFound, CoverletConstants.DataCollectorName); - throw new CoverletDataCollectorException(errorMessage); - } + /// + /// Parse report formats + /// + /// Configuration element + /// Report formats + private static string[] ParseReportFormats(XmlElement configurationElement) + { + string[] formats = Array.Empty(); + if (configurationElement != null) + { + XmlElement reportFormatElement = configurationElement[CoverletConstants.ReportFormatElementName]; + formats = SplitElement(reportFormatElement); + } - // Note: - // 1) .NET core test run supports one testModule per run. Coverlet also supports one testModule per run. So, we are using first testSource only and ignoring others. - // 2) If and when .NET full is supported with coverlet OR .NET core starts supporting multiple testModules, revisit this code to use other testModules as well. - return testModules.FirstOrDefault(); - } + return formats is null || formats.Length == 0 ? new[] { CoverletConstants.DefaultReportFormat } : formats; + } - /// - /// Parse report formats - /// - /// Configuration element - /// Report formats - private static string[] ParseReportFormats(XmlElement configurationElement) - { - string[] formats = Array.Empty(); - if (configurationElement != null) - { - XmlElement reportFormatElement = configurationElement[CoverletConstants.ReportFormatElementName]; - formats = SplitElement(reportFormatElement); - } + /// + /// Parse filters to include + /// + /// Configuration element + /// Filters to include + private static string[] ParseIncludeFilters(XmlElement configurationElement) + { + XmlElement includeFiltersElement = configurationElement[CoverletConstants.IncludeFiltersElementName]; + return SplitElement(includeFiltersElement); + } - return formats is null || formats.Length == 0 ? new[] { CoverletConstants.DefaultReportFormat } : formats; - } + /// + /// Parse directories to include + /// + /// Configuration element + /// Directories to include + private static string[] ParseIncludeDirectories(XmlElement configurationElement) + { + XmlElement includeDirectoriesElement = configurationElement[CoverletConstants.IncludeDirectoriesElementName]; + return SplitElement(includeDirectoriesElement); + } - /// - /// Parse filters to include - /// - /// Configuration element - /// Filters to include - private static string[] ParseIncludeFilters(XmlElement configurationElement) - { - XmlElement includeFiltersElement = configurationElement[CoverletConstants.IncludeFiltersElementName]; - return SplitElement(includeFiltersElement); - } + /// + /// Parse filters to exclude + /// + /// Configuration element + /// Filters to exclude + private static string[] ParseExcludeFilters(XmlElement configurationElement) + { + var excludeFilters = new List { CoverletConstants.DefaultExcludeFilter }; - /// - /// Parse directories to include - /// - /// Configuration element - /// Directories to include - private static string[] ParseIncludeDirectories(XmlElement configurationElement) + if (configurationElement != null) + { + XmlElement excludeFiltersElement = configurationElement[CoverletConstants.ExcludeFiltersElementName]; + string[] filters = SplitElement(excludeFiltersElement); + if (filters != null) { - XmlElement includeDirectoriesElement = configurationElement[CoverletConstants.IncludeDirectoriesElementName]; - return SplitElement(includeDirectoriesElement); + excludeFilters.AddRange(filters); } + } - /// - /// Parse filters to exclude - /// - /// Configuration element - /// Filters to exclude - private static string[] ParseExcludeFilters(XmlElement configurationElement) - { - var excludeFilters = new List { CoverletConstants.DefaultExcludeFilter }; - - if (configurationElement != null) - { - XmlElement excludeFiltersElement = configurationElement[CoverletConstants.ExcludeFiltersElementName]; - string[] filters = SplitElement(excludeFiltersElement); - if (filters != null) - { - excludeFilters.AddRange(filters); - } - } - - return excludeFilters.ToArray(); - } + return excludeFilters.ToArray(); + } - /// - /// Parse source files to exclude - /// - /// Configuration element - /// Source files to exclude - private static string[] ParseExcludeSourceFiles(XmlElement configurationElement) - { - XmlElement excludeSourceFilesElement = configurationElement[CoverletConstants.ExcludeSourceFilesElementName]; - return SplitElement(excludeSourceFilesElement); - } + /// + /// Parse source files to exclude + /// + /// Configuration element + /// Source files to exclude + private static string[] ParseExcludeSourceFiles(XmlElement configurationElement) + { + XmlElement excludeSourceFilesElement = configurationElement[CoverletConstants.ExcludeSourceFilesElementName]; + return SplitElement(excludeSourceFilesElement); + } - /// - /// Parse attributes to exclude - /// - /// Configuration element - /// Attributes to exclude - private static string[] ParseExcludeAttributes(XmlElement configurationElement) - { - XmlElement excludeAttributesElement = configurationElement[CoverletConstants.ExcludeAttributesElementName]; - return SplitElement(excludeAttributesElement); - } + /// + /// Parse attributes to exclude + /// + /// Configuration element + /// Attributes to exclude + private static string[] ParseExcludeAttributes(XmlElement configurationElement) + { + XmlElement excludeAttributesElement = configurationElement[CoverletConstants.ExcludeAttributesElementName]; + return SplitElement(excludeAttributesElement); + } - /// - /// Parse merge with attribute - /// - /// Configuration element - /// Merge with attribute - private static string ParseMergeWith(XmlElement configurationElement) - { - XmlElement mergeWithElement = configurationElement[CoverletConstants.MergeWithElementName]; - return mergeWithElement?.InnerText; - } + /// + /// Parse merge with attribute + /// + /// Configuration element + /// Merge with attribute + private static string ParseMergeWith(XmlElement configurationElement) + { + XmlElement mergeWithElement = configurationElement[CoverletConstants.MergeWithElementName]; + return mergeWithElement?.InnerText; + } - /// - /// Parse use source link flag - /// - /// Configuration element - /// Use source link flag - private static bool ParseUseSourceLink(XmlElement configurationElement) - { - XmlElement useSourceLinkElement = configurationElement[CoverletConstants.UseSourceLinkElementName]; - bool.TryParse(useSourceLinkElement?.InnerText, out bool useSourceLink); - return useSourceLink; - } + /// + /// Parse use source link flag + /// + /// Configuration element + /// Use source link flag + private static bool ParseUseSourceLink(XmlElement configurationElement) + { + XmlElement useSourceLinkElement = configurationElement[CoverletConstants.UseSourceLinkElementName]; + bool.TryParse(useSourceLinkElement?.InnerText, out bool useSourceLink); + return useSourceLink; + } - /// - /// Parse single hit flag - /// - /// Configuration element - /// Single hit flag - private static bool ParseSingleHit(XmlElement configurationElement) - { - XmlElement singleHitElement = configurationElement[CoverletConstants.SingleHitElementName]; - bool.TryParse(singleHitElement?.InnerText, out bool singleHit); - return singleHit; - } + /// + /// Parse single hit flag + /// + /// Configuration element + /// Single hit flag + private static bool ParseSingleHit(XmlElement configurationElement) + { + XmlElement singleHitElement = configurationElement[CoverletConstants.SingleHitElementName]; + bool.TryParse(singleHitElement?.InnerText, out bool singleHit); + return singleHit; + } - /// - /// Parse ParseDeterministicReport flag - /// - /// Configuration element - /// ParseDeterministicReport flag - private static bool ParseDeterministicReport(XmlElement configurationElement) - { - XmlElement deterministicReportElement = configurationElement[CoverletConstants.DeterministicReport]; - bool.TryParse(deterministicReportElement?.InnerText, out bool deterministicReport); - return deterministicReport; - } + /// + /// Parse ParseDeterministicReport flag + /// + /// Configuration element + /// ParseDeterministicReport flag + private static bool ParseDeterministicReport(XmlElement configurationElement) + { + XmlElement deterministicReportElement = configurationElement[CoverletConstants.DeterministicReport]; + bool.TryParse(deterministicReportElement?.InnerText, out bool deterministicReport); + return deterministicReport; + } - /// - /// Parse ExcludeAssembliesWithoutSources flag - /// - /// Configuration element - /// ExcludeAssembliesWithoutSources flag - private static string ParseExcludeAssembliesWithoutSources(XmlElement configurationElement) - { - XmlElement instrumentModulesWithoutLocalSourcesElement = configurationElement[CoverletConstants.ExcludeAssembliesWithoutSources]; - return instrumentModulesWithoutLocalSourcesElement?.InnerText; - } + /// + /// Parse ExcludeAssembliesWithoutSources flag + /// + /// Configuration element + /// ExcludeAssembliesWithoutSources flag + private static string ParseExcludeAssembliesWithoutSources(XmlElement configurationElement) + { + XmlElement instrumentModulesWithoutLocalSourcesElement = configurationElement[CoverletConstants.ExcludeAssembliesWithoutSources]; + return instrumentModulesWithoutLocalSourcesElement?.InnerText; + } - /// - /// Parse include test assembly flag - /// - /// Configuration element - /// Include Test Assembly Flag - private static bool ParseIncludeTestAssembly(XmlElement configurationElement) - { - XmlElement includeTestAssemblyElement = configurationElement[CoverletConstants.IncludeTestAssemblyElementName]; - bool.TryParse(includeTestAssemblyElement?.InnerText, out bool includeTestAssembly); - return includeTestAssembly; - } + /// + /// Parse include test assembly flag + /// + /// Configuration element + /// Include Test Assembly Flag + private static bool ParseIncludeTestAssembly(XmlElement configurationElement) + { + XmlElement includeTestAssemblyElement = configurationElement[CoverletConstants.IncludeTestAssemblyElementName]; + bool.TryParse(includeTestAssemblyElement?.InnerText, out bool includeTestAssembly); + return includeTestAssembly; + } - /// - /// Parse skipautoprops flag - /// - /// Configuration element - /// Include Test Assembly Flag - private static bool ParseSkipAutoProps(XmlElement configurationElement) - { - XmlElement skipAutoPropsElement = configurationElement[CoverletConstants.SkipAutoProps]; - bool.TryParse(skipAutoPropsElement?.InnerText, out bool skipAutoProps); - return skipAutoProps; - } + /// + /// Parse skipautoprops flag + /// + /// Configuration element + /// Include Test Assembly Flag + private static bool ParseSkipAutoProps(XmlElement configurationElement) + { + XmlElement skipAutoPropsElement = configurationElement[CoverletConstants.SkipAutoProps]; + bool.TryParse(skipAutoPropsElement?.InnerText, out bool skipAutoProps); + return skipAutoProps; + } - /// - /// Parse attributes that mark methods that do not return. - /// - /// Configuration element - /// DoesNotReturn attributes - private static string[] ParseDoesNotReturnAttributes(XmlElement configurationElement) - { - XmlElement doesNotReturnAttributesElement = configurationElement[CoverletConstants.DoesNotReturnAttributesElementName]; - return SplitElement(doesNotReturnAttributesElement); - } + /// + /// Parse attributes that mark methods that do not return. + /// + /// Configuration element + /// DoesNotReturn attributes + private static string[] ParseDoesNotReturnAttributes(XmlElement configurationElement) + { + XmlElement doesNotReturnAttributesElement = configurationElement[CoverletConstants.DoesNotReturnAttributesElementName]; + return SplitElement(doesNotReturnAttributesElement); + } - /// - /// Splits a comma separated elements into an array - /// - /// The element to split - /// An array of the values in the element - private static string[] SplitElement(XmlElement element) - { - return element?.InnerText?.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Where(value => !string.IsNullOrWhiteSpace(value)).Select(value => value.Trim()).ToArray(); - } + /// + /// Splits a comma separated elements into an array + /// + /// The element to split + /// An array of the values in the element + private static string[] SplitElement(XmlElement element) + { + return element?.InnerText?.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Where(value => !string.IsNullOrWhiteSpace(value)).Select(value => value.Trim()).ToArray(); } + } } diff --git a/src/coverlet.collector/InProcDataCollection/CoverletInProcDataCollector.cs b/src/coverlet.collector/InProcDataCollection/CoverletInProcDataCollector.cs index f682b2687..b1e6c5be2 100644 --- a/src/coverlet.collector/InProcDataCollection/CoverletInProcDataCollector.cs +++ b/src/coverlet.collector/InProcDataCollection/CoverletInProcDataCollector.cs @@ -5,7 +5,6 @@ using System.Diagnostics; using System.Reflection; using System.Text; -using coverlet.collector.Resources; using Coverlet.Collector.Utilities; using Coverlet.Core.Instrumentation; using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; @@ -14,117 +13,116 @@ namespace Coverlet.Collector.DataCollection { - public class CoverletInProcDataCollector : InProcDataCollection + public class CoverletInProcDataCollector : InProcDataCollection + { + private TestPlatformEqtTrace _eqtTrace; + private bool _enableExceptionLog; + + private void AttachDebugger() { - private TestPlatformEqtTrace _eqtTrace; - private bool _enableExceptionLog; + if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_INPROC_DEBUG"), out int result) && result == 1) + { + Debugger.Launch(); + Debugger.Break(); + } + } - private void AttachDebugger() - { - if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_INPROC_DEBUG"), out int result) && result == 1) - { - Debugger.Launch(); - Debugger.Break(); - } - } + private void EnableExceptionLog() + { + if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_INPROC_EXCEPTIONLOG_ENABLED"), out int result) && result == 1) + { + _enableExceptionLog = true; + } + } - private void EnableExceptionLog() - { - if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_DATACOLLECTOR_INPROC_EXCEPTIONLOG_ENABLED"), out int result) && result == 1) - { - _enableExceptionLog = true; - } - } + public void Initialize(IDataCollectionSink dataCollectionSink) + { + AttachDebugger(); + EnableExceptionLog(); - public void Initialize(IDataCollectionSink dataCollectionSink) - { - AttachDebugger(); - EnableExceptionLog(); + _eqtTrace = new TestPlatformEqtTrace(); + _eqtTrace.Verbose("Initialize CoverletInProcDataCollector"); + } - _eqtTrace = new TestPlatformEqtTrace(); - _eqtTrace.Verbose("Initialize CoverletInProcDataCollector"); - } + public void TestCaseEnd(TestCaseEndArgs testCaseEndArgs) + { + } - public void TestCaseEnd(TestCaseEndArgs testCaseEndArgs) + public void TestCaseStart(TestCaseStartArgs testCaseStartArgs) + { + } + + public void TestSessionEnd(TestSessionEndArgs testSessionEndArgs) + { + foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + Type injectedInstrumentationClass = GetInstrumentationClass(assembly); + if (injectedInstrumentationClass is null) { + continue; } - public void TestCaseStart(TestCaseStartArgs testCaseStartArgs) + try { + _eqtTrace.Verbose($"Calling ModuleTrackerTemplate.UnloadModule for '{injectedInstrumentationClass.Assembly.FullName}'"); + MethodInfo unloadModule = injectedInstrumentationClass.GetMethod(nameof(ModuleTrackerTemplate.UnloadModule), new[] { typeof(object), typeof(EventArgs) }); + unloadModule.Invoke(null, new[] { (object)this, EventArgs.Empty }); + injectedInstrumentationClass.GetField("FlushHitFile", BindingFlags.Static | BindingFlags.Public).SetValue(null, false); + _eqtTrace.Verbose($"Called ModuleTrackerTemplate.UnloadModule for '{injectedInstrumentationClass.Assembly.FullName}'"); } - - public void TestSessionEnd(TestSessionEndArgs testSessionEndArgs) + catch (Exception ex) { - foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - Type injectedInstrumentationClass = GetInstrumentationClass(assembly); - if (injectedInstrumentationClass is null) - { - continue; - } - - try - { - _eqtTrace.Verbose($"Calling ModuleTrackerTemplate.UnloadModule for '{injectedInstrumentationClass.Assembly.FullName}'"); - MethodInfo unloadModule = injectedInstrumentationClass.GetMethod(nameof(ModuleTrackerTemplate.UnloadModule), new[] { typeof(object), typeof(EventArgs) }); - unloadModule.Invoke(null, new[] { (object)this, EventArgs.Empty }); - injectedInstrumentationClass.GetField("FlushHitFile", BindingFlags.Static | BindingFlags.Public).SetValue(null, false); - _eqtTrace.Verbose($"Called ModuleTrackerTemplate.UnloadModule for '{injectedInstrumentationClass.Assembly.FullName}'"); - } - catch (Exception ex) - { - if (_enableExceptionLog) - { - _eqtTrace.Error("{0}: Failed to unload module with error: {1}", CoverletConstants.InProcDataCollectorName, ex); - string errorMessage = string.Format(Resources.FailedToUnloadModule, CoverletConstants.InProcDataCollectorName); - throw new CoverletDataCollectorException(errorMessage, ex); - } - } - } + if (_enableExceptionLog) + { + _eqtTrace.Error("{0}: Failed to unload module with error: {1}", CoverletConstants.InProcDataCollectorName, ex); + throw new CoverletDataCollectorException($"{CoverletConstants.InProcDataCollectorName}: Failed to unload module", ex); + } } + } + } - public void TestSessionStart(TestSessionStartArgs testSessionStartArgs) + public void TestSessionStart(TestSessionStartArgs testSessionStartArgs) + { + } + + private Type GetInstrumentationClass(Assembly assembly) + { + try + { + foreach (Type type in assembly.GetTypes()) { + if (type.Namespace == "Coverlet.Core.Instrumentation.Tracker" + && type.Name.StartsWith(assembly.GetName().Name + "_")) + { + return type; + } } - private Type GetInstrumentationClass(Assembly assembly) + return null; + } + catch (Exception ex) + { + if (_enableExceptionLog) { - try + var exceptionString = new StringBuilder(); + exceptionString.AppendFormat("{0}: Failed to get Instrumentation class for assembly '{1}' with error: {2}", + CoverletConstants.InProcDataCollectorName, assembly, ex); + exceptionString.AppendLine(); + + if (ex is ReflectionTypeLoadException rtle) + { + exceptionString.AppendLine("ReflectionTypeLoadException list:"); + foreach (Exception loaderEx in rtle.LoaderExceptions) { - foreach (Type type in assembly.GetTypes()) - { - if (type.Namespace == "Coverlet.Core.Instrumentation.Tracker" - && type.Name.StartsWith(assembly.GetName().Name + "_")) - { - return type; - } - } - - return null; - } - catch (Exception ex) - { - if (_enableExceptionLog) - { - var exceptionString = new StringBuilder(); - exceptionString.AppendFormat("{0}: Failed to get Instrumentation class for assembly '{1}' with error: {2}", - CoverletConstants.InProcDataCollectorName, assembly, ex); - exceptionString.AppendLine(); - - if (ex is ReflectionTypeLoadException rtle) - { - exceptionString.AppendLine("ReflectionTypeLoadException list:"); - foreach (Exception loaderEx in rtle.LoaderExceptions) - { - exceptionString.AppendLine(loaderEx.ToString()); - } - } - - _eqtTrace.Warning(exceptionString.ToString()); - } - - return null; + exceptionString.AppendLine(loaderEx.ToString()); } + } + + _eqtTrace.Warning(exceptionString.ToString()); } + + return null; + } } + } } diff --git a/src/coverlet.collector/Properties/AssemblyInfo.cs b/src/coverlet.collector/Properties/AssemblyInfo.cs index 4d4a63712..9d5c4a633 100644 --- a/src/coverlet.collector/Properties/AssemblyInfo.cs +++ b/src/coverlet.collector/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; @@ -8,4 +8,4 @@ [assembly: InternalsVisibleTo("coverlet.core.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] [assembly: InternalsVisibleTo("coverlet.collector.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100ed0ed6af9693182615b8dcadc83c918b8d36312f86cefc69539d67d4189cd1b89420e7c3871802ffef7f5ca7816c68ad856c77bf7c230cc07824d96aa5d1237eebd30e246b9a14e22695fb26b40c800f74ea96619092cbd3a5d430d6c003fc7a82e8ccd1e315b935105d9232fe9e99e8d7ff54bba6f191959338d4a3169df9b3")] // Needed to mock internal type https://github.com/Moq/moq4/wiki/Quickstart#advanced-features -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] \ No newline at end of file +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] diff --git a/src/coverlet.collector/Resources/Resources.Designer.cs b/src/coverlet.collector/Resources/Resources.Designer.cs deleted file mode 100644 index a1af3afe4..000000000 --- a/src/coverlet.collector/Resources/Resources.Designer.cs +++ /dev/null @@ -1,126 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace coverlet.collector.Resources { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("coverlet.collector.Resources.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to get coverage report. - /// - internal static string CoverageReportException { - get { - return ResourceManager.GetString("CoverageReportException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to get coverage result. - /// - internal static string CoverageResultException { - get { - return ResourceManager.GetString("CoverageResultException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to cleanup report directory: '{1}'. - /// - internal static string FailedToCleanupReportDirectory { - get { - return ResourceManager.GetString("FailedToCleanupReportDirectory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to save coverage report '{1}' in directory '{2}'. - /// - internal static string FailedToSaveCoverageReport { - get { - return ResourceManager.GetString("FailedToSaveCoverageReport", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to unload module. - /// - internal static string FailedToUnloadModule { - get { - return ResourceManager.GetString("FailedToUnloadModule", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed to instrument modules. - /// - internal static string InstrumentationException { - get { - return ResourceManager.GetString("InstrumentationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: No test modules found. - /// - internal static string NoTestModulesFound { - get { - return ResourceManager.GetString("NoTestModulesFound", resourceCulture); - } - } - } -} diff --git a/src/coverlet.collector/Resources/Resources.resx b/src/coverlet.collector/Resources/Resources.resx deleted file mode 100644 index af111547e..000000000 --- a/src/coverlet.collector/Resources/Resources.resx +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - {0}: Failed to get coverage report - - - {0}: Failed to get coverage result - - - {0}: Failed to cleanup report directory: '{1}' - - - {0}: Failed to save coverage report '{1}' in directory '{2}' - - - {0}: Failed to unload module - - - {0}: Failed to instrument modules - - - {0}: No test modules found - - \ No newline at end of file diff --git a/src/coverlet.collector/Utilities/CountDownEvent.cs b/src/coverlet.collector/Utilities/CountDownEvent.cs index 265c54103..9a82a76b3 100644 --- a/src/coverlet.collector/Utilities/CountDownEvent.cs +++ b/src/coverlet.collector/Utilities/CountDownEvent.cs @@ -7,36 +7,36 @@ namespace Coverlet.Collector.Utilities { - internal class CollectorCountdownEventFactory : ICountDownEventFactory + internal class CollectorCountdownEventFactory : ICountDownEventFactory + { + public ICountDownEvent Create(int count, TimeSpan waitTimeout) { - public ICountDownEvent Create(int count, TimeSpan waitTimeout) - { - return new CollectorCountdownEvent(count, waitTimeout); - } + return new CollectorCountdownEvent(count, waitTimeout); } + } - internal class CollectorCountdownEvent : ICountDownEvent - { - private readonly CountdownEvent _countDownEvent; - private readonly TimeSpan _waitTimeout; + internal class CollectorCountdownEvent : ICountDownEvent + { + private readonly CountdownEvent _countDownEvent; + private readonly TimeSpan _waitTimeout; - public CollectorCountdownEvent(int count, TimeSpan waitTimeout) - { - _countDownEvent = new CountdownEvent(count); - _waitTimeout = waitTimeout; - } + public CollectorCountdownEvent(int count, TimeSpan waitTimeout) + { + _countDownEvent = new CountdownEvent(count); + _waitTimeout = waitTimeout; + } - public void Signal() - { - _countDownEvent.Signal(); - } + public void Signal() + { + _countDownEvent.Signal(); + } - public void Wait() - { - if (!_countDownEvent.Wait(_waitTimeout)) - { - throw new TimeoutException($"CollectorCountdownEvent timeout after {_waitTimeout}"); - } - } + public void Wait() + { + if (!_countDownEvent.Wait(_waitTimeout)) + { + throw new TimeoutException($"CollectorCountdownEvent timeout after {_waitTimeout}"); + } } + } } diff --git a/src/coverlet.collector/Utilities/CoverletConstants.cs b/src/coverlet.collector/Utilities/CoverletConstants.cs index 3a7bfa998..5ce4a79ef 100644 --- a/src/coverlet.collector/Utilities/CoverletConstants.cs +++ b/src/coverlet.collector/Utilities/CoverletConstants.cs @@ -3,29 +3,29 @@ namespace Coverlet.Collector.Utilities { - internal static class CoverletConstants - { - public const string FriendlyName = "XPlat code coverage"; - public const string DefaultUri = @"datacollector://Microsoft/CoverletCodeCoverage/1.0"; - public const string DataCollectorName = "CoverletCoverageDataCollector"; - public const string DefaultReportFormat = "cobertura"; - public const string DefaultFileName = "coverage"; - public const string IncludeFiltersElementName = "Include"; - public const string IncludeDirectoriesElementName = "IncludeDirectory"; - public const string ExcludeFiltersElementName = "Exclude"; - public const string ExcludeSourceFilesElementName = "ExcludeByFile"; - public const string ExcludeAttributesElementName = "ExcludeByAttribute"; - public const string MergeWithElementName = "MergeWith"; - public const string UseSourceLinkElementName = "UseSourceLink"; - public const string SingleHitElementName = "SingleHit"; - public const string IncludeTestAssemblyElementName = "IncludeTestAssembly"; - public const string TestSourcesPropertyName = "TestSources"; - public const string ReportFormatElementName = "Format"; - public const string DefaultExcludeFilter = "[coverlet.*]*"; - public const string InProcDataCollectorName = "CoverletInProcDataCollector"; - public const string SkipAutoProps = "SkipAutoProps"; - public const string DoesNotReturnAttributesElementName = "DoesNotReturnAttribute"; - public const string DeterministicReport = "DeterministicReport"; - public const string ExcludeAssembliesWithoutSources = "ExcludeAssembliesWithoutSources"; - } + internal static class CoverletConstants + { + public const string FriendlyName = "XPlat code coverage"; + public const string DefaultUri = @"datacollector://Microsoft/CoverletCodeCoverage/1.0"; + public const string DataCollectorName = "CoverletCoverageDataCollector"; + public const string DefaultReportFormat = "cobertura"; + public const string DefaultFileName = "coverage"; + public const string IncludeFiltersElementName = "Include"; + public const string IncludeDirectoriesElementName = "IncludeDirectory"; + public const string ExcludeFiltersElementName = "Exclude"; + public const string ExcludeSourceFilesElementName = "ExcludeByFile"; + public const string ExcludeAttributesElementName = "ExcludeByAttribute"; + public const string MergeWithElementName = "MergeWith"; + public const string UseSourceLinkElementName = "UseSourceLink"; + public const string SingleHitElementName = "SingleHit"; + public const string IncludeTestAssemblyElementName = "IncludeTestAssembly"; + public const string TestSourcesPropertyName = "TestSources"; + public const string ReportFormatElementName = "Format"; + public const string DefaultExcludeFilter = "[coverlet.*]*"; + public const string InProcDataCollectorName = "CoverletInProcDataCollector"; + public const string SkipAutoProps = "SkipAutoProps"; + public const string DoesNotReturnAttributesElementName = "DoesNotReturnAttribute"; + public const string DeterministicReport = "DeterministicReport"; + public const string ExcludeAssembliesWithoutSources = "ExcludeAssembliesWithoutSources"; + } } diff --git a/src/coverlet.collector/Utilities/CoverletDataCollectorException.cs b/src/coverlet.collector/Utilities/CoverletDataCollectorException.cs index 189b363f8..2b015d24e 100644 --- a/src/coverlet.collector/Utilities/CoverletDataCollectorException.cs +++ b/src/coverlet.collector/Utilities/CoverletDataCollectorException.cs @@ -5,14 +5,14 @@ namespace Coverlet.Collector.Utilities { - internal class CoverletDataCollectorException : Exception + internal class CoverletDataCollectorException : Exception + { + public CoverletDataCollectorException(string message) : base(message) { - public CoverletDataCollectorException(string message) : base(message) - { - } + } - public CoverletDataCollectorException(string message, Exception innerException) : base(message, innerException) - { - } + public CoverletDataCollectorException(string message, Exception innerException) : base(message, innerException) + { } + } } diff --git a/src/coverlet.collector/Utilities/DirectoryHelper.cs b/src/coverlet.collector/Utilities/DirectoryHelper.cs index c9800a21b..35ef0ccf5 100644 --- a/src/coverlet.collector/Utilities/DirectoryHelper.cs +++ b/src/coverlet.collector/Utilities/DirectoryHelper.cs @@ -6,25 +6,25 @@ namespace Coverlet.Collector.Utilities { + /// + internal class DirectoryHelper : IDirectoryHelper + { /// - internal class DirectoryHelper : IDirectoryHelper + public bool Exists(string path) { - /// - public bool Exists(string path) - { - return Directory.Exists(path); - } + return Directory.Exists(path); + } - /// - public void CreateDirectory(string path) - { - Directory.CreateDirectory(path); - } + /// + public void CreateDirectory(string path) + { + Directory.CreateDirectory(path); + } - /// - public void Delete(string path, bool recursive) - { - Directory.Delete(path, recursive); - } + /// + public void Delete(string path, bool recursive) + { + Directory.Delete(path, recursive); } + } } diff --git a/src/coverlet.collector/Utilities/FileHelper.cs b/src/coverlet.collector/Utilities/FileHelper.cs index f8a85b13e..7f6ecaaf4 100644 --- a/src/coverlet.collector/Utilities/FileHelper.cs +++ b/src/coverlet.collector/Utilities/FileHelper.cs @@ -6,19 +6,19 @@ namespace Coverlet.Collector.Utilities { + /// + internal class FileHelper : IFileHelper + { /// - internal class FileHelper : IFileHelper + public bool Exists(string path) { - /// - public bool Exists(string path) - { - return File.Exists(path); - } + return File.Exists(path); + } - /// - public void WriteAllText(string path, string contents) - { - File.WriteAllText(path, contents); - } + /// + public void WriteAllText(string path, string contents) + { + File.WriteAllText(path, contents); } + } } diff --git a/src/coverlet.collector/Utilities/Interfaces/ICountDown.cs b/src/coverlet.collector/Utilities/Interfaces/ICountDown.cs index 69eddbce4..a9b7b3354 100644 --- a/src/coverlet.collector/Utilities/Interfaces/ICountDown.cs +++ b/src/coverlet.collector/Utilities/Interfaces/ICountDown.cs @@ -6,33 +6,33 @@ namespace Coverlet.Collector.Utilities.Interfaces { + /// + /// Factory for ICountDownEvent + /// + internal interface ICountDownEventFactory + { /// - /// Factory for ICountDownEvent + /// Create ICountDownEvent instance /// - internal interface ICountDownEventFactory - { - /// - /// Create ICountDownEvent instance - /// - /// count of CountDownEvent - /// max wait - /// - ICountDownEvent Create(int count, TimeSpan waitTimeout); - } + /// count of CountDownEvent + /// max wait + /// + ICountDownEvent Create(int count, TimeSpan waitTimeout); + } + /// + /// Wrapper interface for CountDownEvent + /// + internal interface ICountDownEvent + { /// - /// Wrapper interface for CountDownEvent + /// Signal event /// - internal interface ICountDownEvent - { - /// - /// Signal event - /// - void Signal(); + void Signal(); - /// - /// Wait for event - /// - void Wait(); - } + /// + /// Wait for event + /// + void Wait(); + } } diff --git a/src/coverlet.collector/Utilities/Interfaces/ICoverageWrapper.cs b/src/coverlet.collector/Utilities/Interfaces/ICoverageWrapper.cs index 1a34612c0..48410be09 100644 --- a/src/coverlet.collector/Utilities/Interfaces/ICoverageWrapper.cs +++ b/src/coverlet.collector/Utilities/Interfaces/ICoverageWrapper.cs @@ -7,37 +7,37 @@ namespace Coverlet.Collector.Utilities.Interfaces { + /// + /// Wrapper interface for Coverage class in coverlet.core + /// Since the class is not testable, this interface is used to abstract methods for mocking in unit tests. + /// + internal interface ICoverageWrapper + { /// - /// Wrapper interface for Coverage class in coverlet.core - /// Since the class is not testable, this interface is used to abstract methods for mocking in unit tests. + /// Creates a coverage object from given coverlet settings /// - internal interface ICoverageWrapper - { - /// - /// Creates a coverage object from given coverlet settings - /// - /// Coverlet settings - /// Coverlet logger - /// Coverlet instrumentationHelper - /// Coverlet fileSystem - /// Coverlet sourceRootTranslator - /// - /// Coverage object - Coverage CreateCoverage(CoverletSettings settings, ILogger logger, IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper); + /// Coverlet settings + /// Coverlet logger + /// Coverlet instrumentationHelper + /// Coverlet fileSystem + /// Coverlet sourceRootTranslator + /// + /// Coverage object + Coverage CreateCoverage(CoverletSettings settings, ILogger logger, IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper); - /// - /// Gets the coverage result from provided coverage object - /// - /// Coverage - /// The coverage result - CoverageResult GetCoverageResult(Coverage coverage); + /// + /// Gets the coverage result from provided coverage object + /// + /// Coverage + /// The coverage result + CoverageResult GetCoverageResult(Coverage coverage); - /// - /// Prepares modules for getting coverage. - /// Wrapper over coverage.PrepareModules - /// - /// - void PrepareModules(Coverage coverage); + /// + /// Prepares modules for getting coverage. + /// Wrapper over coverage.PrepareModules + /// + /// + void PrepareModules(Coverage coverage); - } + } } diff --git a/src/coverlet.collector/Utilities/Interfaces/IDirectoryHelper.cs b/src/coverlet.collector/Utilities/Interfaces/IDirectoryHelper.cs index f148f21ea..07ee98c21 100644 --- a/src/coverlet.collector/Utilities/Interfaces/IDirectoryHelper.cs +++ b/src/coverlet.collector/Utilities/Interfaces/IDirectoryHelper.cs @@ -3,29 +3,29 @@ namespace Coverlet.Collector.Utilities.Interfaces { - interface IDirectoryHelper - { - /// - /// Determines whether the specified directory exists. - /// - /// The directory to check. - /// true if the caller has the required permissions and path contains the name of an existing directory; otherwise, false. - /// This method also returns false if path is null, an invalid path, or a zero-length string. - /// If the caller does not have sufficient permissions to read the specified file, - /// no exception is thrown and the method returns false regardless of the existence of path. - bool Exists(string path); + interface IDirectoryHelper + { + /// + /// Determines whether the specified directory exists. + /// + /// The directory to check. + /// true if the caller has the required permissions and path contains the name of an existing directory; otherwise, false. + /// This method also returns false if path is null, an invalid path, or a zero-length string. + /// If the caller does not have sufficient permissions to read the specified file, + /// no exception is thrown and the method returns false regardless of the existence of path. + bool Exists(string path); - /// - /// Creates all directories and subdirectories in the specified path unless they already exist. - /// - /// The directory to create. - void CreateDirectory(string directory); + /// + /// Creates all directories and subdirectories in the specified path unless they already exist. + /// + /// The directory to create. + void CreateDirectory(string directory); - /// - /// Deletes the specified directory and, if indicated, any subdirectories and files in the directory. - /// - /// The name of the directory to remove. - /// true to remove directories, subdirectories, and files in path; otherwise, false. - void Delete(string path, bool recursive); - } + /// + /// Deletes the specified directory and, if indicated, any subdirectories and files in the directory. + /// + /// The name of the directory to remove. + /// true to remove directories, subdirectories, and files in path; otherwise, false. + void Delete(string path, bool recursive); + } } diff --git a/src/coverlet.collector/Utilities/Interfaces/IFileHelper.cs b/src/coverlet.collector/Utilities/Interfaces/IFileHelper.cs index 1ddcc8678..c9c58bc21 100644 --- a/src/coverlet.collector/Utilities/Interfaces/IFileHelper.cs +++ b/src/coverlet.collector/Utilities/Interfaces/IFileHelper.cs @@ -3,24 +3,24 @@ namespace Coverlet.Collector.Utilities.Interfaces { - internal interface IFileHelper - { - /// - /// Determines whether the specified file exists. - /// - /// The file to check. - /// true if the caller has the required permissions and path contains the name of an existing file; otherwise, false. - /// This method also returns false if path is null, an invalid path, or a zero-length string. - /// If the caller does not have sufficient permissions to read the specified file, - /// no exception is thrown and the method returns false regardless of the existence of path. - bool Exists(string path); + internal interface IFileHelper + { + /// + /// Determines whether the specified file exists. + /// + /// The file to check. + /// true if the caller has the required permissions and path contains the name of an existing file; otherwise, false. + /// This method also returns false if path is null, an invalid path, or a zero-length string. + /// If the caller does not have sufficient permissions to read the specified file, + /// no exception is thrown and the method returns false regardless of the existence of path. + bool Exists(string path); - /// - /// Creates a new file, writes the specified string to the file, and then closes the file. - /// If the target file already exists, it is overwritten. - /// - /// The file to write to. - /// The string to write to the file. - void WriteAllText(string path, string contents); - } + /// + /// Creates a new file, writes the specified string to the file, and then closes the file. + /// If the target file already exists, it is overwritten. + /// + /// The file to write to. + /// The string to write to the file. + void WriteAllText(string path, string contents); + } } diff --git a/src/coverlet.collector/Utilities/TestPlatformEqtTrace.cs b/src/coverlet.collector/Utilities/TestPlatformEqtTrace.cs index 7c02f6d03..a5cbdf16a 100644 --- a/src/coverlet.collector/Utilities/TestPlatformEqtTrace.cs +++ b/src/coverlet.collector/Utilities/TestPlatformEqtTrace.cs @@ -5,52 +5,52 @@ namespace Coverlet.Collector.Utilities { + /// + /// Test platform eqttrace + /// + internal class TestPlatformEqtTrace + { + public bool IsInfoEnabled => EqtTrace.IsInfoEnabled; + public bool IsVerboseEnabled => EqtTrace.IsVerboseEnabled; + /// - /// Test platform eqttrace + /// Verbose logger /// - internal class TestPlatformEqtTrace + /// Format + /// Args + public void Verbose(string format, params object[] args) { - public bool IsInfoEnabled => EqtTrace.IsInfoEnabled; - public bool IsVerboseEnabled => EqtTrace.IsVerboseEnabled; - - /// - /// Verbose logger - /// - /// Format - /// Args - public void Verbose(string format, params object[] args) - { - EqtTrace.Verbose($"[coverlet]{format}", args); - } + EqtTrace.Verbose($"[coverlet]{format}", args); + } - /// - /// Warning logger - /// - /// Format - /// Args - public void Warning(string format, params object[] args) - { - EqtTrace.Warning($"[coverlet]{format}", args); - } + /// + /// Warning logger + /// + /// Format + /// Args + public void Warning(string format, params object[] args) + { + EqtTrace.Warning($"[coverlet]{format}", args); + } - /// - /// Info logger - /// - /// Format - /// Args - public void Info(string format, params object[] args) - { - EqtTrace.Info($"[coverlet]{format}", args); - } + /// + /// Info logger + /// + /// Format + /// Args + public void Info(string format, params object[] args) + { + EqtTrace.Info($"[coverlet]{format}", args); + } - /// - /// Error logger - /// - /// Format - /// Args - public void Error(string format, params object[] args) - { - EqtTrace.Error($"[coverlet]{format}", args); - } + /// + /// Error logger + /// + /// Format + /// Args + public void Error(string format, params object[] args) + { + EqtTrace.Error($"[coverlet]{format}", args); } + } } diff --git a/src/coverlet.collector/Utilities/TestPlatformLogger.cs b/src/coverlet.collector/Utilities/TestPlatformLogger.cs index 105e4c9d9..dd3560220 100644 --- a/src/coverlet.collector/Utilities/TestPlatformLogger.cs +++ b/src/coverlet.collector/Utilities/TestPlatformLogger.cs @@ -5,27 +5,27 @@ namespace Coverlet.Collector.Utilities { + /// + /// Test platform logger + /// + internal class TestPlatformLogger + { + private readonly DataCollectionLogger _logger; + private readonly DataCollectionContext _dataCollectionContext; + + public TestPlatformLogger(DataCollectionLogger logger, DataCollectionContext dataCollectionContext) + { + _logger = logger; + _dataCollectionContext = dataCollectionContext; + } + /// - /// Test platform logger + /// Log warning /// - internal class TestPlatformLogger + /// Warning message + public void LogWarning(string warning) { - private readonly DataCollectionLogger _logger; - private readonly DataCollectionContext _dataCollectionContext; - - public TestPlatformLogger(DataCollectionLogger logger, DataCollectionContext dataCollectionContext) - { - _logger = logger; - _dataCollectionContext = dataCollectionContext; - } - - /// - /// Log warning - /// - /// Warning message - public void LogWarning(string warning) - { - _logger.LogWarning(_dataCollectionContext, $"[coverlet]{warning}"); - } + _logger.LogWarning(_dataCollectionContext, $"[coverlet]{warning}"); } + } } diff --git a/src/coverlet.collector/build/netstandard1.0/coverlet.collector.targets b/src/coverlet.collector/build/coverlet.collector.targets similarity index 97% rename from src/coverlet.collector/build/netstandard1.0/coverlet.collector.targets rename to src/coverlet.collector/build/coverlet.collector.targets index 7bd7b28e7..12cf946c8 100644 --- a/src/coverlet.collector/build/netstandard1.0/coverlet.collector.targets +++ b/src/coverlet.collector/build/coverlet.collector.targets @@ -9,14 +9,15 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and --> + - + - + $(VSTestTestAdapterPath);$(MSBuildThisFileDirectory) @@ -26,7 +27,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and <_CoverletSdkNETCoreSdkVersion>$(NETCoreSdkVersion) <_CoverletSdkNETCoreSdkVersion Condition="$(_CoverletSdkNETCoreSdkVersion.Contains('-'))">$(_CoverletSdkNETCoreSdkVersion.Split('-')[0]) - <_CoverletSdkMinVersionWithDependencyTarget>3.1.300 + <_CoverletSdkMinVersionWithDependencyTarget>6.0.100 <_CoverletSourceRootTargetName>CoverletGetPathMap <_CoverletSourceRootTargetName Condition="'$([System.Version]::Parse($(_CoverletSdkNETCoreSdkVersion)).CompareTo($([System.Version]::Parse($(_CoverletSdkMinVersionWithDependencyTarget)))))' >= '0' ">InitializeSourceRootMappedPaths diff --git a/src/coverlet.collector/coverlet.collector.csproj b/src/coverlet.collector/coverlet.collector.csproj index ba206705c..ddb8522ba 100644 --- a/src/coverlet.collector/coverlet.collector.csproj +++ b/src/coverlet.collector/coverlet.collector.csproj @@ -1,20 +1,23 @@ - + - netstandard2.0 + netstandard2.0 coverlet.collector true true false - true $(TargetsForTfmSpecificContentInPackage);PackBuildOutputs - $(NoWarn);NU5127 + $(NoWarn);NU5127;NU5100 + true + + false @@ -29,59 +32,41 @@ false Coverlet is a cross platform code coverage library for .NET, with support for line, branch and method coverage. coverage testing unit-test lcov opencover quality + VSTestIntegration.md + https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md git + - + + true + - - True - True - Resources.resx - - - True - True - Resources.resx - - - True - True - Resources.resx - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - ResXFileCodeGenerator - Resource.Designer.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - + - + + Always + - - - + + + + + + diff --git a/src/coverlet.console/ExitCodes.cs b/src/coverlet.console/ExitCodes.cs index 670eda89a..93a7d395f 100644 --- a/src/coverlet.console/ExitCodes.cs +++ b/src/coverlet.console/ExitCodes.cs @@ -9,29 +9,29 @@ [Flags] internal enum CommandExitCodes { - /// - /// Indicates successful run of dotnet test without any test failure and coverage percentage above threshold if provided. - /// - Success = 0, + /// + /// Indicates successful run of dotnet test without any test failure and coverage percentage above threshold if provided. + /// + Success = 0, - /// - /// Indicates test failure by dotnet test. - /// - TestFailed = 1, + /// + /// Indicates test failure by dotnet test. + /// + TestFailed = 1, - /// - /// Indicates coverage percentage is below given threshold for one or more threshold type. - /// - CoverageBelowThreshold = 2, + /// + /// Indicates coverage percentage is below given threshold for one or more threshold type. + /// + CoverageBelowThreshold = 2, - /// - /// Indicates exception occurred during Coverlet process. - /// - Exception = 101, + /// + /// Indicates exception occurred during Coverlet process. + /// + Exception = 101, - /// - /// Indicates missing options or empty arguments for Coverlet process. - /// - CommandParsingException = 102 + /// + /// Indicates missing options or empty arguments for Coverlet process. + /// + CommandParsingException = 102 } diff --git a/src/coverlet.console/Logging/ConsoleLogger.cs b/src/coverlet.console/Logging/ConsoleLogger.cs index 1e41af504..30aca3a20 100644 --- a/src/coverlet.console/Logging/ConsoleLogger.cs +++ b/src/coverlet.console/Logging/ConsoleLogger.cs @@ -7,40 +7,40 @@ namespace Coverlet.Console.Logging { - class ConsoleLogger : ILogger - { - private static readonly object s_sync = new(); - - public LogLevel Level { get; set; } = LogLevel.Normal; + class ConsoleLogger : ILogger + { + private static readonly object s_sync = new(); + + public LogLevel Level { get; set; } = LogLevel.Normal; + + public void LogError(string message) => Log(LogLevel.Quiet, message, ConsoleColor.Red); - public void LogError(string message) => Log(LogLevel.Quiet, message, ConsoleColor.Red); + public void LogError(Exception exception) => LogError(exception.ToString()); - public void LogError(Exception exception) => LogError(exception.ToString()); + public void LogInformation(string message, bool important = false) => Log(important ? LogLevel.Minimal : LogLevel.Normal, message, ForegroundColor); - public void LogInformation(string message, bool important = false) => Log(important ? LogLevel.Minimal : LogLevel.Normal, message, ForegroundColor); + public void LogVerbose(string message) => Log(LogLevel.Detailed, message, ForegroundColor); - public void LogVerbose(string message) => Log(LogLevel.Detailed, message, ForegroundColor); + public void LogWarning(string message) => Log(LogLevel.Quiet, message, ConsoleColor.Yellow); - public void LogWarning(string message) => Log(LogLevel.Quiet, message, ConsoleColor.Yellow); + private void Log(LogLevel level, string message, ConsoleColor color) + { + if (level < Level) return; - private void Log(LogLevel level, string message, ConsoleColor color) + lock (s_sync) + { + ConsoleColor currentForegroundColor; + if (color != (currentForegroundColor = ForegroundColor)) + { + ForegroundColor = color; + WriteLine(message); + ForegroundColor = currentForegroundColor; + } + else { - if (level < Level) return; - - lock (s_sync) - { - ConsoleColor currentForegroundColor; - if (color != (currentForegroundColor = ForegroundColor)) - { - ForegroundColor = color; - WriteLine(message); - ForegroundColor = currentForegroundColor; - } - else - { - WriteLine(message); - } - } + WriteLine(message); } + } } + } } diff --git a/src/coverlet.console/Logging/LogLevel.cs b/src/coverlet.console/Logging/LogLevel.cs index 2e0cf7320..4035d07bd 100644 --- a/src/coverlet.console/Logging/LogLevel.cs +++ b/src/coverlet.console/Logging/LogLevel.cs @@ -1,33 +1,33 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace Coverlet.Console.Logging { + /// + /// Defines logging severity levels. + /// + enum LogLevel + { /// - /// Defines logging severity levels. + /// Logs that track the general flow of the application. These logs should have long-term value. /// - enum LogLevel - { - /// - /// Logs that track the general flow of the application. These logs should have long-term value. - /// - Detailed = 0, + Detailed = 0, - /// - /// Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the - /// application execution to stop. - /// - Normal = 1, + /// + /// Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the + /// application execution to stop. + /// + Normal = 1, - /// - /// Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a - /// failure in the current activity, not an application-wide failure. - /// - Minimal = 2, + /// + /// Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a + /// failure in the current activity, not an application-wide failure. + /// + Minimal = 2, - /// - /// Not used for writing log messages. Specifies that a logging category should not write any messages except warning and errors. - /// - Quiet = 3 - } + /// + /// Not used for writing log messages. Specifies that a logging category should not write any messages except warning and errors. + /// + Quiet = 3 + } } diff --git a/src/coverlet.console/Program.cs b/src/coverlet.console/Program.cs index d967f90d6..2c6035ee5 100644 --- a/src/coverlet.console/Program.cs +++ b/src/coverlet.console/Program.cs @@ -3,12 +3,14 @@ using System; using System.Collections.Generic; +using System.CommandLine; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Text; +using System.Threading.Tasks; using ConsoleTables; using Coverlet.Console.Logging; using Coverlet.Core; @@ -17,309 +19,387 @@ using Coverlet.Core.Helpers; using Coverlet.Core.Reporters; using Coverlet.Core.Symbols; -using McMaster.Extensions.CommandLineUtils; using Microsoft.Extensions.DependencyInjection; namespace Coverlet.Console { - class Program + public static class Program + { + static int Main(string[] args) { - static int Main(string[] args) + var moduleOrAppDirectory = new Argument("path", "Path to the test assembly or application directory."); + var target = new Option(new[] { "--target", "-t" }, "Path to the test runner application.") { Arity = ArgumentArity.ZeroOrOne, IsRequired = true }; + var targs = new Option(new[] { "--targetargs", "-a" }, "Arguments to be passed to the test runner.") { Arity = ArgumentArity.ZeroOrOne }; + var output = new Option(new[] { "--output", "-o" }, "Output of the generated coverage report") { Arity = ArgumentArity.ZeroOrOne }; + var verbosity = new Option(new[] { "--verbosity", "-v" }, () => LogLevel.Normal, "Sets the verbosity level of the command. Allowed values are quiet, minimal, normal, detailed.") { Arity = ArgumentArity.ZeroOrOne }; + var formats = new Option(new[] { "--format", "-f" }, () => new[] { "json" }, "Format of the generated coverage report.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var threshold = new Option("--threshold", "Exits with error if the coverage % is below value.") { Arity = ArgumentArity.ZeroOrOne }; + Option> thresholdTypes = new Option>("--threshold-type", () => new List(new string[] { "line", "branch", "method" }), "Coverage type to apply the threshold to.").FromAmong("line", "branch", "method"); + var thresholdStat = new Option("--threshold-stat", () => ThresholdStatistic.Minimum, "Coverage statistic used to enforce the threshold value.") { Arity = ArgumentArity.ZeroOrOne }; + var excludeFilters = new Option("--exclude", "Filter expressions to exclude specific modules and types.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var includeFilters = new Option("--include", "Filter expressions to include only specific modules and types.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var excludedSourceFiles = new Option("--exclude-by-file", "Glob patterns specifying source files to exclude.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var includeDirectories = new Option("--include-directory", "Include directories containing additional assemblies to be instrumented.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var excludeAttributes = new Option("--exclude-by-attribute", "Attributes to exclude from code coverage.") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var includeTestAssembly = new Option("--include-test-assembly", "Specifies whether to report code coverage of the test assembly.") { Arity = ArgumentArity.Zero }; + var singleHit = new Option("--single-hit", "Specifies whether to limit code coverage hit reporting to a single hit for each location") { Arity = ArgumentArity.Zero }; + var skipAutoProp = new Option("--skipautoprops", "Neither track nor record auto-implemented properties.") { Arity = ArgumentArity.Zero }; + var mergeWith = new Option("--merge-with", "Path to existing coverage result to merge.") { Arity = ArgumentArity.ZeroOrOne }; + var useSourceLink = new Option("--use-source-link", "Specifies whether to use SourceLink URIs in place of file system paths.") { Arity = ArgumentArity.Zero }; + var doesNotReturnAttributes = new Option("--does-not-return-attribute", "Attributes that mark methods that do not return") { Arity = ArgumentArity.ZeroOrMore, AllowMultipleArgumentsPerToken = true }; + var excludeAssembliesWithoutSources = new Option("--exclude-assemblies-without-sources", "Specifies behaviour of heuristic to ignore assemblies with missing source documents.") { Arity = ArgumentArity.ZeroOrOne }; + var sourceMappingFile = new Option("--source-mapping-file", "Specifies the path to a SourceRootsMappings file.") { Arity = ArgumentArity.ZeroOrOne }; + + RootCommand rootCommand = new() + { + moduleOrAppDirectory, + target, + targs, + output, + verbosity, + formats, + threshold, + thresholdTypes, + thresholdStat, + excludeFilters, + includeFilters, + excludedSourceFiles, + includeDirectories, + excludeAttributes, + includeTestAssembly, + singleHit, + skipAutoProp, + mergeWith, + useSourceLink, + doesNotReturnAttributes, + excludeAssembliesWithoutSources, + sourceMappingFile + }; + + rootCommand.Description = "Cross platform .NET Core code coverage tool"; + + rootCommand.SetHandler(async (context) => + { + string moduleOrAppDirectoryValue = context.ParseResult.GetValueForArgument(moduleOrAppDirectory); + string targetValue = context.ParseResult.GetValueForOption(target); + string targsValue = context.ParseResult.GetValueForOption(targs); + string outputValue = context.ParseResult.GetValueForOption(output); + LogLevel verbosityValue = context.ParseResult.GetValueForOption(verbosity); + string[] formatsValue = context.ParseResult.GetValueForOption(formats); + string thresholdValue = context.ParseResult.GetValueForOption(threshold); + List thresholdTypesValue = context.ParseResult.GetValueForOption(thresholdTypes); + ThresholdStatistic thresholdStatValue = context.ParseResult.GetValueForOption(thresholdStat); + string[] excludeFiltersValue = context.ParseResult.GetValueForOption(excludeFilters); + string[] includeFiltersValue = context.ParseResult.GetValueForOption(includeFilters); + string[] excludedSourceFilesValue = context.ParseResult.GetValueForOption(excludedSourceFiles); + string[] includeDirectoriesValue = context.ParseResult.GetValueForOption(includeDirectories); + string[] excludeAttributesValue = context.ParseResult.GetValueForOption(excludeAttributes); + bool includeTestAssemblyValue = context.ParseResult.GetValueForOption(includeTestAssembly); + bool singleHitValue = context.ParseResult.GetValueForOption(singleHit); + bool skipAutoPropValue = context.ParseResult.GetValueForOption(skipAutoProp); + string mergeWithValue = context.ParseResult.GetValueForOption(mergeWith); + bool useSourceLinkValue = context.ParseResult.GetValueForOption(useSourceLink); + string[] doesNotReturnAttributesValue = context.ParseResult.GetValueForOption(doesNotReturnAttributes); + string excludeAssembliesWithoutSourcesValue = context.ParseResult.GetValueForOption(excludeAssembliesWithoutSources); + string sourceMappingFileValue = context.ParseResult.GetValueForOption(sourceMappingFile); + + if (string.IsNullOrEmpty(moduleOrAppDirectoryValue) || string.IsNullOrWhiteSpace(moduleOrAppDirectoryValue)) + throw new ArgumentException("No test assembly or application directory specified."); + + int taskStatus = await HandleCommand(moduleOrAppDirectoryValue, + targetValue, + targsValue, + outputValue, + verbosityValue, + formatsValue, + thresholdValue, + thresholdTypesValue, + thresholdStatValue, + excludeFiltersValue, + includeFiltersValue, + excludedSourceFilesValue, + includeDirectoriesValue, + excludeAttributesValue, + includeTestAssemblyValue, + singleHitValue, + skipAutoPropValue, + mergeWithValue, + useSourceLinkValue, + doesNotReturnAttributesValue, + excludeAssembliesWithoutSourcesValue, + sourceMappingFileValue); + context.ExitCode = taskStatus; + + }); + return rootCommand.Invoke(args); + } + private static Task HandleCommand(string moduleOrAppDirectory, + string target, + string targs, + string output, + LogLevel verbosity, + string[] formats, + string threshold, + List thresholdTypes, + ThresholdStatistic thresholdStat, + string[] excludeFilters, + string[] includeFilters, + string[] excludedSourceFiles, + string[] includeDirectories, + string[] excludeAttributes, + bool includeTestAssembly, + bool singleHit, + bool skipAutoProp, + string mergeWith, + bool useSourceLink, + string[] doesNotReturnAttributes, + string excludeAssembliesWithoutSources, + string sourceMappingFile + ) + { + + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + // We need to keep singleton/static semantics + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(provider => new SourceRootTranslator(sourceMappingFile, provider.GetRequiredService(), provider.GetRequiredService())); + serviceCollection.AddSingleton(); + + ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); + + var logger = (ConsoleLogger)serviceProvider.GetService(); + IFileSystem fileSystem = serviceProvider.GetService(); + + // Adjust log level based on user input. + logger.Level = verbosity; + int exitCode = (int)CommandExitCodes.Success; + + try + { + CoverageParameters parameters = new() { - IServiceCollection serviceCollection = new ServiceCollection(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - // We need to keep singleton/static semantics - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(provider => new SourceRootTranslator(provider.GetRequiredService(), provider.GetRequiredService())); - serviceCollection.AddSingleton(); - - ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); - - var logger = (ConsoleLogger)serviceProvider.GetService(); - IFileSystem fileSystem = serviceProvider.GetService(); - - var app = new CommandLineApplication - { - Name = "coverlet", - FullName = "Cross platform .NET Core code coverage tool" - }; - app.HelpOption("-h|--help"); - app.VersionOption("-v|--version", GetAssemblyVersion()); - int exitCode = (int)CommandExitCodes.Success; - - CommandArgument moduleOrAppDirectory = app.Argument("", "Path to the test assembly or application directory."); - CommandOption target = app.Option("-t|--target", "Path to the test runner application.", CommandOptionType.SingleValue); - CommandOption targs = app.Option("-a|--targetargs", "Arguments to be passed to the test runner.", CommandOptionType.SingleValue); - CommandOption output = app.Option("-o|--output", "Output of the generated coverage report", CommandOptionType.SingleValue); - CommandOption verbosity = app.Option("-v|--verbosity", "Sets the verbosity level of the command. Allowed values are quiet, minimal, normal, detailed.", CommandOptionType.SingleValue); - CommandOption formats = app.Option("-f|--format", "Format of the generated coverage report.", CommandOptionType.MultipleValue); - CommandOption threshold = app.Option("--threshold", "Exits with error if the coverage % is below value.", CommandOptionType.SingleValue); - CommandOption thresholdTypes = app.Option("--threshold-type", "Coverage type to apply the threshold to.", CommandOptionType.MultipleValue); - CommandOption thresholdStat = app.Option("--threshold-stat", "Coverage statistic used to enforce the threshold value.", CommandOptionType.SingleValue); - CommandOption excludeFilters = app.Option("--exclude", "Filter expressions to exclude specific modules and types.", CommandOptionType.MultipleValue); - CommandOption includeFilters = app.Option("--include", "Filter expressions to include only specific modules and types.", CommandOptionType.MultipleValue); - CommandOption excludedSourceFiles = app.Option("--exclude-by-file", "Glob patterns specifying source files to exclude.", CommandOptionType.MultipleValue); - CommandOption includeDirectories = app.Option("--include-directory", "Include directories containing additional assemblies to be instrumented.", CommandOptionType.MultipleValue); - CommandOption excludeAttributes = app.Option("--exclude-by-attribute", "Attributes to exclude from code coverage.", CommandOptionType.MultipleValue); - CommandOption includeTestAssembly = app.Option("--include-test-assembly", "Specifies whether to report code coverage of the test assembly.", CommandOptionType.NoValue); - CommandOption singleHit = app.Option("--single-hit", "Specifies whether to limit code coverage hit reporting to a single hit for each location", CommandOptionType.NoValue); - CommandOption skipAutoProp = app.Option("--skipautoprops", "Neither track nor record auto-implemented properties.", CommandOptionType.NoValue); - CommandOption mergeWith = app.Option("--merge-with", "Path to existing coverage result to merge.", CommandOptionType.SingleValue); - CommandOption useSourceLink = app.Option("--use-source-link", "Specifies whether to use SourceLink URIs in place of file system paths.", CommandOptionType.NoValue); - CommandOption doesNotReturnAttributes = app.Option("--does-not-return-attribute", "Attributes that mark methods that do not return.", CommandOptionType.MultipleValue); - CommandOption excludeAssembliesWithoutSources = app.Option("--exclude-assemblies-without-sources", "Specifies behaviour of heuristic to ignore assemblies with missing source documents.", CommandOptionType.SingleValue); - - app.OnExecute(() => - { - if (string.IsNullOrEmpty(moduleOrAppDirectory.Value) || string.IsNullOrWhiteSpace(moduleOrAppDirectory.Value)) - throw new CommandParsingException(app, "No test assembly or application directory specified."); - - if (!target.HasValue()) - throw new CommandParsingException(app, "Target must be specified."); - - if (verbosity.HasValue()) - { - // Adjust log level based on user input. - logger.Level = verbosity.ParsedValue; - } - - CoverageParameters parameters = new() - { - IncludeFilters = includeFilters.Values.ToArray(), - IncludeDirectories = includeDirectories.Values.ToArray(), - ExcludeFilters = excludeFilters.Values.ToArray(), - ExcludedSourceFiles = excludedSourceFiles.Values.ToArray(), - ExcludeAttributes = excludeAttributes.Values.ToArray(), - IncludeTestAssembly = includeTestAssembly.HasValue(), - SingleHit = singleHit.HasValue(), - MergeWith = mergeWith.Value(), - UseSourceLink = useSourceLink.HasValue(), - SkipAutoProps = skipAutoProp.HasValue(), - DoesNotReturnAttributes = doesNotReturnAttributes.Values.ToArray(), - ExcludeAssembliesWithoutSources = excludeAssembliesWithoutSources.Value() - }; - - ISourceRootTranslator sourceRootTranslator = serviceProvider.GetRequiredService(); - - Coverage coverage = new(moduleOrAppDirectory.Value, - parameters, - logger, - serviceProvider.GetRequiredService(), - fileSystem, - sourceRootTranslator, - serviceProvider.GetRequiredService()); - coverage.PrepareModules(); - - Process process = new(); - process.StartInfo.FileName = target.Value(); - process.StartInfo.Arguments = targs.HasValue() ? targs.Value() : string.Empty; - process.StartInfo.CreateNoWindow = true; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.OutputDataReceived += (sender, eventArgs) => - { - if (!string.IsNullOrEmpty(eventArgs.Data)) - logger.LogInformation(eventArgs.Data, important: true); - }; - - process.ErrorDataReceived += (sender, eventArgs) => - { - if (!string.IsNullOrEmpty(eventArgs.Data)) - logger.LogError(eventArgs.Data); - }; - - process.Start(); - - process.BeginErrorReadLine(); - process.BeginOutputReadLine(); - - process.WaitForExit(); - - string dOutput = output.HasValue() ? output.Value() : Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar.ToString(); - List dThresholdTypes = thresholdTypes.HasValue() ? thresholdTypes.Values : new List(new string[] { "line", "branch", "method" }); - ThresholdStatistic dThresholdStat = thresholdStat.HasValue() ? Enum.Parse(thresholdStat.Value(), true) : Enum.Parse("minimum", true); - - logger.LogInformation("\nCalculating coverage result..."); - - CoverageResult result = coverage.GetCoverageResult(); - - string directory = Path.GetDirectoryName(dOutput); - if (directory == string.Empty) - { - directory = Directory.GetCurrentDirectory(); - } - else if (!Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - - foreach (string format in formats.HasValue() ? formats.Values : new List(new string[] { "json" })) - { - Core.Abstractions.IReporter reporter = new ReporterFactory(format).CreateReporter(); - if (reporter == null) - { - throw new Exception($"Specified output format '{format}' is not supported"); - } - - if (reporter.OutputType == ReporterOutputType.Console) - { - // Output to console - logger.LogInformation(" Outputting results to console", important: true); - logger.LogInformation(reporter.Report(result, sourceRootTranslator), important: true); - } - else - { - // Output to file - string filename = Path.GetFileName(dOutput); - filename = (filename == string.Empty) ? $"coverage.{reporter.Extension}" : filename; - filename = Path.HasExtension(filename) ? filename : $"{filename}.{reporter.Extension}"; - - string report = Path.Combine(directory, filename); - logger.LogInformation($" Generating report '{report}'", important: true); - fileSystem.WriteAllText(report, reporter.Report(result, sourceRootTranslator)); - } - } - - var thresholdTypeFlagQueue = new Queue(); - - foreach (string thresholdType in dThresholdTypes) - { - if (thresholdType.Equals("line", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Line); - } - else if (thresholdType.Equals("branch", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Branch); - } - else if (thresholdType.Equals("method", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Method); - } - } - - var thresholdTypeFlagValues = new Dictionary(); - if (threshold.HasValue() && threshold.Value().Contains(',')) - { - IEnumerable thresholdValues = threshold.Value().Split(',', StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()); - if (thresholdValues.Count() != thresholdTypeFlagQueue.Count) - { - throw new Exception($"Threshold type flag count ({thresholdTypeFlagQueue.Count}) and values count ({thresholdValues.Count()}) doesn't match"); - } - - foreach (string thresholdValue in thresholdValues) - { - if (double.TryParse(thresholdValue, out double value)) - { - thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = value; - } - else - { - throw new Exception($"Invalid threshold value must be numeric"); - } - } - } - else - { - double thresholdValue = threshold.HasValue() ? double.Parse(threshold.Value()) : 0; - - while (thresholdTypeFlagQueue.Any()) - { - thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = thresholdValue; - } - } - - var coverageTable = new ConsoleTable("Module", "Line", "Branch", "Method"); - var summary = new CoverageSummary(); - - CoverageDetails linePercentCalculation = summary.CalculateLineCoverage(result.Modules); - CoverageDetails branchPercentCalculation = summary.CalculateBranchCoverage(result.Modules); - CoverageDetails methodPercentCalculation = summary.CalculateMethodCoverage(result.Modules); - - double totalLinePercent = linePercentCalculation.Percent; - double totalBranchPercent = branchPercentCalculation.Percent; - double totalMethodPercent = methodPercentCalculation.Percent; - - double averageLinePercent = linePercentCalculation.AverageModulePercent; - double averageBranchPercent = branchPercentCalculation.AverageModulePercent; - double averageMethodPercent = methodPercentCalculation.AverageModulePercent; - - foreach (KeyValuePair _module in result.Modules) - { - double linePercent = summary.CalculateLineCoverage(_module.Value).Percent; - double branchPercent = summary.CalculateBranchCoverage(_module.Value).Percent; - double methodPercent = summary.CalculateMethodCoverage(_module.Value).Percent; - - coverageTable.AddRow(Path.GetFileNameWithoutExtension(_module.Key), $"{InvariantFormat(linePercent)}%", $"{InvariantFormat(branchPercent)}%", $"{InvariantFormat(methodPercent)}%"); - } - - logger.LogInformation(coverageTable.ToStringAlternative()); - - coverageTable.Columns.Clear(); - coverageTable.Rows.Clear(); - - coverageTable.AddColumn(new[] { "", "Line", "Branch", "Method" }); - coverageTable.AddRow("Total", $"{InvariantFormat(totalLinePercent)}%", $"{InvariantFormat(totalBranchPercent)}%", $"{InvariantFormat(totalMethodPercent)}%"); - coverageTable.AddRow("Average", $"{InvariantFormat(averageLinePercent)}%", $"{InvariantFormat(averageBranchPercent)}%", $"{InvariantFormat(averageMethodPercent)}%"); - - logger.LogInformation(coverageTable.ToStringAlternative()); - if (process.ExitCode > 0) - { - exitCode += (int)CommandExitCodes.TestFailed; - } - - ThresholdTypeFlags thresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, dThresholdStat); - if (thresholdTypeFlags != ThresholdTypeFlags.None) - { - exitCode += (int)CommandExitCodes.CoverageBelowThreshold; - var exceptionMessageBuilder = new StringBuilder(); - if ((thresholdTypeFlags & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine($"The {dThresholdStat.ToString().ToLower()} line coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Line]}"); - } - - if ((thresholdTypeFlags & ThresholdTypeFlags.Branch) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine($"The {dThresholdStat.ToString().ToLower()} branch coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Branch]}"); - } - - if ((thresholdTypeFlags & ThresholdTypeFlags.Method) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine($"The {dThresholdStat.ToString().ToLower()} method coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Method]}"); - } - throw new Exception(exceptionMessageBuilder.ToString()); - } - - return exitCode; - }); - - try - { - return app.Execute(args); - } - catch (CommandParsingException ex) - { - logger.LogError(ex.Message); - app.ShowHelp(); - return (int)CommandExitCodes.CommandParsingException; - } - catch (Win32Exception we) when (we.Source == "System.Diagnostics.Process") + IncludeFilters = includeFilters, + IncludeDirectories = includeDirectories, + ExcludeFilters = excludeFilters, + ExcludedSourceFiles = excludedSourceFiles, + ExcludeAttributes = excludeAttributes, + IncludeTestAssembly = includeTestAssembly, + SingleHit = singleHit, + MergeWith = mergeWith, + UseSourceLink = useSourceLink, + SkipAutoProps = skipAutoProp, + DoesNotReturnAttributes = doesNotReturnAttributes, + ExcludeAssembliesWithoutSources = excludeAssembliesWithoutSources + }; + ISourceRootTranslator sourceRootTranslator = serviceProvider.GetRequiredService(); + + Coverage coverage = new(moduleOrAppDirectory, + parameters, + logger, + serviceProvider.GetRequiredService(), + fileSystem, + sourceRootTranslator, + serviceProvider.GetRequiredService()); + coverage.PrepareModules(); + + Process process = new(); + process.StartInfo.FileName = target; + process.StartInfo.Arguments = targs ?? string.Empty; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.RedirectStandardError = true; + process.OutputDataReceived += (sender, eventArgs) => + { + if (!string.IsNullOrEmpty(eventArgs.Data)) + logger.LogInformation(eventArgs.Data, important: true); + }; + + process.ErrorDataReceived += (sender, eventArgs) => + { + if (!string.IsNullOrEmpty(eventArgs.Data)) + logger.LogError(eventArgs.Data); + }; + + process.Start(); + + process.BeginErrorReadLine(); + process.BeginOutputReadLine(); + + process.WaitForExit(); + + string dOutput = output != null ? output : Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar.ToString(); + + logger.LogInformation("\nCalculating coverage result..."); + + CoverageResult result = coverage.GetCoverageResult(); + + string directory = Path.GetDirectoryName(dOutput); + if (directory == string.Empty) + { + directory = Directory.GetCurrentDirectory(); + } + else if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + foreach (string format in formats) + { + IReporter reporter = new ReporterFactory(format).CreateReporter(); + if (reporter == null) + { + throw new Exception($"Specified output format '{format}' is not supported"); + } + + if (reporter.OutputType == ReporterOutputType.Console) + { + // Output to console + logger.LogInformation(" Outputting results to console", important: true); + logger.LogInformation(reporter.Report(result, sourceRootTranslator), important: true); + } + else + { + // Output to file + string filename = Path.GetFileName(dOutput); + filename = (filename == string.Empty) ? $"coverage.{reporter.Extension}" : filename; + filename = Path.HasExtension(filename) ? filename : $"{filename}.{reporter.Extension}"; + + string report = Path.Combine(directory, filename); + logger.LogInformation($" Generating report '{report}'", important: true); + fileSystem.WriteAllText(report, reporter.Report(result, sourceRootTranslator)); + } + } + + var thresholdTypeFlagQueue = new Queue(); + + foreach (string thresholdType in thresholdTypes) + { + if (thresholdType.Equals("line", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Line); + } + else if (thresholdType.Equals("branch", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Branch); + } + else if (thresholdType.Equals("method", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Method); + } + } + + var thresholdTypeFlagValues = new Dictionary(); + if (!string.IsNullOrEmpty(threshold) && threshold.Contains(',')) + { + IEnumerable thresholdValues = threshold.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()); + if (thresholdValues.Count() != thresholdTypeFlagQueue.Count) + { + throw new Exception($"Threshold type flag count ({thresholdTypeFlagQueue.Count}) and values count ({thresholdValues.Count()}) doesn't match"); + } + + foreach (string thresholdValue in thresholdValues) + { + if (double.TryParse(thresholdValue, out double value)) { - logger.LogError($"Start process '{target.Value()}' failed with '{we.Message}'"); - return exitCode > 0 ? exitCode : (int)CommandExitCodes.Exception; + thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = value; } - catch (Exception ex) + else { - logger.LogError(ex.Message); - return exitCode > 0 ? exitCode : (int)CommandExitCodes.Exception; + throw new Exception($"Invalid threshold value must be numeric"); } + } } + else + { + double thresholdValue = threshold != null ? double.Parse(threshold) : 0; - static string GetAssemblyVersion() => typeof(Program).Assembly.GetName().Version.ToString(); + while (thresholdTypeFlagQueue.Any()) + { + thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = thresholdValue; + } + } + + var coverageTable = new ConsoleTable("Module", "Line", "Branch", "Method"); + var summary = new CoverageSummary(); + + CoverageDetails linePercentCalculation = summary.CalculateLineCoverage(result.Modules); + CoverageDetails branchPercentCalculation = summary.CalculateBranchCoverage(result.Modules); + CoverageDetails methodPercentCalculation = summary.CalculateMethodCoverage(result.Modules); + + double totalLinePercent = linePercentCalculation.Percent; + double totalBranchPercent = branchPercentCalculation.Percent; + double totalMethodPercent = methodPercentCalculation.Percent; + + double averageLinePercent = linePercentCalculation.AverageModulePercent; + double averageBranchPercent = branchPercentCalculation.AverageModulePercent; + double averageMethodPercent = methodPercentCalculation.AverageModulePercent; + + foreach (KeyValuePair _module in result.Modules) + { + double linePercent = summary.CalculateLineCoverage(_module.Value).Percent; + double branchPercent = summary.CalculateBranchCoverage(_module.Value).Percent; + double methodPercent = summary.CalculateMethodCoverage(_module.Value).Percent; + + coverageTable.AddRow(Path.GetFileNameWithoutExtension(_module.Key), $"{InvariantFormat(linePercent)}%", $"{InvariantFormat(branchPercent)}%", $"{InvariantFormat(methodPercent)}%"); + } + + logger.LogInformation(coverageTable.ToStringAlternative()); + + coverageTable.Columns.Clear(); + coverageTable.Rows.Clear(); + + coverageTable.AddColumn(new[] { "", "Line", "Branch", "Method" }); + coverageTable.AddRow("Total", $"{InvariantFormat(totalLinePercent)}%", $"{InvariantFormat(totalBranchPercent)}%", $"{InvariantFormat(totalMethodPercent)}%"); + coverageTable.AddRow("Average", $"{InvariantFormat(averageLinePercent)}%", $"{InvariantFormat(averageBranchPercent)}%", $"{InvariantFormat(averageMethodPercent)}%"); + + logger.LogInformation(coverageTable.ToStringAlternative()); + if (process.ExitCode > 0) + { + exitCode += (int)CommandExitCodes.TestFailed; + } + + ThresholdTypeFlags thresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStat); + if (thresholdTypeFlags != ThresholdTypeFlags.None) + { + exitCode += (int)CommandExitCodes.CoverageBelowThreshold; + var exceptionMessageBuilder = new StringBuilder(); + if ((thresholdTypeFlags & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine($"The {thresholdStat.ToString().ToLower()} line coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Line]}"); + } + + if ((thresholdTypeFlags & ThresholdTypeFlags.Branch) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine($"The {thresholdStat.ToString().ToLower()} branch coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Branch]}"); + } + + if ((thresholdTypeFlags & ThresholdTypeFlags.Method) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine($"The {thresholdStat.ToString().ToLower()} method coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Method]}"); + } + throw new Exception(exceptionMessageBuilder.ToString()); + } + + return Task.FromResult(exitCode); + + } + + catch (Win32Exception we) when (we.Source == "System.Diagnostics.Process") + { + logger.LogError($"Start process '{target}' failed with '{we.Message}'"); + return Task.FromResult(exitCode > 0 ? exitCode : (int)CommandExitCodes.Exception); + } + catch (Exception ex) + { + logger.LogError(ex.Message); + return Task.FromResult(exitCode > 0 ? exitCode : (int)CommandExitCodes.Exception); + } - static string InvariantFormat(double value) => value.ToString(CultureInfo.InvariantCulture); } + + static string InvariantFormat(double value) => value.ToString(CultureInfo.InvariantCulture); + } } diff --git a/src/coverlet.console/Properties/AssemblyInfo.cs b/src/coverlet.console/Properties/AssemblyInfo.cs index 59db2a82f..aff16fa56 100644 --- a/src/coverlet.console/Properties/AssemblyInfo.cs +++ b/src/coverlet.console/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. -[assembly: System.Reflection.AssemblyKeyFileAttribute("coverlet.console.snk")] \ No newline at end of file +[assembly: System.Reflection.AssemblyKeyFileAttribute("coverlet.console.snk")] diff --git a/src/coverlet.console/coverlet.console.csproj b/src/coverlet.console/coverlet.console.csproj index b44e05dff..d4d110fa8 100644 --- a/src/coverlet.console/coverlet.console.csproj +++ b/src/coverlet.console/coverlet.console.csproj @@ -14,15 +14,17 @@ tonerdo Coverlet is a cross platform code coverage tool for .NET, with support for line, branch and method coverage. coverage;testing;unit-test;lcov;opencover;quality + GlobalTool.md + https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md https://raw.githubusercontent.com/tonerdo/coverlet/master/_assets/coverlet-icon.svg?sanitize=true coverlet-icon.png https://github.com/coverlet-coverage/coverlet MIT git - + - + @@ -31,6 +33,9 @@ + + true + diff --git a/src/coverlet.core/Abstractions/IAssemblyAdapter.cs b/src/coverlet.core/Abstractions/IAssemblyAdapter.cs index 48b23084b..a020bced5 100644 --- a/src/coverlet.core/Abstractions/IAssemblyAdapter.cs +++ b/src/coverlet.core/Abstractions/IAssemblyAdapter.cs @@ -3,8 +3,8 @@ namespace Coverlet.Core.Abstractions { - internal interface IAssemblyAdapter - { - string GetAssemblyName(string assemblyPath); - } + internal interface IAssemblyAdapter + { + string GetAssemblyName(string assemblyPath); + } } diff --git a/src/coverlet.core/Abstractions/ICecilSymbolHelper.cs b/src/coverlet.core/Abstractions/ICecilSymbolHelper.cs index 06cdde3d1..b22463b5d 100644 --- a/src/coverlet.core/Abstractions/ICecilSymbolHelper.cs +++ b/src/coverlet.core/Abstractions/ICecilSymbolHelper.cs @@ -8,10 +8,10 @@ namespace Coverlet.Core.Abstractions { - internal interface ICecilSymbolHelper - { - IReadOnlyList GetBranchPoints(MethodDefinition methodDefinition); - bool SkipNotCoverableInstruction(MethodDefinition methodDefinition, Instruction instruction); - bool SkipInlineAssignedAutoProperty(bool skipAutoProps, MethodDefinition methodDefinition, Instruction instruction); - } + internal interface ICecilSymbolHelper + { + IReadOnlyList GetBranchPoints(MethodDefinition methodDefinition); + bool SkipNotCoverableInstruction(MethodDefinition methodDefinition, Instruction instruction); + bool SkipInlineAssignedAutoProperty(bool skipAutoProps, MethodDefinition methodDefinition, Instruction instruction); + } } diff --git a/src/coverlet.core/Abstractions/IConsole.cs b/src/coverlet.core/Abstractions/IConsole.cs index 72991cac5..2724ccf8b 100644 --- a/src/coverlet.core/Abstractions/IConsole.cs +++ b/src/coverlet.core/Abstractions/IConsole.cs @@ -3,8 +3,8 @@ namespace Coverlet.Core.Abstractions { - internal interface IConsole - { - public void WriteLine(string value); - } + internal interface IConsole + { + public void WriteLine(string value); + } } diff --git a/src/coverlet.core/Abstractions/IFileSystem.cs b/src/coverlet.core/Abstractions/IFileSystem.cs index cb710c758..6f0978467 100644 --- a/src/coverlet.core/Abstractions/IFileSystem.cs +++ b/src/coverlet.core/Abstractions/IFileSystem.cs @@ -5,24 +5,24 @@ namespace Coverlet.Core.Abstractions { - internal interface IFileSystem - { - bool Exists(string path); + internal interface IFileSystem + { + bool Exists(string path); - void WriteAllText(string path, string contents); + void WriteAllText(string path, string contents); - string ReadAllText(string path); + string ReadAllText(string path); - Stream OpenRead(string path); + Stream OpenRead(string path); - void Copy(string sourceFileName, string destFileName, bool overwrite); + void Copy(string sourceFileName, string destFileName, bool overwrite); - void Delete(string path); + void Delete(string path); - Stream NewFileStream(string path, FileMode mode); + Stream NewFileStream(string path, FileMode mode); - Stream NewFileStream(string path, FileMode mode, FileAccess access); + Stream NewFileStream(string path, FileMode mode, FileAccess access); - string[] ReadAllLines(string path); - } + string[] ReadAllLines(string path); + } } diff --git a/src/coverlet.core/Abstractions/IInstrumentationHelper.cs b/src/coverlet.core/Abstractions/IInstrumentationHelper.cs index 65af40011..d363fab63 100644 --- a/src/coverlet.core/Abstractions/IInstrumentationHelper.cs +++ b/src/coverlet.core/Abstractions/IInstrumentationHelper.cs @@ -1,25 +1,25 @@ // Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System.Collections.Generic; using Coverlet.Core.Enums; namespace Coverlet.Core.Abstractions { - internal interface IInstrumentationHelper - { - void BackupOriginalModule(string module, string identifier); - void DeleteHitsFile(string path); - string[] GetCoverableModules(string module, string[] directories, bool includeTestAssembly); - bool HasPdb(string module, out bool embedded); - bool IsModuleExcluded(string module, string[] excludeFilters); - bool IsModuleIncluded(string module, string[] includeFilters); - bool IsValidFilterExpression(string filter); - bool IsTypeExcluded(string module, string type, string[] excludeFilters); - bool IsTypeIncluded(string module, string type, string[] includeFilters); - void RestoreOriginalModule(string module, string identifier); - bool EmbeddedPortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources); - bool PortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources); - bool IsLocalMethod(string method); - void SetLogger(ILogger logger); - } + internal interface IInstrumentationHelper + { + void BackupOriginalModule(string module, string identifier); + void DeleteHitsFile(string path); + string[] GetCoverableModules(string module, string[] directories, bool includeTestAssembly); + bool HasPdb(string module, out bool embedded); + IEnumerable SelectModules(IEnumerable modules, string[] includeFilters, string[] excludeFilters); + bool IsValidFilterExpression(string filter); + bool IsTypeExcluded(string module, string type, string[] excludeFilters); + bool IsTypeIncluded(string module, string type, string[] includeFilters); + void RestoreOriginalModule(string module, string identifier); + bool EmbeddedPortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources); + bool PortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources); + bool IsLocalMethod(string method); + void SetLogger(ILogger logger); + } } diff --git a/src/coverlet.core/Abstractions/ILogger.cs b/src/coverlet.core/Abstractions/ILogger.cs index c3e6ef15e..c03831531 100644 --- a/src/coverlet.core/Abstractions/ILogger.cs +++ b/src/coverlet.core/Abstractions/ILogger.cs @@ -1,16 +1,16 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; namespace Coverlet.Core.Abstractions { - internal interface ILogger - { - void LogVerbose(string message); - void LogInformation(string message, bool important = false); - void LogWarning(string message); - void LogError(string message); - void LogError(Exception exception); - } -} \ No newline at end of file + internal interface ILogger + { + void LogVerbose(string message); + void LogInformation(string message, bool important = false); + void LogWarning(string message); + void LogError(string message); + void LogError(Exception exception); + } +} diff --git a/src/coverlet.core/Abstractions/IProcessExitHandler.cs b/src/coverlet.core/Abstractions/IProcessExitHandler.cs index 635015946..c0f9d524c 100644 --- a/src/coverlet.core/Abstractions/IProcessExitHandler.cs +++ b/src/coverlet.core/Abstractions/IProcessExitHandler.cs @@ -5,8 +5,8 @@ namespace Coverlet.Core.Abstractions { - internal interface IProcessExitHandler - { - void Add(EventHandler handler); - } + internal interface IProcessExitHandler + { + void Add(EventHandler handler); + } } diff --git a/src/coverlet.core/Abstractions/IReporter.cs b/src/coverlet.core/Abstractions/IReporter.cs index 9e497d62a..82441aa37 100644 --- a/src/coverlet.core/Abstractions/IReporter.cs +++ b/src/coverlet.core/Abstractions/IReporter.cs @@ -1,19 +1,19 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace Coverlet.Core.Abstractions { - internal interface IReporter - { - ReporterOutputType OutputType { get; } - string Format { get; } - string Extension { get; } - string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator); - } + internal interface IReporter + { + ReporterOutputType OutputType { get; } + string Format { get; } + string Extension { get; } + string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator); + } - internal enum ReporterOutputType - { - File, - Console, - } -} \ No newline at end of file + internal enum ReporterOutputType + { + File, + Console, + } +} diff --git a/src/coverlet.core/Abstractions/IRetryHelper.cs b/src/coverlet.core/Abstractions/IRetryHelper.cs index 88a1b29d5..85f8b53bb 100644 --- a/src/coverlet.core/Abstractions/IRetryHelper.cs +++ b/src/coverlet.core/Abstractions/IRetryHelper.cs @@ -5,9 +5,9 @@ namespace Coverlet.Core.Abstractions { - internal interface IRetryHelper - { - void Retry(Action action, Func backoffStrategy, int maxAttemptCount = 3); - T Do(Func action, Func backoffStrategy, int maxAttemptCount = 3); - } + internal interface IRetryHelper + { + void Retry(Action action, Func backoffStrategy, int maxAttemptCount = 3); + T Do(Func action, Func backoffStrategy, int maxAttemptCount = 3); + } } diff --git a/src/coverlet.core/Abstractions/ISourceRootTranslator.cs b/src/coverlet.core/Abstractions/ISourceRootTranslator.cs index 4af6cfddf..2bbef7a87 100644 --- a/src/coverlet.core/Abstractions/ISourceRootTranslator.cs +++ b/src/coverlet.core/Abstractions/ISourceRootTranslator.cs @@ -6,11 +6,11 @@ namespace Coverlet.Core.Abstractions { - internal interface ISourceRootTranslator - { - bool AddMappingInCache(string originalFileName, string targetFileName); - string ResolveFilePath(string originalFileName); - string ResolveDeterministicPath(string originalFileName); - IReadOnlyList ResolvePathRoot(string pathRoot); - } + internal interface ISourceRootTranslator + { + bool AddMappingInCache(string originalFileName, string targetFileName); + string ResolveFilePath(string originalFileName); + string ResolveDeterministicPath(string originalFileName); + IReadOnlyList ResolvePathRoot(string pathRoot); + } } diff --git a/src/coverlet.core/Attributes/DoesNotReturnAttribute.cs b/src/coverlet.core/Attributes/DoesNotReturnAttribute.cs index cebe198f1..074d0a59f 100644 --- a/src/coverlet.core/Attributes/DoesNotReturnAttribute.cs +++ b/src/coverlet.core/Attributes/DoesNotReturnAttribute.cs @@ -5,6 +5,6 @@ namespace Coverlet.Core.Attributes { - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class)] - internal class DoesNotReturnAttribute : Attribute { } + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class)] + internal class DoesNotReturnAttribute : Attribute { } } diff --git a/src/coverlet.core/Attributes/ExcludeFromCoverage.cs b/src/coverlet.core/Attributes/ExcludeFromCoverage.cs index 71efcb7bc..1436c2175 100644 --- a/src/coverlet.core/Attributes/ExcludeFromCoverage.cs +++ b/src/coverlet.core/Attributes/ExcludeFromCoverage.cs @@ -1,10 +1,10 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; namespace Coverlet.Core.Attributes { - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class)] - internal sealed class ExcludeFromCoverageAttribute : Attribute { } -} \ No newline at end of file + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Class)] + internal sealed class ExcludeFromCoverageAttribute : Attribute { } +} diff --git a/src/coverlet.core/Coverage.cs b/src/coverlet.core/Coverage.cs index 8a3def37b..e3957cb72 100644 --- a/src/coverlet.core/Coverage.cs +++ b/src/coverlet.core/Coverage.cs @@ -6,521 +6,531 @@ using System.IO; using System.Linq; using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Coverlet.Core.Abstractions; using Coverlet.Core.Helpers; using Coverlet.Core.Instrumentation; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Coverlet.Core { - [DataContract] - internal class CoverageParameters + [DataContract] + internal class CoverageParameters + { + [DataMember] + public string Module { get; set; } + [DataMember] + public string[] IncludeFilters { get; set; } + [DataMember] + public string[] IncludeDirectories { get; set; } + [DataMember] + public string[] ExcludeFilters { get; set; } + [DataMember] + public string[] ExcludedSourceFiles { get; set; } + [DataMember] + public string[] ExcludeAttributes { get; set; } + [DataMember] + public bool IncludeTestAssembly { get; set; } + [DataMember] + public bool SingleHit { get; set; } + [DataMember] + public string MergeWith { get; set; } + [DataMember] + public bool UseSourceLink { get; set; } + [DataMember] + public string[] DoesNotReturnAttributes { get; set; } + [DataMember] + public bool SkipAutoProps { get; set; } + [DataMember] + public bool DeterministicReport { get; set; } + [DataMember] + public string ExcludeAssembliesWithoutSources { get; set; } + } + + internal class Coverage + { + private readonly string _moduleOrAppDirectory; + private readonly ILogger _logger; + private readonly IInstrumentationHelper _instrumentationHelper; + private readonly IFileSystem _fileSystem; + private readonly ISourceRootTranslator _sourceRootTranslator; + private readonly ICecilSymbolHelper _cecilSymbolHelper; + private readonly List _results; + private readonly CoverageParameters _parameters; + + public string Identifier { get; } + + public Coverage(string moduleOrDirectory, + CoverageParameters parameters, + ILogger logger, + IInstrumentationHelper instrumentationHelper, + IFileSystem fileSystem, + ISourceRootTranslator sourceRootTranslator, + ICecilSymbolHelper cecilSymbolHelper) { - [DataMember] - public string Module { get; set; } - [DataMember] - public string[] IncludeFilters { get; set; } - [DataMember] - public string[] IncludeDirectories { get; set; } - [DataMember] - public string[] ExcludeFilters { get; set; } - [DataMember] - public string[] ExcludedSourceFiles { get; set; } - [DataMember] - public string[] ExcludeAttributes { get; set; } - [DataMember] - public bool IncludeTestAssembly { get; set; } - [DataMember] - public bool SingleHit { get; set; } - [DataMember] - public string MergeWith { get; set; } - [DataMember] - public bool UseSourceLink { get; set; } - [DataMember] - public string[] DoesNotReturnAttributes { get; set; } - [DataMember] - public bool SkipAutoProps { get; set; } - [DataMember] - public bool DeterministicReport { get; set; } - [DataMember] - public string ExcludeAssembliesWithoutSources { get; set; } + _moduleOrAppDirectory = moduleOrDirectory; + parameters.IncludeDirectories ??= Array.Empty(); + _logger = logger; + _instrumentationHelper = instrumentationHelper; + _parameters = parameters; + _fileSystem = fileSystem; + _sourceRootTranslator = sourceRootTranslator; + _cecilSymbolHelper = cecilSymbolHelper; + Identifier = Guid.NewGuid().ToString(); + _results = new List(); } - internal class Coverage + public Coverage(CoveragePrepareResult prepareResult, + ILogger logger, + IInstrumentationHelper instrumentationHelper, + IFileSystem fileSystem, + ISourceRootTranslator sourceRootTranslator) { - private readonly string _moduleOrAppDirectory; - private readonly ILogger _logger; - private readonly IInstrumentationHelper _instrumentationHelper; - private readonly IFileSystem _fileSystem; - private readonly ISourceRootTranslator _sourceRootTranslator; - private readonly ICecilSymbolHelper _cecilSymbolHelper; - private readonly List _results; - private readonly CoverageParameters _parameters; - - public string Identifier { get; } - - public Coverage(string moduleOrDirectory, - CoverageParameters parameters, - ILogger logger, - IInstrumentationHelper instrumentationHelper, - IFileSystem fileSystem, - ISourceRootTranslator sourceRootTranslator, - ICecilSymbolHelper cecilSymbolHelper) - { - _moduleOrAppDirectory = moduleOrDirectory; - parameters.IncludeDirectories ??= Array.Empty(); - _logger = logger; - _instrumentationHelper = instrumentationHelper; - _parameters = parameters; - _fileSystem = fileSystem; - _sourceRootTranslator = sourceRootTranslator; - _cecilSymbolHelper = cecilSymbolHelper; - Identifier = Guid.NewGuid().ToString(); - _results = new List(); - } - - public Coverage(CoveragePrepareResult prepareResult, - ILogger logger, - IInstrumentationHelper instrumentationHelper, - IFileSystem fileSystem, - ISourceRootTranslator sourceRootTranslator) - { - Identifier = prepareResult.Identifier; - _moduleOrAppDirectory = prepareResult.ModuleOrDirectory; - _parameters = prepareResult.Parameters; - _results = new List(prepareResult.Results); - _logger = logger; - _instrumentationHelper = instrumentationHelper; - _fileSystem = fileSystem; - _sourceRootTranslator = sourceRootTranslator; - } + Identifier = prepareResult.Identifier; + _moduleOrAppDirectory = prepareResult.ModuleOrDirectory; + _parameters = prepareResult.Parameters; + _results = new List(prepareResult.Results); + _logger = logger; + _instrumentationHelper = instrumentationHelper; + _fileSystem = fileSystem; + _sourceRootTranslator = sourceRootTranslator; + } - public CoveragePrepareResult PrepareModules() + public CoveragePrepareResult PrepareModules() + { + string[] modules = _instrumentationHelper.GetCoverableModules(_moduleOrAppDirectory, _parameters.IncludeDirectories, _parameters.IncludeTestAssembly); + + Array.ForEach(_parameters.ExcludeFilters ?? Array.Empty(), filter => _logger.LogVerbose($"Excluded module filter '{filter}'")); + Array.ForEach(_parameters.IncludeFilters ?? Array.Empty(), filter => _logger.LogVerbose($"Included module filter '{filter}'")); + Array.ForEach(_parameters.ExcludedSourceFiles ?? Array.Empty(), filter => _logger.LogVerbose($"Excluded source files filter '{FileSystem.EscapeFileName(filter)}'")); + + _parameters.ExcludeFilters = _parameters.ExcludeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray(); + _parameters.IncludeFilters = _parameters.IncludeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray(); + + IReadOnlyList validModules = _instrumentationHelper.SelectModules(modules, _parameters.IncludeFilters, _parameters.ExcludeFilters).ToList(); + foreach (string excludedModule in modules.Except(validModules)) + { + _logger.LogVerbose($"Excluded module: '{excludedModule}'"); + } + + foreach (string module in validModules) + { + var instrumenter = new Instrumenter(module, + Identifier, + _parameters, + _logger, + _instrumentationHelper, + _fileSystem, + _sourceRootTranslator, + _cecilSymbolHelper); + + if (instrumenter.CanInstrument()) { - string[] modules = _instrumentationHelper.GetCoverableModules(_moduleOrAppDirectory, _parameters.IncludeDirectories, _parameters.IncludeTestAssembly); + _instrumentationHelper.BackupOriginalModule(module, Identifier); - Array.ForEach(_parameters.ExcludeFilters ?? Array.Empty(), filter => _logger.LogVerbose($"Excluded module filter '{filter}'")); - Array.ForEach(_parameters.IncludeFilters ?? Array.Empty(), filter => _logger.LogVerbose($"Included module filter '{filter}'")); - Array.ForEach(_parameters.ExcludedSourceFiles ?? Array.Empty(), filter => _logger.LogVerbose($"Excluded source files filter '{FileSystem.EscapeFileName(filter)}'")); + // Guard code path and restore if instrumentation fails. + try + { + InstrumenterResult result = instrumenter.Instrument(); + if (!instrumenter.SkipModule) + { + _results.Add(result); + _logger.LogVerbose($"Instrumented module: '{module}'"); + } + } + catch (Exception ex) + { + _logger.LogWarning($"Unable to instrument module: {module}\n{ex}"); + _instrumentationHelper.RestoreOriginalModule(module, Identifier); + } + } + } + + return new CoveragePrepareResult() + { + Identifier = Identifier, + ModuleOrDirectory = _moduleOrAppDirectory, + Parameters = _parameters, + Results = _results.ToArray() + }; + } - _parameters.ExcludeFilters = _parameters.ExcludeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray(); - _parameters.IncludeFilters = _parameters.IncludeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray(); + public CoverageResult GetCoverageResult() + { + CalculateCoverage(); - foreach (string module in modules) + var modules = new Modules(); + foreach (InstrumenterResult result in _results) + { + var documents = new Documents(); + foreach (Document doc in result.Documents.Values) + { + // Construct Line Results + foreach (Line line in doc.Lines.Values) + { + if (documents.TryGetValue(doc.Path, out Classes classes)) { - if (_instrumentationHelper.IsModuleExcluded(module, _parameters.ExcludeFilters) || - !_instrumentationHelper.IsModuleIncluded(module, _parameters.IncludeFilters)) + if (classes.TryGetValue(line.Class, out Methods methods)) + { + if (methods.TryGetValue(line.Method, out Method method)) { - _logger.LogVerbose($"Excluded module: '{module}'"); - continue; + documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); } - - var instrumenter = new Instrumenter(module, - Identifier, - _parameters, - _logger, - _instrumentationHelper, - _fileSystem, - _sourceRootTranslator, - _cecilSymbolHelper); - - if (instrumenter.CanInstrument()) + else { - _instrumentationHelper.BackupOriginalModule(module, Identifier); - - // Guard code path and restore if instrumentation fails. - try - { - InstrumenterResult result = instrumenter.Instrument(); - if (!instrumenter.SkipModule) - { - _results.Add(result); - _logger.LogVerbose($"Instrumented module: '{module}'"); - } - } - catch (Exception ex) - { - _logger.LogWarning($"Unable to instrument module: {module}\n{ex}"); - _instrumentationHelper.RestoreOriginalModule(module, Identifier); - } + documents[doc.Path][line.Class].Add(line.Method, new Method()); + documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); } + } + else + { + documents[doc.Path].Add(line.Class, new Methods()); + documents[doc.Path][line.Class].Add(line.Method, new Method()); + documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); + } } - - return new CoveragePrepareResult() + else { - Identifier = Identifier, - ModuleOrDirectory = _moduleOrAppDirectory, - Parameters = _parameters, - Results = _results.ToArray() - }; - } - - public CoverageResult GetCoverageResult() - { - CalculateCoverage(); - - var modules = new Modules(); - foreach (InstrumenterResult result in _results) - { - var documents = new Documents(); - foreach (Document doc in result.Documents.Values) - { - // Construct Line Results - foreach (Line line in doc.Lines.Values) - { - if (documents.TryGetValue(doc.Path, out Classes classes)) - { - if (classes.TryGetValue(line.Class, out Methods methods)) - { - if (methods.TryGetValue(line.Method, out Method method)) - { - documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); - } - else - { - documents[doc.Path][line.Class].Add(line.Method, new Method()); - documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); - } - } - else - { - documents[doc.Path].Add(line.Class, new Methods()); - documents[doc.Path][line.Class].Add(line.Method, new Method()); - documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); - } - } - else - { - documents.Add(doc.Path, new Classes()); - documents[doc.Path].Add(line.Class, new Methods()); - documents[doc.Path][line.Class].Add(line.Method, new Method()); - documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); - } - } - - // Construct Branch Results - foreach (Branch branch in doc.Branches.Values) - { - if (documents.TryGetValue(doc.Path, out Classes classes)) - { - if (classes.TryGetValue(branch.Class, out Methods methods)) - { - if (methods.TryGetValue(branch.Method, out Method method)) - { - method.Branches.Add(new BranchInfo - { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } - ); - } - else - { - documents[doc.Path][branch.Class].Add(branch.Method, new Method()); - documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo - { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } - ); - } - } - else - { - documents[doc.Path].Add(branch.Class, new Methods()); - documents[doc.Path][branch.Class].Add(branch.Method, new Method()); - documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo - { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } - ); - } - } - else - { - documents.Add(doc.Path, new Classes()); - documents[doc.Path].Add(branch.Class, new Methods()); - documents[doc.Path][branch.Class].Add(branch.Method, new Method()); - documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo - { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } - ); - } - } - } - - modules.Add(Path.GetFileName(result.ModulePath), documents); - _instrumentationHelper.RestoreOriginalModule(result.ModulePath, Identifier); + documents.Add(doc.Path, new Classes()); + documents[doc.Path].Add(line.Class, new Methods()); + documents[doc.Path][line.Class].Add(line.Method, new Method()); + documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits); } + } - // In case of anonymous delegate compiler generate a custom class and passes it as type.method delegate. - // If in delegate method we've a branches we need to move these to "actual" class/method that use it. - // We search "method" with same "Line" of closure class method and add missing branches to it, - // in this way we correctly report missing branch inside compiled generated anonymous delegate. - List compileGeneratedClassToRemove = null; - foreach (KeyValuePair module in modules) + // Construct Branch Results + foreach (Branch branch in doc.Branches.Values) + { + if (documents.TryGetValue(doc.Path, out Classes classes)) { - foreach (KeyValuePair document in module.Value) + if (classes.TryGetValue(branch.Class, out Methods methods)) + { + if (methods.TryGetValue(branch.Method, out Method method)) { - foreach (KeyValuePair @class in document.Value) - { - // We fix only lamda generated class - // https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNameKind.cs#L18 - if (!@class.Key.Contains("<>c")) - { - continue; - } - - foreach (KeyValuePair method in @class.Value) - { - foreach (BranchInfo branch in method.Value.Branches) - { - if (BranchInCompilerGeneratedClass(method.Key)) - { - Method actualMethod = GetMethodWithSameLineInSameDocument(document.Value, @class.Key, branch.Line); - - if (actualMethod is null) - { - continue; - } - - actualMethod.Branches.Add(branch); - - if (compileGeneratedClassToRemove is null) - { - compileGeneratedClassToRemove = new List(); - } - - if (!compileGeneratedClassToRemove.Contains(@class.Key)) - { - compileGeneratedClassToRemove.Add(@class.Key); - } - } - } - } - } + method.Branches.Add(new BranchInfo + { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } + ); } - } - - // After method/branches analysis of compiled generated class we can remove noise from reports - if (compileGeneratedClassToRemove is not null) - { - foreach (KeyValuePair module in modules) + else { - foreach (KeyValuePair document in module.Value) - { - foreach (string classToRemove in compileGeneratedClassToRemove) - { - document.Value.Remove(classToRemove); - } - } + documents[doc.Path][branch.Class].Add(branch.Method, new Method()); + documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo + { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } + ); } + } + else + { + documents[doc.Path].Add(branch.Class, new Methods()); + documents[doc.Path][branch.Class].Add(branch.Method, new Method()); + documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo + { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } + ); + } } - - var coverageResult = new CoverageResult { Identifier = Identifier, Modules = modules, InstrumentedResults = _results, Parameters = _parameters }; - - if (!string.IsNullOrEmpty(_parameters.MergeWith) && !string.IsNullOrWhiteSpace(_parameters.MergeWith) && _fileSystem.Exists(_parameters.MergeWith)) + else { - string json = _fileSystem.ReadAllText(_parameters.MergeWith); - coverageResult.Merge(JsonConvert.DeserializeObject(json)); + documents.Add(doc.Path, new Classes()); + documents[doc.Path].Add(branch.Class, new Methods()); + documents[doc.Path][branch.Class].Add(branch.Method, new Method()); + documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo + { Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal } + ); } - - return coverageResult; + } } - private bool BranchInCompilerGeneratedClass(string methodName) + modules.Add(Path.GetFileName(result.ModulePath), documents); + _instrumentationHelper.RestoreOriginalModule(result.ModulePath, Identifier); + } + + // In case of anonymous delegate compiler generate a custom class and passes it as type.method delegate. + // If in delegate method we've a branches we need to move these to "actual" class/method that use it. + // We search "method" with same "Line" of closure class method and add missing branches to it, + // in this way we correctly report missing branch inside compiled generated anonymous delegate. + List compileGeneratedClassToRemove = null; + foreach (KeyValuePair module in modules) + { + foreach (KeyValuePair document in module.Value) { - foreach (InstrumenterResult instrumentedResult in _results) + foreach (KeyValuePair @class in document.Value) + { + // We fix only lamda generated class + // https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNameKind.cs#L18 + if (!@class.Key.Contains("<>c")) { - if (instrumentedResult.BranchesInCompiledGeneratedClass.Contains(methodName)) - { - return true; - } + continue; } - return false; - } - private static Method GetMethodWithSameLineInSameDocument(Classes documentClasses, string compilerGeneratedClassName, int branchLine) - { - foreach (KeyValuePair @class in documentClasses) + foreach (KeyValuePair method in @class.Value) { - if (@class.Key == compilerGeneratedClassName) + foreach (BranchInfo branch in method.Value.Branches) + { + if (BranchInCompilerGeneratedClass(method.Key)) { + Method actualMethod = GetMethodWithSameLineInSameDocument(document.Value, @class.Key, branch.Line); + + if (actualMethod is null) + { continue; - } + } - foreach (KeyValuePair method in @class.Value) - { - foreach (KeyValuePair line in method.Value.Lines) - { - if (line.Key == branchLine) - { - return method.Value; - } - } + actualMethod.Branches.Add(branch); + + if (compileGeneratedClassToRemove is null) + { + compileGeneratedClassToRemove = new List(); + } + + if (!compileGeneratedClassToRemove.Contains(@class.Key)) + { + compileGeneratedClassToRemove.Add(@class.Key); + } } + } } - return null; + } } + } - private void CalculateCoverage() + // After method/branches analysis of compiled generated class we can remove noise from reports + if (compileGeneratedClassToRemove is not null) + { + foreach (KeyValuePair module in modules) { - foreach (InstrumenterResult result in _results) + foreach (KeyValuePair document in module.Value) + { + foreach (string classToRemove in compileGeneratedClassToRemove) { - if (!_fileSystem.Exists(result.HitsFilePath)) - { - // Hits file could be missed mainly for two reason - // 1) Issue during module Unload() - // 2) Instrumented module is never loaded or used so we don't have any hit to register and - // module tracker is never used - _logger.LogVerbose($"Hits file:'{result.HitsFilePath}' not found for module: '{result.Module}'"); - continue; - } + document.Value.Remove(classToRemove); + } + } + } + } - var documents = result.Documents.Values.ToList(); - if (_parameters.UseSourceLink && result.SourceLink != null) - { - JToken jObject = JObject.Parse(result.SourceLink)["documents"]; - Dictionary sourceLinkDocuments = JsonConvert.DeserializeObject>(jObject.ToString()); - foreach (Document document in documents) - { - document.Path = GetSourceLinkUrl(sourceLinkDocuments, document.Path); - } - } + var coverageResult = new CoverageResult { Identifier = Identifier, Modules = modules, InstrumentedResults = _results, Parameters = _parameters }; - // Calculate lines to skip for every hits start/end candidate - // Nested ranges win on outermost one - foreach (HitCandidate hitCandidate in result.HitCandidates) - { - if (hitCandidate.isBranch || hitCandidate.end == hitCandidate.start) - { - continue; - } - - foreach (HitCandidate hitCandidateToCompare in result.HitCandidates.Where(x => x.docIndex.Equals(hitCandidate.docIndex))) - { - if (hitCandidate != hitCandidateToCompare && !hitCandidateToCompare.isBranch) - { - if (hitCandidateToCompare.start > hitCandidate.start && - hitCandidateToCompare.end < hitCandidate.end) - { - for (int i = hitCandidateToCompare.start; - i <= (hitCandidateToCompare.end == 0 ? hitCandidateToCompare.start : hitCandidateToCompare.end); - i++) - { - (hitCandidate.AccountedByNestedInstrumentation ??= new HashSet()).Add(i); - } - } - } - } - } + if (!string.IsNullOrEmpty(_parameters.MergeWith) && !string.IsNullOrWhiteSpace(_parameters.MergeWith)) + { + if (_fileSystem.Exists(_parameters.MergeWith)) + { + _logger.LogInformation($"MergeWith: '{_parameters.MergeWith}'."); + string json = _fileSystem.ReadAllText(_parameters.MergeWith); + coverageResult.Merge(JsonConvert.DeserializeObject(json)); + } else + { + _logger.LogInformation($"MergeWith: file '{_parameters.MergeWith}' does not exist."); + } + } - var documentsList = result.Documents.Values.ToList(); - using (Stream fs = _fileSystem.NewFileStream(result.HitsFilePath, FileMode.Open, FileAccess.Read)) - using (var br = new BinaryReader(fs)) - { - int hitCandidatesCount = br.ReadInt32(); - - // TODO: hitCandidatesCount should be verified against result.HitCandidates.Count - - for (int i = 0; i < hitCandidatesCount; ++i) - { - HitCandidate hitLocation = result.HitCandidates[i]; - Document document = documentsList[hitLocation.docIndex]; - int hits = br.ReadInt32(); - - if (hits == 0) - continue; - - hits = hits < 0 ? int.MaxValue : hits; - - if (hitLocation.isBranch) - { - Branch branch = document.Branches[new BranchKey(hitLocation.start, hitLocation.end)]; - branch.Hits += hits; - - if (branch.Hits < 0) - branch.Hits = int.MaxValue; - } - else - { - for (int j = hitLocation.start; j <= hitLocation.end; j++) - { - if (hitLocation.AccountedByNestedInstrumentation?.Contains(j) == true) - { - continue; - } - - Line line = document.Lines[j]; - line.Hits += hits; - - if (line.Hits < 0) - line.Hits = int.MaxValue; - } - } - } - } + return coverageResult; + } - try - { - _instrumentationHelper.DeleteHitsFile(result.HitsFilePath); - _logger.LogVerbose($"Hit file '{result.HitsFilePath}' deleted"); - } - catch (Exception ex) - { - _logger.LogWarning($"Unable to remove hit file: {result.HitsFilePath} because : {ex.Message}"); - } - } + private bool BranchInCompilerGeneratedClass(string methodName) + { + foreach (InstrumenterResult instrumentedResult in _results) + { + if (instrumentedResult.BranchesInCompiledGeneratedClass.Contains(methodName)) + { + return true; } + } + return false; + } - private string GetSourceLinkUrl(Dictionary sourceLinkDocuments, string document) + private static Method GetMethodWithSameLineInSameDocument(Classes documentClasses, string compilerGeneratedClassName, int branchLine) + { + foreach (KeyValuePair @class in documentClasses) + { + if (@class.Key == compilerGeneratedClassName) + { + continue; + } + + foreach (KeyValuePair method in @class.Value) { - if (sourceLinkDocuments.TryGetValue(document, out string url)) + foreach (KeyValuePair line in method.Value.Lines) + { + if (line.Key == branchLine) { - return url; + return method.Value; } + } + } + } + return null; + } - string keyWithBestMatch = string.Empty; - string relativePathOfBestMatch = string.Empty; + private void CalculateCoverage() + { + foreach (InstrumenterResult result in _results) + { + var documents = result.Documents.Values.ToList(); + if (_parameters.UseSourceLink && result.SourceLink != null) + { + JToken jObject = JObject.Parse(result.SourceLink)["documents"]; + Dictionary sourceLinkDocuments = JsonConvert.DeserializeObject>(jObject.ToString()); + foreach (Document document in documents) + { + document.Path = GetSourceLinkUrl(sourceLinkDocuments, document.Path); + } + } - foreach (KeyValuePair sourceLinkDocument in sourceLinkDocuments) - { - string key = sourceLinkDocument.Key; - if (Path.GetFileName(key) != "*") continue; + if (!_fileSystem.Exists(result.HitsFilePath)) + { + // Hits file could be missed mainly for two reason + // 1) Issue during module Unload() + // 2) Instrumented module is never loaded or used so we don't have any hit to register and + // module tracker is never used + _logger.LogVerbose($"Hits file:'{result.HitsFilePath}' not found for module: '{result.Module}'"); + continue; + } - IReadOnlyList rootMapping = _sourceRootTranslator.ResolvePathRoot(key.Substring(0, key.Length - 1)); - foreach (string keyMapping in rootMapping is null ? new List() { key } : new List(rootMapping.Select(m => m.OriginalPath))) + // Calculate lines to skip for every hits start/end candidate + // Nested ranges win on outermost one + foreach (HitCandidate hitCandidate in result.HitCandidates) + { + if (hitCandidate.isBranch || hitCandidate.end == hitCandidate.start) + { + continue; + } + + foreach (HitCandidate hitCandidateToCompare in result.HitCandidates.Where(x => x.docIndex.Equals(hitCandidate.docIndex))) + { + if (hitCandidate != hitCandidateToCompare && !hitCandidateToCompare.isBranch) + { + if (hitCandidateToCompare.start > hitCandidate.start && + hitCandidateToCompare.end < hitCandidate.end) + { + for (int i = hitCandidateToCompare.start; + i <= (hitCandidateToCompare.end == 0 ? hitCandidateToCompare.start : hitCandidateToCompare.end); + i++) { - string directoryDocument = Path.GetDirectoryName(document); - string sourceLinkRoot = Path.GetDirectoryName(keyMapping); - string relativePath = ""; - - // if document is on repo root we skip relative path calculation - if (directoryDocument != sourceLinkRoot) - { - if (!directoryDocument.StartsWith(sourceLinkRoot + Path.DirectorySeparatorChar)) - continue; - - relativePath = directoryDocument.Substring(sourceLinkRoot.Length + 1); - } - - if (relativePathOfBestMatch.Length == 0) - { - keyWithBestMatch = sourceLinkDocument.Key; - relativePathOfBestMatch = relativePath; - } - - if (relativePath.Length < relativePathOfBestMatch.Length) - { - keyWithBestMatch = sourceLinkDocument.Key; - relativePathOfBestMatch = relativePath; - } + (hitCandidate.AccountedByNestedInstrumentation ??= new HashSet()).Add(i); } + } } + } + } + + var documentsList = result.Documents.Values.ToList(); + using (Stream fs = _fileSystem.NewFileStream(result.HitsFilePath, FileMode.Open, FileAccess.Read)) + using (var br = new BinaryReader(fs)) + { + int hitCandidatesCount = br.ReadInt32(); - relativePathOfBestMatch = relativePathOfBestMatch == "." ? string.Empty : relativePathOfBestMatch; + // TODO: hitCandidatesCount should be verified against result.HitCandidates.Count - string replacement = Path.Combine(relativePathOfBestMatch, Path.GetFileName(document)); - replacement = replacement.Replace('\\', '/'); + for (int i = 0; i < hitCandidatesCount; ++i) + { + HitCandidate hitLocation = result.HitCandidates[i]; + Document document = documentsList[hitLocation.docIndex]; + int hits = br.ReadInt32(); - if (sourceLinkDocuments.TryGetValue(keyWithBestMatch, out url)) + if (hits == 0) + continue; + + hits = hits < 0 ? int.MaxValue : hits; + + if (hitLocation.isBranch) { - return url.Replace("*", replacement); + Branch branch = document.Branches[new BranchKey(hitLocation.start, hitLocation.end)]; + branch.Hits += hits; + + if (branch.Hits < 0) + branch.Hits = int.MaxValue; + } + else + { + for (int j = hitLocation.start; j <= hitLocation.end; j++) + { + if (hitLocation.AccountedByNestedInstrumentation?.Contains(j) == true) + { + continue; + } + + Line line = document.Lines[j]; + line.Hits += hits; + + if (line.Hits < 0) + line.Hits = int.MaxValue; + } } + } + } - return document; + try + { + _instrumentationHelper.DeleteHitsFile(result.HitsFilePath); + _logger.LogVerbose($"Hit file '{result.HitsFilePath}' deleted"); + } + catch (Exception ex) + { + _logger.LogWarning($"Unable to remove hit file: {result.HitsFilePath} because : {ex.Message}"); } + } + } + + private string GetSourceLinkUrl(Dictionary sourceLinkDocuments, string document) + { + if (sourceLinkDocuments.TryGetValue(document, out string url)) + { + return url; + } + + string keyWithBestMatch = string.Empty; + string relativePathOfBestMatch = string.Empty; + + foreach (KeyValuePair sourceLinkDocument in sourceLinkDocuments) + { + string key = sourceLinkDocument.Key; + if (Path.GetFileName(key) != "*") continue; + +#pragma warning disable IDE0057 // Use range operator + IReadOnlyList rootMapping = _sourceRootTranslator.ResolvePathRoot(key.Substring(0, key.Length - 1)); +#pragma warning restore IDE0057 // Use range operator + foreach (string keyMapping in rootMapping is null ? new List() { key } : new List(rootMapping.Select(m => m.OriginalPath))) + { + string directoryDocument = Path.GetDirectoryName(document); + string sourceLinkRoot = Path.GetDirectoryName(keyMapping); + string relativePath = ""; + + // if document is on repo root we skip relative path calculation + if (directoryDocument != sourceLinkRoot) + { + if (!directoryDocument.StartsWith(sourceLinkRoot + Path.DirectorySeparatorChar)) + continue; + +#pragma warning disable IDE0057 // Use range operator + relativePath = directoryDocument.Substring(sourceLinkRoot.Length + 1); +#pragma warning restore IDE0057 // Use range operator + } + + if (relativePathOfBestMatch.Length == 0) + { + keyWithBestMatch = sourceLinkDocument.Key; + relativePathOfBestMatch = relativePath; + } + + if (relativePath.Length < relativePathOfBestMatch.Length) + { + keyWithBestMatch = sourceLinkDocument.Key; + relativePathOfBestMatch = relativePath; + } + } + } + + relativePathOfBestMatch = relativePathOfBestMatch == "." ? string.Empty : relativePathOfBestMatch; + + string replacement = Path.Combine(relativePathOfBestMatch, Path.GetFileName(document)); + replacement = replacement.Replace('\\', '/'); + + if (sourceLinkDocuments.TryGetValue(keyWithBestMatch, out url)) + { + return url.Replace("*", replacement); + } + + return document; } + } } diff --git a/src/coverlet.core/CoverageDetails.cs b/src/coverlet.core/CoverageDetails.cs index 59db863c2..0359fa11a 100644 --- a/src/coverlet.core/CoverageDetails.cs +++ b/src/coverlet.core/CoverageDetails.cs @@ -1,30 +1,30 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; namespace Coverlet.Core { - internal class CoverageDetails - { - private double _averageModulePercent; + internal class CoverageDetails + { + private double _averageModulePercent; - public Modules Modules { get; internal set; } - public double Covered { get; internal set; } - public int Total { get; internal set; } - public double Percent - { - get - { - if (Modules?.Count == 0) return 0; - return Total == 0 ? 100D : Math.Floor((Covered / Total) * 10000) / 100; - } - } + public Modules Modules { get; internal set; } + public double Covered { get; internal set; } + public int Total { get; internal set; } + public double Percent + { + get + { + if (Modules?.Count == 0) return 0; + return Total == 0 ? 100D : Math.Floor((Covered / Total) * 10000) / 100; + } + } - public double AverageModulePercent - { - get { return Math.Floor(_averageModulePercent * 100) / 100; } - internal set { _averageModulePercent = value; } - } + public double AverageModulePercent + { + get { return Math.Floor(_averageModulePercent * 100) / 100; } + internal set { _averageModulePercent = value; } } -} \ No newline at end of file + } +} diff --git a/src/coverlet.core/CoveragePrepareResult.cs b/src/coverlet.core/CoveragePrepareResult.cs index 7c15d76c3..ecfd234cf 100644 --- a/src/coverlet.core/CoveragePrepareResult.cs +++ b/src/coverlet.core/CoveragePrepareResult.cs @@ -7,36 +7,36 @@ namespace Coverlet.Core { - // Followed safe serializer guide, will emit xml format - // https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2300-do-not-use-insecure-deserializer-binaryformatter?view=vs-2019 - // https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2301-do-not-call-binaryformatter-deserialize-without-first-setting-binaryformatter-binder?view=vs-2019 - [DataContract] - internal class CoveragePrepareResult - { - [DataMember] - public string Identifier { get; set; } - [DataMember] - public string ModuleOrDirectory { get; set; } - [DataMember] - public string MergeWith { get; set; } - [DataMember] - public bool UseSourceLink { get; set; } - [DataMember] - public InstrumenterResult[] Results { get; set; } - [DataMember] - public CoverageParameters Parameters { get; set; } + // Followed safe serializer guide, will emit xml format + // https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2300-do-not-use-insecure-deserializer-binaryformatter?view=vs-2019 + // https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2301-do-not-call-binaryformatter-deserialize-without-first-setting-binaryformatter-binder?view=vs-2019 + [DataContract] + internal class CoveragePrepareResult + { + [DataMember] + public string Identifier { get; set; } + [DataMember] + public string ModuleOrDirectory { get; set; } + [DataMember] + public string MergeWith { get; set; } + [DataMember] + public bool UseSourceLink { get; set; } + [DataMember] + public InstrumenterResult[] Results { get; set; } + [DataMember] + public CoverageParameters Parameters { get; set; } - public static CoveragePrepareResult Deserialize(Stream serializedInstrumentState) - { - return (CoveragePrepareResult)new DataContractSerializer(typeof(CoveragePrepareResult)).ReadObject(serializedInstrumentState); - } + public static CoveragePrepareResult Deserialize(Stream serializedInstrumentState) + { + return (CoveragePrepareResult)new DataContractSerializer(typeof(CoveragePrepareResult)).ReadObject(serializedInstrumentState); + } - public static Stream Serialize(CoveragePrepareResult instrumentState) - { - var ms = new MemoryStream(); - new DataContractSerializer(typeof(CoveragePrepareResult)).WriteObject(ms, instrumentState); - ms.Position = 0; - return ms; - } + public static Stream Serialize(CoveragePrepareResult instrumentState) + { + var ms = new MemoryStream(); + new DataContractSerializer(typeof(CoveragePrepareResult)).WriteObject(ms, instrumentState); + ms.Position = 0; + return ms; } + } } diff --git a/src/coverlet.core/CoverageResult.cs b/src/coverlet.core/CoverageResult.cs index 4e981346b..00a64568c 100644 --- a/src/coverlet.core/CoverageResult.cs +++ b/src/coverlet.core/CoverageResult.cs @@ -8,175 +8,174 @@ namespace Coverlet.Core { - internal class BranchInfo + internal class BranchInfo + { + public int Line { get; set; } + public int Offset { get; set; } + public int EndOffset { get; set; } + public int Path { get; set; } + public uint Ordinal { get; set; } + public int Hits { get; set; } + } + internal class Lines : SortedDictionary { } + internal class Branches : List { } + + internal class Method + { + internal Method() { - public int Line { get; set; } - public int Offset { get; set; } - public int EndOffset { get; set; } - public int Path { get; set; } - public uint Ordinal { get; set; } - public int Hits { get; set; } + Lines = new Lines(); + Branches = new Branches(); } - internal class Lines : SortedDictionary { } + public Lines Lines; + public Branches Branches; + } + internal class Methods : Dictionary { } + internal class Classes : Dictionary { } + internal class Documents : Dictionary { } + internal class Modules : Dictionary { } - internal class Branches : List { } + internal class CoverageResult + { + public string Identifier { get; set; } + public Modules Modules { get; set; } + public List InstrumentedResults { get; set; } + public CoverageParameters Parameters { get; set; } - internal class Method + public CoverageResult() { } + + public void Merge(Modules modules) { - internal Method() + foreach (KeyValuePair module in modules) + { + if (!Modules.Keys.Contains(module.Key)) { - Lines = new Lines(); - Branches = new Branches(); + Modules.Add(module.Key, module.Value); } - public Lines Lines; - public Branches Branches; - } - internal class Methods : Dictionary { } - internal class Classes : Dictionary { } - internal class Documents : Dictionary { } - internal class Modules : Dictionary { } - - internal class CoverageResult - { - public string Identifier { get; set; } - public Modules Modules { get; set; } - public List InstrumentedResults { get; set; } - public CoverageParameters Parameters { get; set; } - - public CoverageResult() { } - - public void Merge(Modules modules) + else { - foreach (KeyValuePair module in modules) + foreach (KeyValuePair document in module.Value) + { + if (!Modules[module.Key].ContainsKey(document.Key)) + { + Modules[module.Key].Add(document.Key, document.Value); + } + else { - if (!Modules.Keys.Contains(module.Key)) + foreach (KeyValuePair @class in document.Value) + { + if (!Modules[module.Key][document.Key].ContainsKey(@class.Key)) { - Modules.Add(module.Key, module.Value); + Modules[module.Key][document.Key].Add(@class.Key, @class.Value); } else { - foreach (KeyValuePair document in module.Value) + foreach (KeyValuePair method in @class.Value) + { + if (!Modules[module.Key][document.Key][@class.Key].ContainsKey(method.Key)) + { + Modules[module.Key][document.Key][@class.Key].Add(method.Key, method.Value); + } + else { - if (!Modules[module.Key].ContainsKey(document.Key)) + foreach (KeyValuePair line in method.Value.Lines) + { + if (!Modules[module.Key][document.Key][@class.Key][method.Key].Lines.ContainsKey(line.Key)) { - Modules[module.Key].Add(document.Key, document.Value); + Modules[module.Key][document.Key][@class.Key][method.Key].Lines.Add(line.Key, line.Value); } else { - foreach (KeyValuePair @class in document.Value) - { - if (!Modules[module.Key][document.Key].ContainsKey(@class.Key)) - { - Modules[module.Key][document.Key].Add(@class.Key, @class.Value); - } - else - { - foreach (KeyValuePair method in @class.Value) - { - if (!Modules[module.Key][document.Key][@class.Key].ContainsKey(method.Key)) - { - Modules[module.Key][document.Key][@class.Key].Add(method.Key, method.Value); - } - else - { - foreach (KeyValuePair line in method.Value.Lines) - { - if (!Modules[module.Key][document.Key][@class.Key][method.Key].Lines.ContainsKey(line.Key)) - { - Modules[module.Key][document.Key][@class.Key][method.Key].Lines.Add(line.Key, line.Value); - } - else - { - Modules[module.Key][document.Key][@class.Key][method.Key].Lines[line.Key] += line.Value; - } - } - - foreach (BranchInfo branch in method.Value.Branches) - { - Branches branches = Modules[module.Key][document.Key][@class.Key][method.Key].Branches; - BranchInfo branchInfo = branches.FirstOrDefault(b => b.EndOffset == branch.EndOffset && b.Line == branch.Line && b.Offset == branch.Offset && b.Ordinal == branch.Ordinal && b.Path == branch.Path); - if (branchInfo == null) - branches.Add(branch); - else - branchInfo.Hits += branch.Hits; - } - } - } - } - } + Modules[module.Key][document.Key][@class.Key][method.Key].Lines[line.Key] += line.Value; } + } + + foreach (BranchInfo branch in method.Value.Branches) + { + Branches branches = Modules[module.Key][document.Key][@class.Key][method.Key].Branches; + BranchInfo branchInfo = branches.FirstOrDefault(b => b.EndOffset == branch.EndOffset && b.Line == branch.Line && b.Offset == branch.Offset && b.Ordinal == branch.Ordinal && b.Path == branch.Path); + if (branchInfo == null) + branches.Add(branch); + else + branchInfo.Hits += branch.Hits; + } } + } } + } } + } } + } + } - public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summary, Dictionary thresholdTypeFlagValues, ThresholdStatistic thresholdStat) - { - ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.None; - switch (thresholdStat) - { - case ThresholdStatistic.Minimum: - { - if (!Modules.Any()) - thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, 0, 0, 0); - - foreach (KeyValuePair module in Modules) - { - double line = summary.CalculateLineCoverage(module.Value).Percent; - double branch = summary.CalculateBranchCoverage(module.Value).Percent; - double method = summary.CalculateMethodCoverage(module.Value).Percent; - - thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); - } - } - break; - case ThresholdStatistic.Average: - { - double line = summary.CalculateLineCoverage(Modules).AverageModulePercent; - double branch = summary.CalculateBranchCoverage(Modules).AverageModulePercent; - double method = summary.CalculateMethodCoverage(Modules).AverageModulePercent; - - thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); - } - break; - case ThresholdStatistic.Total: - { - double line = summary.CalculateLineCoverage(Modules).Percent; - double branch = summary.CalculateBranchCoverage(Modules).Percent; - double method = summary.CalculateMethodCoverage(Modules).Percent; - - thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); - } - break; - } - - return thresholdTypeFlags; - } - - private static ThresholdTypeFlags CompareThresholdValues( - Dictionary thresholdTypeFlagValues, ThresholdTypeFlags thresholdTypeFlags, - double line, double branch, double method) - { - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out double lineThresholdValue) && - lineThresholdValue > line) - { - thresholdTypeFlags |= ThresholdTypeFlags.Line; - } - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out double branchThresholdValue) && - branchThresholdValue > branch) + public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summary, Dictionary thresholdTypeFlagValues, ThresholdStatistic thresholdStat) + { + ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.None; + switch (thresholdStat) + { + case ThresholdStatistic.Minimum: + { + if (!Modules.Any()) + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, 0, 0, 0); + + foreach (KeyValuePair module in Modules) { - thresholdTypeFlags |= ThresholdTypeFlags.Branch; - } + double line = summary.CalculateLineCoverage(module.Value).Percent; + double branch = summary.CalculateBranchCoverage(module.Value).Percent; + double method = summary.CalculateMethodCoverage(module.Value).Percent; - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out double methodThresholdValue) && - methodThresholdValue > method) - { - thresholdTypeFlags |= ThresholdTypeFlags.Method; + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); } + } + break; + case ThresholdStatistic.Average: + { + double line = summary.CalculateLineCoverage(Modules).AverageModulePercent; + double branch = summary.CalculateBranchCoverage(Modules).AverageModulePercent; + double method = summary.CalculateMethodCoverage(Modules).AverageModulePercent; + + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); + } + break; + case ThresholdStatistic.Total: + { + double line = summary.CalculateLineCoverage(Modules).Percent; + double branch = summary.CalculateBranchCoverage(Modules).Percent; + double method = summary.CalculateMethodCoverage(Modules).Percent; + + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); + } + break; + } + + return thresholdTypeFlags; + } - return thresholdTypeFlags; - } + private static ThresholdTypeFlags CompareThresholdValues( + Dictionary thresholdTypeFlagValues, ThresholdTypeFlags thresholdTypeFlags, + double line, double branch, double method) + { + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out double lineThresholdValue) && + lineThresholdValue > line) + { + thresholdTypeFlags |= ThresholdTypeFlags.Line; + } + + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out double branchThresholdValue) && + branchThresholdValue > branch) + { + thresholdTypeFlags |= ThresholdTypeFlags.Branch; + } + + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out double methodThresholdValue) && + methodThresholdValue > method) + { + thresholdTypeFlags |= ThresholdTypeFlags.Method; + } + + return thresholdTypeFlags; } + } } diff --git a/src/coverlet.core/CoverageSummary.cs b/src/coverlet.core/CoverageSummary.cs index a56cda454..34370074b 100644 --- a/src/coverlet.core/CoverageSummary.cs +++ b/src/coverlet.core/CoverageSummary.cs @@ -7,270 +7,270 @@ namespace Coverlet.Core { - internal class CoverageSummary + internal class CoverageSummary + { + public CoverageDetails CalculateLineCoverage(Lines lines) { - public CoverageDetails CalculateLineCoverage(Lines lines) - { - var details = new CoverageDetails(); - details.Covered = lines.Where(l => l.Value > 0).Count(); - details.Total = lines.Count; - return details; - } + var details = new CoverageDetails(); + details.Covered = lines.Where(l => l.Value > 0).Count(); + details.Total = lines.Count; + return details; + } - public CoverageDetails CalculateLineCoverage(Methods methods) - { - var details = new CoverageDetails(); - foreach (KeyValuePair method in methods) - { - CoverageDetails methodCoverage = CalculateLineCoverage(method.Value.Lines); - details.Covered += methodCoverage.Covered; - details.Total += methodCoverage.Total; - } - return details; - } + public CoverageDetails CalculateLineCoverage(Methods methods) + { + var details = new CoverageDetails(); + foreach (KeyValuePair method in methods) + { + CoverageDetails methodCoverage = CalculateLineCoverage(method.Value.Lines); + details.Covered += methodCoverage.Covered; + details.Total += methodCoverage.Total; + } + return details; + } - public CoverageDetails CalculateLineCoverage(Classes classes) - { - var details = new CoverageDetails(); - foreach (KeyValuePair @class in classes) - { - CoverageDetails classCoverage = CalculateLineCoverage(@class.Value); - details.Covered += classCoverage.Covered; - details.Total += classCoverage.Total; - } - return details; - } + public CoverageDetails CalculateLineCoverage(Classes classes) + { + var details = new CoverageDetails(); + foreach (KeyValuePair @class in classes) + { + CoverageDetails classCoverage = CalculateLineCoverage(@class.Value); + details.Covered += classCoverage.Covered; + details.Total += classCoverage.Total; + } + return details; + } - public CoverageDetails CalculateLineCoverage(Documents documents) - { - var details = new CoverageDetails(); - foreach (KeyValuePair document in documents) - { - CoverageDetails documentCoverage = CalculateLineCoverage(document.Value); - details.Covered += documentCoverage.Covered; - details.Total += documentCoverage.Total; - } - return details; - } + public CoverageDetails CalculateLineCoverage(Documents documents) + { + var details = new CoverageDetails(); + foreach (KeyValuePair document in documents) + { + CoverageDetails documentCoverage = CalculateLineCoverage(document.Value); + details.Covered += documentCoverage.Covered; + details.Total += documentCoverage.Total; + } + return details; + } - public CoverageDetails CalculateLineCoverage(Modules modules) - { - var details = new CoverageDetails { Modules = modules }; - double accumPercent = 0.0D; - - if (modules.Count == 0) - return details; - - foreach (KeyValuePair module in modules) - { - CoverageDetails moduleCoverage = CalculateLineCoverage(module.Value); - details.Covered += moduleCoverage.Covered; - details.Total += moduleCoverage.Total; - accumPercent += moduleCoverage.Percent; - } - details.AverageModulePercent = accumPercent / modules.Count; - return details; - } + public CoverageDetails CalculateLineCoverage(Modules modules) + { + var details = new CoverageDetails { Modules = modules }; + double accumPercent = 0.0D; + + if (modules.Count == 0) + return details; + + foreach (KeyValuePair module in modules) + { + CoverageDetails moduleCoverage = CalculateLineCoverage(module.Value); + details.Covered += moduleCoverage.Covered; + details.Total += moduleCoverage.Total; + accumPercent += moduleCoverage.Percent; + } + details.AverageModulePercent = accumPercent / modules.Count; + return details; + } - public CoverageDetails CalculateBranchCoverage(IList branches) - { - var details = new CoverageDetails(); - details.Covered = branches.Count(bi => bi.Hits > 0); - details.Total = branches.Count; - return details; - } + public CoverageDetails CalculateBranchCoverage(IList branches) + { + var details = new CoverageDetails(); + details.Covered = branches.Count(bi => bi.Hits > 0); + details.Total = branches.Count; + return details; + } - public int CalculateNpathComplexity(IList branches) + public int CalculateNpathComplexity(IList branches) + { + // Adapted from OpenCover see https://github.com/OpenCover/opencover/blob/master/main/OpenCover.Framework/Persistance/BasePersistance.cs#L419 + if (!branches.Any()) + { + return 0; + } + + var paths = new Dictionary(); + foreach (BranchInfo branch in branches) + { + if (!paths.TryGetValue(branch.Offset, out int count)) { - // Adapted from OpenCover see https://github.com/OpenCover/opencover/blob/master/main/OpenCover.Framework/Persistance/BasePersistance.cs#L419 - if (!branches.Any()) - { - return 0; - } - - var paths = new Dictionary(); - foreach (BranchInfo branch in branches) - { - if (!paths.TryGetValue(branch.Offset, out int count)) - { - count = 0; - } - paths[branch.Offset] = ++count; - } - - int npath = 1; - foreach (int branchPoints in paths.Values) - { - try - { - npath = checked(npath * branchPoints); - } - catch (OverflowException) - { - npath = int.MaxValue; - break; - } - } - return npath; + count = 0; } + paths[branch.Offset] = ++count; + } - public int CalculateCyclomaticComplexity(IList branches) + int npath = 1; + foreach (int branchPoints in paths.Values) + { + try { - return Math.Max(1, branches.Count); + npath = checked(npath * branchPoints); } - - public int CalculateCyclomaticComplexity(Methods methods) + catch (OverflowException) { - return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).Sum(); + npath = int.MaxValue; + break; } + } + return npath; + } - public int CalculateMaxCyclomaticComplexity(Methods methods) - { - return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).DefaultIfEmpty(1).Max(); - } + public int CalculateCyclomaticComplexity(IList branches) + { + return Math.Max(1, branches.Count); + } - public int CalculateMinCyclomaticComplexity(Methods methods) - { - return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).DefaultIfEmpty(1).Min(); - } + public int CalculateCyclomaticComplexity(Methods methods) + { + return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).Sum(); + } - public int CalculateCyclomaticComplexity(Modules modules) - { - return modules.Values.Select(CalculateCyclomaticComplexity).Sum(); - } + public int CalculateMaxCyclomaticComplexity(Methods methods) + { + return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).DefaultIfEmpty(1).Max(); + } - public int CalculateMaxCyclomaticComplexity(Modules modules) - { - return modules.Values.Select(CalculateCyclomaticComplexity).DefaultIfEmpty(1).Max(); - } + public int CalculateMinCyclomaticComplexity(Methods methods) + { + return methods.Values.Select(m => CalculateCyclomaticComplexity(m.Branches)).DefaultIfEmpty(1).Min(); + } - public int CalculateMinCyclomaticComplexity(Modules modules) - { - return modules.Values.Select(CalculateCyclomaticComplexity).DefaultIfEmpty(1).Min(); - } + public int CalculateCyclomaticComplexity(Modules modules) + { + return modules.Values.Select(CalculateCyclomaticComplexity).Sum(); + } - public int CalculateCyclomaticComplexity(Documents documents) - { - return documents.Values.SelectMany(c => c.Values.Select(CalculateCyclomaticComplexity)).Sum(); - } + public int CalculateMaxCyclomaticComplexity(Modules modules) + { + return modules.Values.Select(CalculateCyclomaticComplexity).DefaultIfEmpty(1).Max(); + } - public CoverageDetails CalculateBranchCoverage(Methods methods) - { - var details = new CoverageDetails(); - foreach (KeyValuePair method in methods) - { - CoverageDetails methodCoverage = CalculateBranchCoverage(method.Value.Branches); - details.Covered += methodCoverage.Covered; - details.Total += methodCoverage.Total; - } - return details; - } + public int CalculateMinCyclomaticComplexity(Modules modules) + { + return modules.Values.Select(CalculateCyclomaticComplexity).DefaultIfEmpty(1).Min(); + } - public CoverageDetails CalculateBranchCoverage(Classes classes) - { - var details = new CoverageDetails(); - foreach (KeyValuePair @class in classes) - { - CoverageDetails classCoverage = CalculateBranchCoverage(@class.Value); - details.Covered += classCoverage.Covered; - details.Total += classCoverage.Total; - } - return details; - } + public int CalculateCyclomaticComplexity(Documents documents) + { + return documents.Values.SelectMany(c => c.Values.Select(CalculateCyclomaticComplexity)).Sum(); + } - public CoverageDetails CalculateBranchCoverage(Documents documents) - { - var details = new CoverageDetails(); - foreach (KeyValuePair document in documents) - { - CoverageDetails documentCoverage = CalculateBranchCoverage(document.Value); - details.Covered += documentCoverage.Covered; - details.Total += documentCoverage.Total; - } - return details; - } + public CoverageDetails CalculateBranchCoverage(Methods methods) + { + var details = new CoverageDetails(); + foreach (KeyValuePair method in methods) + { + CoverageDetails methodCoverage = CalculateBranchCoverage(method.Value.Branches); + details.Covered += methodCoverage.Covered; + details.Total += methodCoverage.Total; + } + return details; + } - public CoverageDetails CalculateBranchCoverage(Modules modules) - { - var details = new CoverageDetails { Modules = modules }; - double accumPercent = 0.0D; - - if (modules.Count == 0) - return details; - - foreach (KeyValuePair module in modules) - { - CoverageDetails moduleCoverage = CalculateBranchCoverage(module.Value); - details.Covered += moduleCoverage.Covered; - details.Total += moduleCoverage.Total; - accumPercent += moduleCoverage.Percent; - } - details.AverageModulePercent = modules.Count == 0 ? 0 : accumPercent / modules.Count; - return details; - } + public CoverageDetails CalculateBranchCoverage(Classes classes) + { + var details = new CoverageDetails(); + foreach (KeyValuePair @class in classes) + { + CoverageDetails classCoverage = CalculateBranchCoverage(@class.Value); + details.Covered += classCoverage.Covered; + details.Total += classCoverage.Total; + } + return details; + } - public CoverageDetails CalculateMethodCoverage(Lines lines) - { - var details = new CoverageDetails(); - details.Covered = lines.Any(l => l.Value > 0) ? 1 : 0; - details.Total = 1; - return details; - } + public CoverageDetails CalculateBranchCoverage(Documents documents) + { + var details = new CoverageDetails(); + foreach (KeyValuePair document in documents) + { + CoverageDetails documentCoverage = CalculateBranchCoverage(document.Value); + details.Covered += documentCoverage.Covered; + details.Total += documentCoverage.Total; + } + return details; + } - public CoverageDetails CalculateMethodCoverage(Methods methods) - { - var details = new CoverageDetails(); - IEnumerable> methodsWithLines = methods.Where(m => m.Value.Lines.Count > 0); - foreach (KeyValuePair method in methodsWithLines) - { - CoverageDetails methodCoverage = CalculateMethodCoverage(method.Value.Lines); - details.Covered += methodCoverage.Covered; - } - details.Total = methodsWithLines.Count(); - return details; - } + public CoverageDetails CalculateBranchCoverage(Modules modules) + { + var details = new CoverageDetails { Modules = modules }; + double accumPercent = 0.0D; + + if (modules.Count == 0) + return details; + + foreach (KeyValuePair module in modules) + { + CoverageDetails moduleCoverage = CalculateBranchCoverage(module.Value); + details.Covered += moduleCoverage.Covered; + details.Total += moduleCoverage.Total; + accumPercent += moduleCoverage.Percent; + } + details.AverageModulePercent = modules.Count == 0 ? 0 : accumPercent / modules.Count; + return details; + } - public CoverageDetails CalculateMethodCoverage(Classes classes) - { - var details = new CoverageDetails(); - foreach (KeyValuePair @class in classes) - { - CoverageDetails classCoverage = CalculateMethodCoverage(@class.Value); - details.Covered += classCoverage.Covered; - details.Total += classCoverage.Total; - } - return details; - } + public CoverageDetails CalculateMethodCoverage(Lines lines) + { + var details = new CoverageDetails(); + details.Covered = lines.Any(l => l.Value > 0) ? 1 : 0; + details.Total = 1; + return details; + } - public CoverageDetails CalculateMethodCoverage(Documents documents) - { - var details = new CoverageDetails(); - foreach (KeyValuePair document in documents) - { - CoverageDetails documentCoverage = CalculateMethodCoverage(document.Value); - details.Covered += documentCoverage.Covered; - details.Total += documentCoverage.Total; - } - return details; - } + public CoverageDetails CalculateMethodCoverage(Methods methods) + { + var details = new CoverageDetails(); + IEnumerable> methodsWithLines = methods.Where(m => m.Value.Lines.Count > 0); + foreach (KeyValuePair method in methodsWithLines) + { + CoverageDetails methodCoverage = CalculateMethodCoverage(method.Value.Lines); + details.Covered += methodCoverage.Covered; + } + details.Total = methodsWithLines.Count(); + return details; + } - public CoverageDetails CalculateMethodCoverage(Modules modules) - { - var details = new CoverageDetails { Modules = modules }; - double accumPercent = 0.0D; - - if (modules.Count == 0) - return details; - - foreach (KeyValuePair module in modules) - { - CoverageDetails moduleCoverage = CalculateMethodCoverage(module.Value); - details.Covered += moduleCoverage.Covered; - details.Total += moduleCoverage.Total; - accumPercent += moduleCoverage.Percent; - } - details.AverageModulePercent = modules.Count == 0 ? 0 : accumPercent / modules.Count; - return details; - } + public CoverageDetails CalculateMethodCoverage(Classes classes) + { + var details = new CoverageDetails(); + foreach (KeyValuePair @class in classes) + { + CoverageDetails classCoverage = CalculateMethodCoverage(@class.Value); + details.Covered += classCoverage.Covered; + details.Total += classCoverage.Total; + } + return details; + } + + public CoverageDetails CalculateMethodCoverage(Documents documents) + { + var details = new CoverageDetails(); + foreach (KeyValuePair document in documents) + { + CoverageDetails documentCoverage = CalculateMethodCoverage(document.Value); + details.Covered += documentCoverage.Covered; + details.Total += documentCoverage.Total; + } + return details; + } + + public CoverageDetails CalculateMethodCoverage(Modules modules) + { + var details = new CoverageDetails { Modules = modules }; + double accumPercent = 0.0D; + + if (modules.Count == 0) + return details; + + foreach (KeyValuePair module in modules) + { + CoverageDetails moduleCoverage = CalculateMethodCoverage(module.Value); + details.Covered += moduleCoverage.Covered; + details.Total += moduleCoverage.Total; + accumPercent += moduleCoverage.Percent; + } + details.AverageModulePercent = modules.Count == 0 ? 0 : accumPercent / modules.Count; + return details; } + } } diff --git a/src/coverlet.core/Enums/AssemblySearchType.cs b/src/coverlet.core/Enums/AssemblySearchType.cs index 099e54217..4eef8b96f 100644 --- a/src/coverlet.core/Enums/AssemblySearchType.cs +++ b/src/coverlet.core/Enums/AssemblySearchType.cs @@ -3,10 +3,10 @@ namespace Coverlet.Core.Enums { - internal enum AssemblySearchType - { - MissingAny, - MissingAll, - None - } + internal enum AssemblySearchType + { + MissingAny, + MissingAll, + None + } } diff --git a/src/coverlet.core/Enums/ThresholdStatistic.cs b/src/coverlet.core/Enums/ThresholdStatistic.cs index 1dbb55dc0..31aa72cd9 100644 --- a/src/coverlet.core/Enums/ThresholdStatistic.cs +++ b/src/coverlet.core/Enums/ThresholdStatistic.cs @@ -1,12 +1,12 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace Coverlet.Core.Enums { - internal enum ThresholdStatistic - { - Minimum, - Average, - Total - } -} \ No newline at end of file + internal enum ThresholdStatistic + { + Minimum, + Average, + Total + } +} diff --git a/src/coverlet.core/Enums/ThresholdTypeFlags.cs b/src/coverlet.core/Enums/ThresholdTypeFlags.cs index 9b24222a5..2463fab9a 100644 --- a/src/coverlet.core/Enums/ThresholdTypeFlags.cs +++ b/src/coverlet.core/Enums/ThresholdTypeFlags.cs @@ -1,16 +1,16 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; namespace Coverlet.Core.Enums { - [Flags] - internal enum ThresholdTypeFlags - { - None = 0, - Line = 2, - Branch = 4, - Method = 8 - } -} \ No newline at end of file + [Flags] + internal enum ThresholdTypeFlags + { + None = 0, + Line = 2, + Branch = 4, + Method = 8 + } +} diff --git a/src/coverlet.core/Exceptions.cs b/src/coverlet.core/Exceptions.cs index 4eefd76ca..d65b22096 100644 --- a/src/coverlet.core/Exceptions.cs +++ b/src/coverlet.core/Exceptions.cs @@ -5,25 +5,25 @@ namespace Coverlet.Core.Exceptions { - [Serializable] - internal class CoverletException : Exception - { - public CoverletException() { } - public CoverletException(string message) : base(message) { } - public CoverletException(string message, System.Exception inner) : base(message, inner) { } - protected CoverletException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } - } + [Serializable] + public class CoverletException : Exception + { + public CoverletException() { } + public CoverletException(string message) : base(message) { } + public CoverletException(string message, System.Exception inner) : base(message, inner) { } + protected CoverletException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) : base(info, context) { } + } - [Serializable] - internal class CecilAssemblyResolutionException : CoverletException - { - public CecilAssemblyResolutionException() { } - public CecilAssemblyResolutionException(string message) : base(message) { } - public CecilAssemblyResolutionException(string message, System.Exception inner) : base(message, inner) { } - protected CecilAssemblyResolutionException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } - } + [Serializable] + internal class CecilAssemblyResolutionException : CoverletException + { + public CecilAssemblyResolutionException() { } + public CecilAssemblyResolutionException(string message) : base(message) { } + public CecilAssemblyResolutionException(string message, System.Exception inner) : base(message, inner) { } + protected CecilAssemblyResolutionException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) : base(info, context) { } + } } diff --git a/src/coverlet.core/Extensions/HelperExtensions.cs b/src/coverlet.core/Extensions/HelperExtensions.cs index 30439c0c9..191e9cc38 100644 --- a/src/coverlet.core/Extensions/HelperExtensions.cs +++ b/src/coverlet.core/Extensions/HelperExtensions.cs @@ -6,13 +6,13 @@ namespace Coverlet.Core.Extensions { - internal static class HelperExtensions + internal static class HelperExtensions + { + [ExcludeFromCoverage] + public static TRet Maybe(this T value, Func action, TRet defValue = default) + where T : class { - [ExcludeFromCoverage] - public static TRet Maybe(this T value, Func action, TRet defValue = default) - where T : class - { - return (value != null) ? action(value) : defValue; - } + return (value != null) ? action(value) : defValue; } + } } diff --git a/src/coverlet.core/Helpers/AssemblyAdapter.cs b/src/coverlet.core/Helpers/AssemblyAdapter.cs index f4626d2ff..124c11a9f 100644 --- a/src/coverlet.core/Helpers/AssemblyAdapter.cs +++ b/src/coverlet.core/Helpers/AssemblyAdapter.cs @@ -6,11 +6,11 @@ namespace Coverlet.Core.Helpers { - internal class AssemblyAdapter : IAssemblyAdapter + internal class AssemblyAdapter : IAssemblyAdapter + { + public string GetAssemblyName(string assemblyPath) { - public string GetAssemblyName(string assemblyPath) - { - return AssemblyName.GetAssemblyName(assemblyPath).Name; - } + return AssemblyName.GetAssemblyName(assemblyPath).Name; } + } } diff --git a/src/coverlet.core/Helpers/Console.cs b/src/coverlet.core/Helpers/Console.cs index 8781b49de..4652a194a 100644 --- a/src/coverlet.core/Helpers/Console.cs +++ b/src/coverlet.core/Helpers/Console.cs @@ -6,11 +6,11 @@ namespace Coverlet.Core.Helpers { - public class SystemConsole : IConsole + public class SystemConsole : IConsole + { + public void WriteLine(string value) { - public void WriteLine(string value) - { - Console.WriteLine(value); - } + Console.WriteLine(value); } + } } diff --git a/src/coverlet.core/Helpers/FileSystem.cs b/src/coverlet.core/Helpers/FileSystem.cs index 10dfc8f0a..e8af5b947 100644 --- a/src/coverlet.core/Helpers/FileSystem.cs +++ b/src/coverlet.core/Helpers/FileSystem.cs @@ -6,61 +6,61 @@ namespace Coverlet.Core.Helpers { - internal class FileSystem : IFileSystem + internal class FileSystem : IFileSystem + { + // We need to partial mock this method on tests + public virtual bool Exists(string path) { - // We need to partial mock this method on tests - public virtual bool Exists(string path) - { - return File.Exists(path); - } + return File.Exists(path); + } - public void WriteAllText(string path, string contents) - { - File.WriteAllText(path, contents); - } + public void WriteAllText(string path, string contents) + { + File.WriteAllText(path, contents); + } - public string ReadAllText(string path) - { - return File.ReadAllText(path); - } + public string ReadAllText(string path) + { + return File.ReadAllText(path); + } - // We need to partial mock this method on tests - public virtual Stream OpenRead(string path) - { - return File.OpenRead(path); - } + // We need to partial mock this method on tests + public virtual Stream OpenRead(string path) + { + return File.OpenRead(path); + } - public void Copy(string sourceFileName, string destFileName, bool overwrite) - { - File.Copy(sourceFileName, destFileName, overwrite); - } + public void Copy(string sourceFileName, string destFileName, bool overwrite) + { + File.Copy(sourceFileName, destFileName, overwrite); + } - public void Delete(string path) - { - File.Delete(path); - } + public void Delete(string path) + { + File.Delete(path); + } - // We need to partial mock this method on tests - public virtual Stream NewFileStream(string path, FileMode mode) - { - return new FileStream(path, mode); - } + // We need to partial mock this method on tests + public virtual Stream NewFileStream(string path, FileMode mode) + { + return new FileStream(path, mode); + } - // We need to partial mock this method on tests - public virtual Stream NewFileStream(string path, FileMode mode, FileAccess access) - { - return new FileStream(path, mode, access); - } + // We need to partial mock this method on tests + public virtual Stream NewFileStream(string path, FileMode mode, FileAccess access) + { + return new FileStream(path, mode, access); + } - public string[] ReadAllLines(string path) - { - return File.ReadAllLines(path); - } + public string[] ReadAllLines(string path) + { + return File.ReadAllLines(path); + } - // Escape format characters in file names - internal static string EscapeFileName(string fileName) - { - return fileName?.Replace("{", "{{").Replace("}", "}}"); - } + // Escape format characters in file names + internal static string EscapeFileName(string fileName) + { + return fileName?.Replace("{", "{{").Replace("}", "}}"); } + } } diff --git a/src/coverlet.core/Helpers/InstrumentationHelper.cs b/src/coverlet.core/Helpers/InstrumentationHelper.cs index 6723fc733..7ae12972e 100644 --- a/src/coverlet.core/Helpers/InstrumentationHelper.cs +++ b/src/coverlet.core/Helpers/InstrumentationHelper.cs @@ -16,477 +16,500 @@ namespace Coverlet.Core.Helpers { - internal class InstrumentationHelper : IInstrumentationHelper + internal class InstrumentationHelper : IInstrumentationHelper + { + private const int RetryAttempts = 12; + private readonly ConcurrentDictionary _backupList = new(); + private readonly IRetryHelper _retryHelper; + private readonly IFileSystem _fileSystem; + private readonly ISourceRootTranslator _sourceRootTranslator; + private ILogger _logger; + private static readonly RegexOptions s_regexOptions = + RegexOptions.Multiline | RegexOptions.Compiled; + + public InstrumentationHelper(IProcessExitHandler processExitHandler, IRetryHelper retryHelper, IFileSystem fileSystem, ILogger logger, ISourceRootTranslator sourceRootTranslator) { - private const int RetryAttempts = 12; - private readonly ConcurrentDictionary _backupList = new(); - private readonly IRetryHelper _retryHelper; - private readonly IFileSystem _fileSystem; - private readonly ISourceRootTranslator _sourceRootTranslator; - private ILogger _logger; - - public InstrumentationHelper(IProcessExitHandler processExitHandler, IRetryHelper retryHelper, IFileSystem fileSystem, ILogger logger, ISourceRootTranslator sourceRootTranslator) - { - processExitHandler.Add((s, e) => RestoreOriginalModules()); - _retryHelper = retryHelper; - _fileSystem = fileSystem; - _logger = logger; - _sourceRootTranslator = sourceRootTranslator; - } + processExitHandler.Add((s, e) => RestoreOriginalModules()); + _retryHelper = retryHelper; + _fileSystem = fileSystem; + _logger = logger; + _sourceRootTranslator = sourceRootTranslator; + } - public string[] GetCoverableModules(string moduleOrAppDirectory, string[] directories, bool includeTestAssembly) - { - Debug.Assert(directories != null); - Debug.Assert(moduleOrAppDirectory != null); + public string[] GetCoverableModules(string moduleOrAppDirectory, string[] directories, bool includeTestAssembly) + { + Debug.Assert(directories != null); + Debug.Assert(moduleOrAppDirectory != null); - bool isAppDirectory = !File.Exists(moduleOrAppDirectory) && Directory.Exists(moduleOrAppDirectory); - string moduleDirectory = isAppDirectory ? moduleOrAppDirectory : Path.GetDirectoryName(moduleOrAppDirectory); + bool isAppDirectory = !File.Exists(moduleOrAppDirectory) && Directory.Exists(moduleOrAppDirectory); + string moduleDirectory = isAppDirectory ? moduleOrAppDirectory : Path.GetDirectoryName(moduleOrAppDirectory); - if (moduleDirectory == string.Empty) - { - moduleDirectory = Directory.GetCurrentDirectory(); - } + if (moduleDirectory == string.Empty) + { + moduleDirectory = Directory.GetCurrentDirectory(); + } - var dirs = new List() + var dirs = new List() { // Add the test assembly's directory. moduleDirectory }; - // Prepare all the directories we probe for modules. - foreach (string directory in directories) - { - if (string.IsNullOrWhiteSpace(directory)) continue; + // Prepare all the directories we probe for modules. + foreach (string directory in directories) + { + if (string.IsNullOrWhiteSpace(directory)) continue; - string fullPath = (!Path.IsPathRooted(directory) - ? Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), directory)) - : directory).TrimEnd('*'); + string fullPath = (!Path.IsPathRooted(directory) + ? Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), directory)) + : directory).TrimEnd('*'); - if (!Directory.Exists(fullPath)) continue; + if (!Directory.Exists(fullPath)) continue; - if (directory.EndsWith("*", StringComparison.Ordinal)) - dirs.AddRange(Directory.GetDirectories(fullPath)); - else - dirs.Add(fullPath); - } + if (directory.EndsWith("*", StringComparison.Ordinal)) + dirs.AddRange(Directory.GetDirectories(fullPath)); + else + dirs.Add(fullPath); + } - // The module's name must be unique. - var uniqueModules = new HashSet(); + // The module's name must be unique. + var uniqueModules = new HashSet(); - if (!includeTestAssembly && !isAppDirectory) - uniqueModules.Add(Path.GetFileName(moduleOrAppDirectory)); + if (!includeTestAssembly && !isAppDirectory) + uniqueModules.Add(Path.GetFileName(moduleOrAppDirectory)); - return dirs.SelectMany(d => Directory.EnumerateFiles(d)) - .Where(m => IsAssembly(m) && uniqueModules.Add(Path.GetFileName(m))) - .ToArray(); - } + return dirs.SelectMany(d => Directory.EnumerateFiles(d)) + .Where(m => IsAssembly(m) && uniqueModules.Add(Path.GetFileName(m))) + .ToArray(); + } - public bool HasPdb(string module, out bool embedded) + public bool HasPdb(string module, out bool embedded) + { + embedded = false; + using Stream moduleStream = _fileSystem.OpenRead(module); + using var peReader = new PEReader(moduleStream); + foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) + { + if (entry.Type == DebugDirectoryEntryType.CodeView) { + CodeViewDebugDirectoryData codeViewData = peReader.ReadCodeViewDebugDirectoryData(entry); + string modulePdbFileName = $"{Path.GetFileNameWithoutExtension(module)}.pdb"; + if (_sourceRootTranslator.ResolveFilePath(codeViewData.Path) == modulePdbFileName) + { + // PDB is embedded + embedded = true; + return true; + } + + if (_fileSystem.Exists(_sourceRootTranslator.ResolveFilePath(codeViewData.Path))) + { + // local PDB is located within original build location embedded = false; - using Stream moduleStream = _fileSystem.OpenRead(module); - using var peReader = new PEReader(moduleStream); - foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) - { - if (entry.Type == DebugDirectoryEntryType.CodeView) - { - CodeViewDebugDirectoryData codeViewData = peReader.ReadCodeViewDebugDirectoryData(entry); - string modulePdbFileName = $"{Path.GetFileNameWithoutExtension(module)}.pdb"; - if (_sourceRootTranslator.ResolveFilePath(codeViewData.Path) == modulePdbFileName) - { - // PDB is embedded - embedded = true; - return true; - } - - if (_fileSystem.Exists(_sourceRootTranslator.ResolveFilePath(codeViewData.Path))) - { - // local PDB is located within original build location - embedded = false; - return true; - } - - string localPdbFileName = Path.Combine(Path.GetDirectoryName(module), modulePdbFileName); - if (_fileSystem.Exists(localPdbFileName)) - { - // local PDB is located within same folder as module - embedded = false; - - // mapping need to be registered in _sourceRootTranslator to use that discovery - _sourceRootTranslator.AddMappingInCache(codeViewData.Path, localPdbFileName); - - return true; - } - } - } + return true; + } - return false; - } + string localPdbFileName = Path.Combine(Path.GetDirectoryName(module), modulePdbFileName); + if (_fileSystem.Exists(localPdbFileName)) + { + // local PDB is located within same folder as module + embedded = false; + + // mapping need to be registered in _sourceRootTranslator to use that discovery + _sourceRootTranslator.AddMappingInCache(codeViewData.Path, localPdbFileName); - public bool EmbeddedPortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources) - { - using Stream moduleStream = _fileSystem.OpenRead(module); - using var peReader = new PEReader(moduleStream); - foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) - { - if (entry.Type == DebugDirectoryEntryType.EmbeddedPortablePdb) - { - using MetadataReaderProvider embeddedMetadataProvider = peReader.ReadEmbeddedPortablePdbDebugDirectoryData(entry); - MetadataReader metadataReader = embeddedMetadataProvider.GetMetadataReader(); - - if (!MatchDocumentsWithSources(module, excludeAssembliesWithoutSources, metadataReader)) - { - return false; - } - } - } - - // If we don't have EmbeddedPortablePdb entry return true, for instance empty dll - // We should call this method only on embedded pdb module return true; + } } + } + + return false; + } - public bool PortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources) + public bool EmbeddedPortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources) + { + using Stream moduleStream = _fileSystem.OpenRead(module); + using var peReader = new PEReader(moduleStream); + foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) + { + if (entry.Type == DebugDirectoryEntryType.EmbeddedPortablePdb) { - using Stream moduleStream = _fileSystem.OpenRead(module); - using var peReader = new PEReader(moduleStream); - foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) - { - if (entry.Type == DebugDirectoryEntryType.CodeView) - { - CodeViewDebugDirectoryData codeViewData = peReader.ReadCodeViewDebugDirectoryData(entry); - using Stream pdbStream = _fileSystem.OpenRead(_sourceRootTranslator.ResolveFilePath(codeViewData.Path)); - using var metadataReaderProvider = MetadataReaderProvider.FromPortablePdbStream(pdbStream); - MetadataReader metadataReader = null; - try - { - metadataReader = metadataReaderProvider.GetMetadataReader(); - } - catch (BadImageFormatException) - { - _logger.LogWarning($"{nameof(BadImageFormatException)} during MetadataReaderProvider.FromPortablePdbStream in InstrumentationHelper.PortablePdbHasLocalSource, unable to check if module has got local source."); - return true; - } - - if (!MatchDocumentsWithSources(module, excludeAssembliesWithoutSources, metadataReader)) - { - return false; - } - } - } + using MetadataReaderProvider embeddedMetadataProvider = peReader.ReadEmbeddedPortablePdbDebugDirectoryData(entry); + MetadataReader metadataReader = embeddedMetadataProvider.GetMetadataReader(); - return true; + if (!MatchDocumentsWithSources(module, excludeAssembliesWithoutSources, metadataReader)) + { + return false; + } } + } - private bool MatchDocumentsWithSources(string module, AssemblySearchType excludeAssembliesWithoutSources, - MetadataReader metadataReader) - { - if (excludeAssembliesWithoutSources.Equals(AssemblySearchType.MissingAll)) - { - bool anyDocumentMatches = MatchDocumentsWithSourcesMissingAll(metadataReader); - if (!anyDocumentMatches) - { - _logger.LogVerbose($"Excluding module from instrumentation: {module}, pdb without any local source files"); - return false; - } - } - - if (excludeAssembliesWithoutSources.Equals(AssemblySearchType.MissingAny)) - { - (bool allDocumentsMatch, string notFoundDocument) = MatchDocumentsWithSourcesMissingAny(metadataReader); - - if (!allDocumentsMatch) - { - _logger.LogVerbose( - $"Excluding module from instrumentation: {module}, pdb without local source files, [{FileSystem.EscapeFileName(notFoundDocument)}]"); - return false; - } - } + // If we don't have EmbeddedPortablePdb entry return true, for instance empty dll + // We should call this method only on embedded pdb module + return true; + } + public bool PortablePdbHasLocalSource(string module, AssemblySearchType excludeAssembliesWithoutSources) + { + using Stream moduleStream = _fileSystem.OpenRead(module); + using var peReader = new PEReader(moduleStream); + foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory()) + { + if (entry.Type == DebugDirectoryEntryType.CodeView) + { + CodeViewDebugDirectoryData codeViewData = peReader.ReadCodeViewDebugDirectoryData(entry); + using Stream pdbStream = _fileSystem.OpenRead(_sourceRootTranslator.ResolveFilePath(codeViewData.Path)); + using var metadataReaderProvider = MetadataReaderProvider.FromPortablePdbStream(pdbStream); + MetadataReader metadataReader = null; + try + { + metadataReader = metadataReaderProvider.GetMetadataReader(); + } + catch (BadImageFormatException) + { + _logger.LogWarning($"{nameof(BadImageFormatException)} during MetadataReaderProvider.FromPortablePdbStream in InstrumentationHelper.PortablePdbHasLocalSource, unable to check if module has got local source."); return true; - } + } - private IEnumerable<(string documentName, bool documentExists)> DocumentSourceMap(MetadataReader metadataReader) - { - return metadataReader.Documents.Select(docHandle => - { - Document document = metadataReader.GetDocument(docHandle); - string docName = _sourceRootTranslator.ResolveFilePath(metadataReader.GetString(document.Name)); - return (docName, _fileSystem.Exists(docName)); - }); + if (!MatchDocumentsWithSources(module, excludeAssembliesWithoutSources, metadataReader)) + { + return false; + } } + } - private bool MatchDocumentsWithSourcesMissingAll(MetadataReader metadataReader) - { - return DocumentSourceMap(metadataReader).Any(x => x.documentExists); - } + return true; + } - private (bool allDocumentsMatch, string notFoundDocument) MatchDocumentsWithSourcesMissingAny( - MetadataReader metadataReader) + private bool MatchDocumentsWithSources(string module, AssemblySearchType excludeAssembliesWithoutSources, + MetadataReader metadataReader) + { + if (excludeAssembliesWithoutSources.Equals(AssemblySearchType.MissingAll)) + { + bool anyDocumentMatches = MatchDocumentsWithSourcesMissingAll(metadataReader); + if (!anyDocumentMatches) { - var documentSourceMap = DocumentSourceMap(metadataReader).ToList(); + _logger.LogVerbose($"Excluding module from instrumentation: {module}, pdb without any local source files"); + return false; + } + } - if (documentSourceMap.Any(x => !x.documentExists)) - return (false, documentSourceMap.FirstOrDefault(x => !x.documentExists).documentName); + if (excludeAssembliesWithoutSources.Equals(AssemblySearchType.MissingAny)) + { + (bool allDocumentsMatch, string notFoundDocument) = MatchDocumentsWithSourcesMissingAny(metadataReader); - return (true, string.Empty); + if (!allDocumentsMatch) + { + _logger.LogVerbose( + $"Excluding module from instrumentation: {module}, pdb without local source files, [{FileSystem.EscapeFileName(notFoundDocument)}]"); + return false; } + } - public void BackupOriginalModule(string module, string identifier) - { - string backupPath = GetBackupPath(module, identifier); - string backupSymbolPath = Path.ChangeExtension(backupPath, ".pdb"); - _fileSystem.Copy(module, backupPath, true); - if (!_backupList.TryAdd(module, backupPath)) - { - throw new ArgumentException($"Key already added '{module}'"); - } + return true; + } - string symbolFile = Path.ChangeExtension(module, ".pdb"); - if (_fileSystem.Exists(symbolFile)) - { - _fileSystem.Copy(symbolFile, backupSymbolPath, true); - if (!_backupList.TryAdd(symbolFile, backupSymbolPath)) - { - throw new ArgumentException($"Key already added '{module}'"); - } - } - } + private IEnumerable<(string documentName, bool documentExists)> DocumentSourceMap(MetadataReader metadataReader) + { + return metadataReader.Documents.Select(docHandle => + { + Document document = metadataReader.GetDocument(docHandle); + string docName = _sourceRootTranslator.ResolveFilePath(metadataReader.GetString(document.Name)); + return (docName, _fileSystem.Exists(docName)); + }); + } - public virtual void RestoreOriginalModule(string module, string identifier) - { - string backupPath = GetBackupPath(module, identifier); - string backupSymbolPath = Path.ChangeExtension(backupPath, ".pdb"); + private bool MatchDocumentsWithSourcesMissingAll(MetadataReader metadataReader) + { + return DocumentSourceMap(metadataReader).Any(x => x.documentExists); + } - // Restore the original module - retry up to 10 times, since the destination file could be locked - // See: https://github.com/tonerdo/coverlet/issues/25 - Func retryStrategy = CreateRetryStrategy(); + private (bool allDocumentsMatch, string notFoundDocument) MatchDocumentsWithSourcesMissingAny( + MetadataReader metadataReader) + { + var documentSourceMap = DocumentSourceMap(metadataReader).ToList(); - _retryHelper.Retry(() => - { - _fileSystem.Copy(backupPath, module, true); - _fileSystem.Delete(backupPath); - _backupList.TryRemove(module, out string _); - }, retryStrategy, RetryAttempts); + if (documentSourceMap.Any(x => !x.documentExists)) + return (false, documentSourceMap.FirstOrDefault(x => !x.documentExists).documentName); - _retryHelper.Retry(() => - { - if (_fileSystem.Exists(backupSymbolPath)) - { - string symbolFile = Path.ChangeExtension(module, ".pdb"); - _fileSystem.Copy(backupSymbolPath, symbolFile, true); - _fileSystem.Delete(backupSymbolPath); - _backupList.TryRemove(symbolFile, out string _); - } - }, retryStrategy, RetryAttempts); - } + return (true, string.Empty); + } - public virtual void RestoreOriginalModules() + public void BackupOriginalModule(string module, string identifier) + { + string backupPath = GetBackupPath(module, identifier); + string backupSymbolPath = Path.ChangeExtension(backupPath, ".pdb"); + _fileSystem.Copy(module, backupPath, true); + if (!_backupList.TryAdd(module, backupPath)) + { + throw new ArgumentException($"Key already added '{module}'"); + } + + string symbolFile = Path.ChangeExtension(module, ".pdb"); + if (_fileSystem.Exists(symbolFile)) + { + _fileSystem.Copy(symbolFile, backupSymbolPath, true); + if (!_backupList.TryAdd(symbolFile, backupSymbolPath)) { - // Restore the original module - retry up to 10 times, since the destination file could be locked - // See: https://github.com/tonerdo/coverlet/issues/25 - Func retryStrategy = CreateRetryStrategy(); - - foreach (string key in _backupList.Keys.ToList()) - { - string backupPath = _backupList[key]; - _retryHelper.Retry(() => - { - _fileSystem.Copy(backupPath, key, true); - _fileSystem.Delete(backupPath); - _backupList.TryRemove(key, out string _); - }, retryStrategy, RetryAttempts); - } + throw new ArgumentException($"Key already added '{module}'"); } + } + } - public void DeleteHitsFile(string path) + public virtual void RestoreOriginalModule(string module, string identifier) + { + string backupPath = GetBackupPath(module, identifier); + string backupSymbolPath = Path.ChangeExtension(backupPath, ".pdb"); + + // Restore the original module - retry up to 10 times, since the destination file could be locked + // See: https://github.com/tonerdo/coverlet/issues/25 + Func retryStrategy = CreateRetryStrategy(); + + _retryHelper.Retry(() => + { + _fileSystem.Copy(backupPath, module, true); + _fileSystem.Delete(backupPath); + _backupList.TryRemove(module, out string _); + }, retryStrategy, RetryAttempts); + + _retryHelper.Retry(() => + { + if (_fileSystem.Exists(backupSymbolPath)) { - Func retryStrategy = CreateRetryStrategy(); - _retryHelper.Retry(() => _fileSystem.Delete(path), retryStrategy, RetryAttempts); + string symbolFile = Path.ChangeExtension(module, ".pdb"); + _fileSystem.Copy(backupSymbolPath, symbolFile, true); + _fileSystem.Delete(backupSymbolPath); + _backupList.TryRemove(symbolFile, out string _); } + }, retryStrategy, RetryAttempts); + } - public bool IsValidFilterExpression(string filter) + public virtual void RestoreOriginalModules() + { + // Restore the original module - retry up to 10 times, since the destination file could be locked + // See: https://github.com/tonerdo/coverlet/issues/25 + Func retryStrategy = CreateRetryStrategy(); + + foreach (string key in _backupList.Keys.ToList()) + { + string backupPath = _backupList[key]; + _retryHelper.Retry(() => { - if (filter == null) - return false; - - if (!filter.StartsWith("[")) - return false; + _fileSystem.Copy(backupPath, key, true); + _fileSystem.Delete(backupPath); + _backupList.TryRemove(key, out string _); + }, retryStrategy, RetryAttempts); + } + } - if (!filter.Contains("]")) - return false; + public void DeleteHitsFile(string path) + { + Func retryStrategy = CreateRetryStrategy(); + _retryHelper.Retry(() => _fileSystem.Delete(path), retryStrategy, RetryAttempts); + } - if (filter.Count(f => f == '[') > 1) - return false; + public bool IsValidFilterExpression(string filter) + { + if (filter == null) + return false; - if (filter.Count(f => f == ']') > 1) - return false; + if (!filter.StartsWith("[")) + return false; - if (filter.IndexOf(']') < filter.IndexOf('[')) - return false; + if (!filter.Contains("]")) + return false; - if (filter.IndexOf(']') - filter.IndexOf('[') == 1) - return false; + if (filter.Count(f => f == '[') > 1) + return false; - if (filter.EndsWith("]")) - return false; + if (filter.Count(f => f == ']') > 1) + return false; - if (new Regex(@"[^\w*]").IsMatch(filter.Replace(".", "").Replace("?", "").Replace("[", "").Replace("]", ""))) - return false; + if (filter.IndexOf(']') < filter.IndexOf('[')) + return false; - return true; - } + if (filter.IndexOf(']') - filter.IndexOf('[') == 1) + return false; - public bool IsModuleExcluded(string module, string[] excludeFilters) - { - if (excludeFilters == null || excludeFilters.Length == 0) - return false; + if (filter.EndsWith("]")) + return false; - module = Path.GetFileNameWithoutExtension(module); - if (module == null) - return false; + if (new Regex(@"[^\w*]", s_regexOptions, TimeSpan.FromSeconds(10)).IsMatch(filter.Replace(".", "").Replace("?", "").Replace("[", "").Replace("]", ""))) + return false; - foreach (string filter in excludeFilters) - { - string typePattern = filter.Substring(filter.IndexOf(']') + 1); + return true; + } - if (typePattern != "*") - continue; + public IEnumerable SelectModules(IEnumerable modules, string[] includeFilters, string[] excludeFilters) + { + const char escapeSymbol = '!'; + ILookup modulesLookup = modules.Where(x => x != null) + .ToLookup(x => $"{escapeSymbol}{Path.GetFileNameWithoutExtension(x)}{escapeSymbol}"); - string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1); - modulePattern = WildcardToRegex(modulePattern); + string moduleKeys = string.Join(Environment.NewLine, modulesLookup.Select(x => x.Key)); + string includedModuleKeys = GetModuleKeysForIncludeFilters(includeFilters, escapeSymbol, moduleKeys); + string excludedModuleKeys = GetModuleKeysForExcludeFilters(excludeFilters, escapeSymbol, includedModuleKeys); - var regex = new Regex(modulePattern); + IEnumerable moduleKeysToInclude = includedModuleKeys + .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) + .Except(excludedModuleKeys.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); - if (regex.IsMatch(module)) - return true; - } + return moduleKeysToInclude.SelectMany(x => modulesLookup[x]); + } - return false; - } + private string GetModuleKeysForIncludeFilters(IEnumerable filters, char escapeSymbol, string moduleKeys) + { + string[] validFilters = GetValidFilters(filters); - public bool IsModuleIncluded(string module, string[] includeFilters) - { - if (includeFilters == null || includeFilters.Length == 0) - return true; + return !validFilters.Any() ? moduleKeys : GetIncludeModuleKeysForValidFilters(escapeSymbol, moduleKeys, validFilters); + } - module = Path.GetFileNameWithoutExtension(module); - if (module == null) - return false; + private string GetModuleKeysForExcludeFilters(IEnumerable filters, char escapeSymbol, string moduleKeys) + { + string[] validFilters = GetValidFilters(filters); - foreach (string filter in includeFilters) - { - string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1); + return !validFilters.Any() ? string.Empty : GetExcludeModuleKeysForValidFilters(escapeSymbol, moduleKeys, validFilters); + } - if (modulePattern == "*") - return true; + private string[] GetValidFilters(IEnumerable filters) + { + return (filters ?? Array.Empty()) + .Where(IsValidFilterExpression) + .Where(x => x.EndsWith("*")) + .ToArray(); + } - modulePattern = WildcardToRegex(modulePattern); + private static string GetExcludeModuleKeysForValidFilters(char escapeSymbol, string moduleKeys, string[] validFilters) + { + string pattern = CreateRegexExcludePattern(validFilters, escapeSymbol); + IEnumerable matches = Regex.Matches(moduleKeys, pattern, RegexOptions.IgnoreCase).Cast(); - var regex = new Regex(modulePattern); + return string.Join( + Environment.NewLine, + matches.Where(x => x.Success).Select(x => x.Groups[0].Value)); + } - if (regex.IsMatch(module)) - return true; - } + private static string GetIncludeModuleKeysForValidFilters(char escapeSymbol, string moduleKeys, string[] validFilters) + { + string pattern = CreateRegexIncludePattern(validFilters, escapeSymbol); + IEnumerable matches = Regex.Matches(moduleKeys, pattern, RegexOptions.IgnoreCase).Cast(); - return false; - } + return string.Join( + Environment.NewLine, + matches.Where(x => x.Success).Select(x => x.Groups[0].Value)); + } - public bool IsTypeExcluded(string module, string type, string[] excludeFilters) - { - if (excludeFilters == null || excludeFilters.Length == 0) - return false; + private static string CreateRegexExcludePattern(IEnumerable filters, char escapeSymbol) + //only look for module filters here, types will be filtered out when instrumenting + => CreateRegexPattern(filters, escapeSymbol, filter => filter.Substring(filter.IndexOf(']') + 1) == "*"); - module = Path.GetFileNameWithoutExtension(module); - if (module == null) - return false; + private static string CreateRegexIncludePattern(IEnumerable filters, char escapeSymbol) => + CreateRegexPattern(filters, escapeSymbol); - return IsTypeFilterMatch(module, type, excludeFilters); - } + private static string CreateRegexPattern(IEnumerable filters, char escapeSymbol, Func filterPredicate = null) + { + IEnumerable filteredFilters = filterPredicate != null ? filters.Where(filterPredicate) : filters; + IEnumerable regexPatterns = filteredFilters.Select(x => + $"{escapeSymbol}{WildcardToRegex(x.Substring(1, x.IndexOf(']') - 1)).Trim('^', '$')}{escapeSymbol}"); + return string.Join("|", regexPatterns); + } - public bool IsTypeIncluded(string module, string type, string[] includeFilters) - { - if (includeFilters == null || includeFilters.Length == 0) - return true; + public bool IsTypeExcluded(string module, string type, string[] excludeFilters) + { + if (excludeFilters == null || excludeFilters.Length == 0) + return false; - module = Path.GetFileNameWithoutExtension(module); - if (module == null) - return true; + module = Path.GetFileNameWithoutExtension(module); + if (module == null) + return false; - return IsTypeFilterMatch(module, type, includeFilters); - } + return IsTypeFilterMatch(module, type, excludeFilters); + } - public bool IsLocalMethod(string method) - => new Regex(WildcardToRegex("<*>*__*|*")).IsMatch(method); + public bool IsTypeIncluded(string module, string type, string[] includeFilters) + { + if (includeFilters == null || includeFilters.Length == 0) + return true; - public void SetLogger(ILogger logger) - { - _logger = logger; - } + module = Path.GetFileNameWithoutExtension(module); + if (module == null) + return true; - private static bool IsTypeFilterMatch(string module, string type, string[] filters) - { - Debug.Assert(module != null); - Debug.Assert(filters != null); + return IsTypeFilterMatch(module, type, includeFilters); + } - foreach (string filter in filters) - { - string typePattern = filter.Substring(filter.IndexOf(']') + 1); - string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1); + public bool IsLocalMethod(string method) + => Regex.IsMatch(method, WildcardToRegex("<*>*__*|*")); - typePattern = WildcardToRegex(typePattern); - modulePattern = WildcardToRegex(modulePattern); + public void SetLogger(ILogger logger) + { + _logger = logger; + } - if (new Regex(typePattern).IsMatch(type) && new Regex(modulePattern).IsMatch(module)) - return true; - } + private static bool IsTypeFilterMatch(string module, string type, string[] filters) + { + Debug.Assert(module != null); + Debug.Assert(filters != null); - return false; - } + foreach (string filter in filters) + { +#pragma warning disable IDE0057 // Use range operator + string typePattern = filter.Substring(filter.IndexOf(']') + 1); + string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1); +#pragma warning restore IDE0057 // Use range operator - private static string GetBackupPath(string module, string identifier) - { - return Path.Combine( - Path.GetTempPath(), - Path.GetFileNameWithoutExtension(module) + "_" + identifier + ".dll" - ); - } + typePattern = WildcardToRegex(typePattern); + modulePattern = WildcardToRegex(modulePattern); - private Func CreateRetryStrategy(int initialSleepSeconds = 6) - { - TimeSpan retryStrategy() - { - var sleep = TimeSpan.FromMilliseconds(initialSleepSeconds); - initialSleepSeconds *= 2; - return sleep; - } + if (Regex.IsMatch(type, typePattern) && Regex.IsMatch(module, modulePattern)) + return true; + } - return retryStrategy; - } + return false; + } - private static string WildcardToRegex(string pattern) - { - return "^" + Regex.Escape(pattern). - Replace("\\*", ".*"). - Replace("\\?", "?") + "$"; - } + private static string GetBackupPath(string module, string identifier) + { + return Path.Combine( + Path.GetTempPath(), + Path.GetFileNameWithoutExtension(module) + "_" + identifier + ".dll" + ); + } - private static bool IsAssembly(string filePath) - { - Debug.Assert(filePath != null); + private Func CreateRetryStrategy(int initialSleepSeconds = 6) + { + TimeSpan retryStrategy() + { + var sleep = TimeSpan.FromMilliseconds(initialSleepSeconds); + initialSleepSeconds *= 2; + return sleep; + } + + return retryStrategy; + } - if (!(filePath.EndsWith(".exe") || filePath.EndsWith(".dll"))) - return false; + private static string WildcardToRegex(string pattern) + { + return "^" + Regex.Escape(pattern). + Replace("\\*", ".*"). + Replace("\\?", "?") + "$"; + } - try - { - AssemblyName.GetAssemblyName(filePath); - return true; - } - catch - { - return false; - } - } + private static bool IsAssembly(string filePath) + { + Debug.Assert(filePath != null); + + if (!(filePath.EndsWith(".exe") || filePath.EndsWith(".dll"))) + return false; + + try + { + AssemblyName.GetAssemblyName(filePath); + return true; + } + catch + { + return false; + } } + } } diff --git a/src/coverlet.core/Helpers/ProcessExitHandler.cs b/src/coverlet.core/Helpers/ProcessExitHandler.cs index 1e570f07f..e941405d3 100644 --- a/src/coverlet.core/Helpers/ProcessExitHandler.cs +++ b/src/coverlet.core/Helpers/ProcessExitHandler.cs @@ -6,11 +6,11 @@ namespace Coverlet.Core.Helpers { - internal class ProcessExitHandler : IProcessExitHandler + internal class ProcessExitHandler : IProcessExitHandler + { + public void Add(EventHandler handler) { - public void Add(EventHandler handler) - { - AppDomain.CurrentDomain.ProcessExit += handler; - } + AppDomain.CurrentDomain.ProcessExit += handler; } + } } diff --git a/src/coverlet.core/Helpers/RetryHelper.cs b/src/coverlet.core/Helpers/RetryHelper.cs index dcf3fa9d0..f28361dac 100644 --- a/src/coverlet.core/Helpers/RetryHelper.cs +++ b/src/coverlet.core/Helpers/RetryHelper.cs @@ -8,58 +8,58 @@ namespace Coverlet.Core.Helpers { - // A slightly amended version of the code found here: https://stackoverflow.com/a/1563234/186184 - // This code allows for varying backoff strategies through the use of Func. - internal class RetryHelper : IRetryHelper + // A slightly amended version of the code found here: https://stackoverflow.com/a/1563234/186184 + // This code allows for varying backoff strategies through the use of Func. + internal class RetryHelper : IRetryHelper + { + /// + /// Retry a void method. + /// + /// The action to perform + /// A function returning a Timespan defining the backoff strategy to use. + /// The maximum number of retries before bailing out. Defaults to 3. + public void Retry( + Action action, + Func backoffStrategy, + int maxAttemptCount = 3) { - /// - /// Retry a void method. - /// - /// The action to perform - /// A function returning a Timespan defining the backoff strategy to use. - /// The maximum number of retries before bailing out. Defaults to 3. - public void Retry( - Action action, - Func backoffStrategy, - int maxAttemptCount = 3) + Do(() => + { + action(); + return null; + }, backoffStrategy, maxAttemptCount); + } + + /// + /// Retry a method returning type T. + /// + /// The type of the object to return + /// The action to perform + /// A function returning a Timespan defining the backoff strategy to use. + /// The maximum number of retries before bailing out. Defaults to 3. + public T Do( + Func action, + Func backoffStrategy, + int maxAttemptCount = 3) + { + var exceptions = new List(); + + for (int attempted = 0; attempted < maxAttemptCount; attempted++) + { + try { - Do(() => - { - action(); - return null; - }, backoffStrategy, maxAttemptCount); + if (attempted > 0) + { + Thread.Sleep(backoffStrategy()); + } + return action(); } - - /// - /// Retry a method returning type T. - /// - /// The type of the object to return - /// The action to perform - /// A function returning a Timespan defining the backoff strategy to use. - /// The maximum number of retries before bailing out. Defaults to 3. - public T Do( - Func action, - Func backoffStrategy, - int maxAttemptCount = 3) + catch (Exception ex) { - var exceptions = new List(); - - for (int attempted = 0; attempted < maxAttemptCount; attempted++) - { - try - { - if (attempted > 0) - { - Thread.Sleep(backoffStrategy()); - } - return action(); - } - catch (Exception ex) - { - exceptions.Add(ex); - } - } - throw new AggregateException(exceptions); + exceptions.Add(ex); } + } + throw new AggregateException(exceptions); } + } } diff --git a/src/coverlet.core/Helpers/SourceRootTranslator.cs b/src/coverlet.core/Helpers/SourceRootTranslator.cs index 7fea89516..d5a0dfcc7 100644 --- a/src/coverlet.core/Helpers/SourceRootTranslator.cs +++ b/src/coverlet.core/Helpers/SourceRootTranslator.cs @@ -9,165 +9,174 @@ namespace Coverlet.Core.Helpers { - [DebuggerDisplay("ProjectPath = {ProjectPath} OriginalPath = {OriginalPath}")] - internal class SourceRootMapping + [DebuggerDisplay("ProjectPath = {ProjectPath} OriginalPath = {OriginalPath}")] + internal class SourceRootMapping + { + public string ProjectPath { get; set; } + public string OriginalPath { get; set; } + } + + internal class SourceRootTranslator : ISourceRootTranslator + { + private readonly ILogger _logger; + private readonly IFileSystem _fileSystem; + private readonly Dictionary> _sourceRootMapping; + private readonly Dictionary> _sourceToDeterministicPathMapping; + private Dictionary _resolutionCacheFiles; + + public SourceRootTranslator(ILogger logger, IFileSystem fileSystem) { - public string ProjectPath { get; set; } - public string OriginalPath { get; set; } + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + _sourceRootMapping = new Dictionary>(); } - internal class SourceRootTranslator : ISourceRootTranslator + public SourceRootTranslator(string sourceMappingFile, ILogger logger, IFileSystem fileSystem) { - private readonly ILogger _logger; - private readonly IFileSystem _fileSystem; - private readonly Dictionary> _sourceRootMapping; - private readonly Dictionary> _sourceToDeterministicPathMapping; - private readonly string _mappingFileName; - private Dictionary _resolutionCacheFiles; - - public SourceRootTranslator(ILogger logger, IFileSystem fileSystem) - { - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); - _sourceRootMapping = new Dictionary>(); - } + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + _sourceRootMapping = LoadSourceRootMapping(sourceMappingFile); + } - public SourceRootTranslator(string moduleTestPath, ILogger logger, IFileSystem fileSystem, IAssemblyAdapter assemblyAdapter) + public SourceRootTranslator(string moduleTestPath, ILogger logger, IFileSystem fileSystem, IAssemblyAdapter assemblyAdapter) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + if (moduleTestPath is null) + { + throw new ArgumentNullException(nameof(moduleTestPath)); + } + if (!_fileSystem.Exists(moduleTestPath)) + { + throw new FileNotFoundException($"Module test path '{moduleTestPath}' not found", moduleTestPath); + } + + string assemblyName = assemblyAdapter.GetAssemblyName(moduleTestPath); + string mappingFileName = $"CoverletSourceRootsMapping_{assemblyName}"; + + _logger.LogInformation($"_mapping file name: '{mappingFileName}'", true); + + _sourceRootMapping = LoadSourceRootMapping(Path.Combine(Path.GetDirectoryName(moduleTestPath), mappingFileName)); + _sourceToDeterministicPathMapping = LoadSourceToDeterministicPathMapping(_sourceRootMapping); + } + + private static Dictionary> LoadSourceToDeterministicPathMapping(Dictionary> sourceRootMapping) + { + if (sourceRootMapping is null) + { + throw new ArgumentNullException(nameof(sourceRootMapping)); + } + + var sourceToDeterministicPathMapping = new Dictionary>(); + foreach (KeyValuePair> sourceRootMappingEntry in sourceRootMapping) + { + foreach (SourceRootMapping originalPath in sourceRootMappingEntry.Value) { - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); - if (moduleTestPath is null) - { - throw new ArgumentNullException(nameof(moduleTestPath)); - } - if (!_fileSystem.Exists(moduleTestPath)) - { - throw new FileNotFoundException($"Module test path '{moduleTestPath}' not found", moduleTestPath); - } + if (!sourceToDeterministicPathMapping.ContainsKey(originalPath.OriginalPath)) + { + sourceToDeterministicPathMapping.Add(originalPath.OriginalPath, new List()); + } + sourceToDeterministicPathMapping[originalPath.OriginalPath].Add(sourceRootMappingEntry.Key); + } + } - string assemblyName = assemblyAdapter.GetAssemblyName(moduleTestPath); - _mappingFileName = $"CoverletSourceRootsMapping_{assemblyName}"; + return sourceToDeterministicPathMapping; + } - _sourceRootMapping = LoadSourceRootMapping(Path.GetDirectoryName(moduleTestPath)); - _sourceToDeterministicPathMapping = LoadSourceToDeterministicPathMapping(_sourceRootMapping); + private Dictionary> LoadSourceRootMapping(string mappingFilePath) + { + var mapping = new Dictionary>(); + + if (!_fileSystem.Exists(mappingFilePath)) + { + return mapping; + } + + foreach (string mappingRecord in _fileSystem.ReadAllLines(mappingFilePath)) + { + int projectFileSeparatorIndex = mappingRecord.IndexOf('|'); + int pathMappingSeparatorIndex = mappingRecord.IndexOf('='); + if (projectFileSeparatorIndex == -1 || pathMappingSeparatorIndex == -1) + { + _logger.LogWarning($"Malformed mapping '{mappingRecord}'"); + continue; } +#pragma warning disable IDE0057 // Use range operator + string projectPath = mappingRecord.Substring(0, projectFileSeparatorIndex); + string originalPath = mappingRecord.Substring(projectFileSeparatorIndex + 1, pathMappingSeparatorIndex - projectFileSeparatorIndex - 1); + string mappedPath = mappingRecord.Substring(pathMappingSeparatorIndex + 1); +#pragma warning restore IDE0057 // Use range operator - private static Dictionary> LoadSourceToDeterministicPathMapping(Dictionary> sourceRootMapping) + if (!mapping.ContainsKey(mappedPath)) { - if (sourceRootMapping is null) - { - throw new ArgumentNullException(nameof(sourceRootMapping)); - } - - var sourceToDeterministicPathMapping = new Dictionary>(); - foreach (KeyValuePair> sourceRootMappingEntry in sourceRootMapping) - { - foreach (SourceRootMapping originalPath in sourceRootMappingEntry.Value) - { - if (!sourceToDeterministicPathMapping.ContainsKey(originalPath.OriginalPath)) - { - sourceToDeterministicPathMapping.Add(originalPath.OriginalPath, new List()); - } - sourceToDeterministicPathMapping[originalPath.OriginalPath].Add(sourceRootMappingEntry.Key); - } - } - - return sourceToDeterministicPathMapping; + mapping.Add(mappedPath, new List()); } - private Dictionary> LoadSourceRootMapping(string directory) + foreach (string path in originalPath.Split(';')) { - var mapping = new Dictionary>(); - - string mappingFilePath = Path.Combine(directory, _mappingFileName); - if (!_fileSystem.Exists(mappingFilePath)) - { - return mapping; - } - - foreach (string mappingRecord in _fileSystem.ReadAllLines(mappingFilePath)) - { - int projectFileSeparatorIndex = mappingRecord.IndexOf('|'); - int pathMappingSeparatorIndex = mappingRecord.IndexOf('='); - if (projectFileSeparatorIndex == -1 || pathMappingSeparatorIndex == -1) - { - _logger.LogWarning($"Malformed mapping '{mappingRecord}'"); - continue; - } - string projectPath = mappingRecord.Substring(0, projectFileSeparatorIndex); - string originalPath = mappingRecord.Substring(projectFileSeparatorIndex + 1, pathMappingSeparatorIndex - projectFileSeparatorIndex - 1); - string mappedPath = mappingRecord.Substring(pathMappingSeparatorIndex + 1); - - if (!mapping.ContainsKey(mappedPath)) - { - mapping.Add(mappedPath, new List()); - } - - foreach (string path in originalPath.Split(';')) - { - mapping[mappedPath].Add(new SourceRootMapping() { OriginalPath = path, ProjectPath = projectPath }); - } - } - - return mapping; + mapping[mappedPath].Add(new SourceRootMapping() { OriginalPath = path, ProjectPath = projectPath }); } + } - public bool AddMappingInCache(string originalFileName, string targetFileName) - { - if (_resolutionCacheFiles != null && _resolutionCacheFiles.ContainsKey(originalFileName)) - { - return false; - } + return mapping; + } - (_resolutionCacheFiles ??= new Dictionary()).Add(originalFileName, targetFileName); - return true; - } + public bool AddMappingInCache(string originalFileName, string targetFileName) + { + if (_resolutionCacheFiles != null && _resolutionCacheFiles.ContainsKey(originalFileName)) + { + return false; + } - public IReadOnlyList ResolvePathRoot(string pathRoot) - { - return _sourceRootMapping.TryGetValue(pathRoot, out List sourceRootMapping) ? sourceRootMapping.AsReadOnly() : null; - } + (_resolutionCacheFiles ??= new Dictionary()).Add(originalFileName, targetFileName); + return true; + } - public string ResolveFilePath(string originalFileName) - { - if (_resolutionCacheFiles != null && _resolutionCacheFiles.ContainsKey(originalFileName)) - { - return _resolutionCacheFiles[originalFileName]; - } + public IReadOnlyList ResolvePathRoot(string pathRoot) + { + return _sourceRootMapping.TryGetValue(pathRoot, out List sourceRootMapping) ? sourceRootMapping.AsReadOnly() : null; + } - foreach (KeyValuePair> mapping in _sourceRootMapping) + public string ResolveFilePath(string originalFileName) + { + if (_resolutionCacheFiles != null && _resolutionCacheFiles.ContainsKey(originalFileName)) + { + return _resolutionCacheFiles[originalFileName]; + } + + foreach (KeyValuePair> mapping in _sourceRootMapping) + { + if (originalFileName.StartsWith(mapping.Key)) + { + foreach (SourceRootMapping srm in mapping.Value) + { + string pathToCheck; + if (_fileSystem.Exists(pathToCheck = Path.GetFullPath(originalFileName.Replace(mapping.Key, srm.OriginalPath)))) { - if (originalFileName.StartsWith(mapping.Key)) - { - foreach (SourceRootMapping srm in mapping.Value) - { - string pathToCheck; - if (_fileSystem.Exists(pathToCheck = Path.GetFullPath(originalFileName.Replace(mapping.Key, srm.OriginalPath)))) - { - (_resolutionCacheFiles ??= new Dictionary()).Add(originalFileName, pathToCheck); - _logger.LogVerbose($"Mapping resolved: '{FileSystem.EscapeFileName(originalFileName)}' -> '{FileSystem.EscapeFileName(pathToCheck)}'"); - return pathToCheck; - } - } - } + (_resolutionCacheFiles ??= new Dictionary()).Add(originalFileName, pathToCheck); + _logger.LogVerbose($"Mapping resolved: '{FileSystem.EscapeFileName(originalFileName)}' -> '{FileSystem.EscapeFileName(pathToCheck)}'"); + return pathToCheck; } - return originalFileName; + } } + } + return originalFileName; + } - public string ResolveDeterministicPath(string originalFileName) + public string ResolveDeterministicPath(string originalFileName) + { + foreach (KeyValuePair> originalPath in _sourceToDeterministicPathMapping) + { + if (originalFileName.StartsWith(originalPath.Key)) { - foreach (KeyValuePair> originalPath in _sourceToDeterministicPathMapping) - { - if (originalFileName.StartsWith(originalPath.Key)) - { - foreach (string deterministicPath in originalPath.Value) - { - originalFileName = originalFileName.Replace(originalPath.Key, deterministicPath).Replace('\\', '/'); - } - } - } - - return originalFileName; + foreach (string deterministicPath in originalPath.Value) + { + originalFileName = originalFileName.Replace(originalPath.Key, deterministicPath).Replace('\\', '/'); + } } + } + + return originalFileName; } + } } diff --git a/src/coverlet.core/Instrumentation/CecilAssemblyResolver.cs b/src/coverlet.core/Instrumentation/CecilAssemblyResolver.cs index 6a781485d..0f384912b 100644 --- a/src/coverlet.core/Instrumentation/CecilAssemblyResolver.cs +++ b/src/coverlet.core/Instrumentation/CecilAssemblyResolver.cs @@ -10,258 +10,320 @@ using Microsoft.Extensions.DependencyModel; using Microsoft.Extensions.DependencyModel.Resolution; using Mono.Cecil; +using Newtonsoft.Json.Linq; +using NuGet.Versioning; namespace Coverlet.Core.Instrumentation { - /// - /// In case of testing different runtime i.e. netfx we could find netstandard.dll in folder. - /// netstandard.dll is a forward only lib, there is no IL but only forwards to "runtime" implementation. - /// For some classes implementation are in different assembly for different runtime for instance: - /// - /// For NetFx 4.7 - /// // Token: 0x2700072C RID: 1836 - /// .class extern forwarder System.Security.Cryptography.X509Certificates.StoreName - /// { - /// .assembly extern System - /// } - /// - /// For netcoreapp2.2 - /// Token: 0x2700072C RID: 1836 - /// .class extern forwarder System.Security.Cryptography.X509Certificates.StoreName - /// { - /// .assembly extern System.Security.Cryptography.X509Certificates - /// } - /// - /// There is a concrete possibility that Cecil cannot find implementation and throws StackOverflow exception https://github.com/jbevain/cecil/issues/575 - /// This custom resolver check if requested lib is a "official" netstandard.dll and load once of "current runtime" with - /// correct forwards. - /// Check compares 'assembly name' and 'public key token', because versions could differ between runtimes. - /// - internal class NetstandardAwareAssemblyResolver : DefaultAssemblyResolver - { - private static readonly System.Reflection.Assembly s_netStandardAssembly; - private static readonly string s_name; - private static readonly byte[] s_publicKeyToken; - private static readonly AssemblyDefinition s_assemblyDefinition; + /// + /// In case of testing different runtime i.e. netfx we could find netstandard.dll in folder. + /// netstandard.dll is a forward only lib, there is no IL but only forwards to "runtime" implementation. + /// For some classes implementation are in different assembly for different runtime for instance: + /// + /// For NetFx 4.7 + /// // Token: 0x2700072C RID: 1836 + /// .class extern forwarder System.Security.Cryptography.X509Certificates.StoreName + /// { + /// .assembly extern System + /// } + /// + /// For netcoreapp2.2 + /// Token: 0x2700072C RID: 1836 + /// .class extern forwarder System.Security.Cryptography.X509Certificates.StoreName + /// { + /// .assembly extern System.Security.Cryptography.X509Certificates + /// } + /// + /// There is a concrete possibility that Cecil cannot find implementation and throws StackOverflow exception https://github.com/jbevain/cecil/issues/575 + /// This custom resolver check if requested lib is a "official" netstandard.dll and load once of "current runtime" with + /// correct forwards. + /// Check compares 'assembly name' and 'public key token', because versions could differ between runtimes. + /// + internal class NetstandardAwareAssemblyResolver : DefaultAssemblyResolver + { + private static readonly System.Reflection.Assembly s_netStandardAssembly; + private static readonly string s_name; + private static readonly byte[] s_publicKeyToken; + private static readonly AssemblyDefinition s_assemblyDefinition; - private readonly string _modulePath; - private readonly Lazy _compositeResolver; - private readonly ILogger _logger; + private readonly string _modulePath; + private readonly Lazy _compositeResolver; + private readonly ILogger _logger; - static NetstandardAwareAssemblyResolver() - { - try - { - // To be sure to load information of "real" runtime netstandard implementation - s_netStandardAssembly = System.Reflection.Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "netstandard.dll")); - System.Reflection.AssemblyName name = s_netStandardAssembly.GetName(); - s_name = name.Name; - s_publicKeyToken = name.GetPublicKeyToken(); - s_assemblyDefinition = AssemblyDefinition.ReadAssembly(s_netStandardAssembly.Location); - } - catch (FileNotFoundException) - { - // netstandard not supported - } - } + static NetstandardAwareAssemblyResolver() + { + try + { + // To be sure to load information of "real" runtime netstandard implementation + s_netStandardAssembly = System.Reflection.Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "netstandard.dll")); + System.Reflection.AssemblyName name = s_netStandardAssembly.GetName(); + s_name = name.Name; + s_publicKeyToken = name.GetPublicKeyToken(); + s_assemblyDefinition = AssemblyDefinition.ReadAssembly(s_netStandardAssembly.Location); + } + catch (FileNotFoundException) + { + // netstandard not supported + } + } - public NetstandardAwareAssemblyResolver(string modulePath, ILogger logger) - { - _modulePath = modulePath; - _logger = logger; + public NetstandardAwareAssemblyResolver(string modulePath, ILogger logger) + { + _modulePath = modulePath; + _logger = logger; - // this is lazy because we cannot create AspNetCoreSharedFrameworkResolver if not on .NET Core runtime, - // runtime folders are different - _compositeResolver = new Lazy(() => new CompositeCompilationAssemblyResolver(new ICompilationAssemblyResolver[] - { + // this is lazy because we cannot create NetCoreSharedFrameworkResolver if not on .NET Core runtime, + // runtime folders are different + _compositeResolver = new Lazy(() => new CompositeCompilationAssemblyResolver(new ICompilationAssemblyResolver[] + { + new NetCoreSharedFrameworkResolver(modulePath, _logger), new AppBaseCompilationAssemblyResolver(), - new ReferenceAssemblyPathResolver(), new PackageCompilationAssemblyResolver(), - new AspNetCoreSharedFrameworkResolver(_logger) - }), true); - } - - // Check name and public key but not version that could be different - private static bool CheckIfSearchingNetstandard(AssemblyNameReference name) - { - if (s_netStandardAssembly is null) - { - return false; - } + new ReferenceAssemblyPathResolver(), + }), true); + } - if (s_name != name.Name) - { - return false; - } + // Check name and public key but not version that could be different + private static bool CheckIfSearchingNetstandard(AssemblyNameReference name) + { + if (s_netStandardAssembly is null) + { + return false; + } - if (name.PublicKeyToken.Length != s_publicKeyToken.Length) - { - return false; - } + if (s_name != name.Name) + { + return false; + } - for (int i = 0; i < name.PublicKeyToken.Length; i++) - { - if (s_publicKeyToken[i] != name.PublicKeyToken[i]) - { - return false; - } - } + if (name.PublicKeyToken.Length != s_publicKeyToken.Length) + { + return false; + } - return true; + for (int i = 0; i < name.PublicKeyToken.Length; i++) + { + if (s_publicKeyToken[i] != name.PublicKeyToken[i]) + { + return false; } + } - public override AssemblyDefinition Resolve(AssemblyNameReference name) + return true; + } + + public override AssemblyDefinition Resolve(AssemblyNameReference name) + { + if (CheckIfSearchingNetstandard(name)) + { + return s_assemblyDefinition; + } + else + { + try { - if (CheckIfSearchingNetstandard(name)) - { - return s_assemblyDefinition; - } - else - { - try - { - return base.Resolve(name); - } - catch (AssemblyResolutionException) - { - AssemblyDefinition asm = TryWithCustomResolverOnDotNetCore(name); - - if (asm != null) - { - return asm; - } - - throw; - } - } + return base.Resolve(name); } - - private static bool IsDotNetCore() + catch (AssemblyResolutionException) { - // object for .NET Framework is inside mscorlib.dll - return Path.GetFileName(typeof(object).Assembly.Location) == "System.Private.CoreLib.dll"; + AssemblyDefinition asm = TryWithCustomResolverOnDotNetCore(name); + + if (asm != null) + { + return asm; + } + + throw; } + } + } + + private static bool IsDotNetCore() + { + // object for .NET Framework is inside mscorlib.dll + return Path.GetFileName(typeof(object).Assembly.Location) == "System.Private.CoreLib.dll"; + } + + /// + /// + /// We try to manually load assembly. + /// To work test project needs to use + /// + /// + /// true + /// + /// + /// Runtime configuration file doc https://github.com/dotnet/cli/blob/master/Documentation/specs/runtime-configuration-file.md + /// + /// + internal AssemblyDefinition TryWithCustomResolverOnDotNetCore(AssemblyNameReference name) + { + _logger.LogVerbose($"TryWithCustomResolverOnDotNetCore for {name}"); + + if (!IsDotNetCore()) + { + _logger.LogVerbose($"Not a dotnet core app"); + return null; + } + + if (string.IsNullOrEmpty(_modulePath)) + { + throw new AssemblyResolutionException(name); + } - /// - /// - /// We try to manually load assembly. - /// To work test project needs to use - /// - /// - /// true - /// - /// - /// Runtime configuration file doc https://github.com/dotnet/cli/blob/master/Documentation/specs/runtime-configuration-file.md - /// - /// - internal AssemblyDefinition TryWithCustomResolverOnDotNetCore(AssemblyNameReference name) + using var contextJsonReader = new DependencyContextJsonReader(); + var libraries = new Dictionary>(); + + foreach (string fileName in Directory.GetFiles(Path.GetDirectoryName(_modulePath), "*.deps.json")) + { + using FileStream depsFile = File.OpenRead(fileName); + _logger.LogVerbose($"Loading {fileName}"); + DependencyContext dependencyContext = contextJsonReader.Read(depsFile); + foreach (CompilationLibrary library in dependencyContext.CompileLibraries) { - _logger.LogVerbose($"TryWithCustomResolverOnDotNetCore for {name}"); + // we're interested only on nuget package + if (library.Type == "project") + { + continue; + } - if (!IsDotNetCore()) + try + { + string path = library.ResolveReferencePaths(_compositeResolver.Value).FirstOrDefault(); + if (string.IsNullOrEmpty(path)) { - _logger.LogVerbose($"Not a dotnet core app"); - return null; + continue; } - if (string.IsNullOrEmpty(_modulePath)) + // We could load more than one deps file, we need to check if lib is already found + if (!libraries.ContainsKey(library.Name)) { - throw new AssemblyResolutionException(name); + libraries.Add(library.Name, new Lazy(() => AssemblyDefinition.ReadAssembly(path, new ReaderParameters() { AssemblyResolver = this }))); } + } + catch (Exception ex) + { + // if we don't find a lib go on + _logger.LogVerbose($"TryWithCustomResolverOnDotNetCore exception: {ex}"); + } + } + } - using var contextJsonReader = new DependencyContextJsonReader(); - var libraries = new Dictionary>(); + if (libraries.TryGetValue(name.Name, out Lazy asm)) + { + return asm.Value; + } - foreach (string fileName in Directory.GetFiles(Path.GetDirectoryName(_modulePath), "*.deps.json")) - { - using FileStream depsFile = File.OpenRead(fileName); - _logger.LogVerbose($"Loading {fileName}"); - DependencyContext dependencyContext = contextJsonReader.Read(depsFile); - foreach (CompilationLibrary library in dependencyContext.CompileLibraries) - { - // we're interested only on nuget package - if (library.Type == "project") - { - continue; - } - - try - { - string path = library.ResolveReferencePaths(_compositeResolver.Value).FirstOrDefault(); - if (string.IsNullOrEmpty(path)) - { - continue; - } - - // We could load more than one deps file, we need to check if lib is already found - if (!libraries.ContainsKey(library.Name)) - { - libraries.Add(library.Name, new Lazy(() => AssemblyDefinition.ReadAssembly(path, new ReaderParameters() { AssemblyResolver = this }))); - } - } - catch (Exception ex) - { - // if we don't find a lib go on - _logger.LogVerbose($"TryWithCustomResolverOnDotNetCore exception: {ex}"); - } - } - } + throw new CecilAssemblyResolutionException($"AssemblyResolutionException for '{name}'. Try to add true to test projects or pass '/p:CopyLocalLockFileAssemblies=true' option to the 'dotnet test' command-line", new AssemblyResolutionException(name)); + } + } - if (libraries.TryGetValue(name.Name, out Lazy asm)) - { - return asm.Value; - } + internal class NetCoreSharedFrameworkResolver : ICompilationAssemblyResolver + { + private readonly List _aspNetSharedFrameworkDirs = new(); + private readonly ILogger _logger; - throw new CecilAssemblyResolutionException($"AssemblyResolutionException for '{name}'. Try to add true to test projects or pass '/p:CopyLocalLockFileAssemblies=true' option to the 'dotnet test' command-line", new AssemblyResolutionException(name)); - } + public NetCoreSharedFrameworkResolver(string modulePath, ILogger logger) + { + _logger = logger; + + string runtimeConfigFile = Path.Combine( + Path.GetDirectoryName(modulePath)!, + Path.GetFileNameWithoutExtension(modulePath) + ".runtimeconfig.json"); + if (!File.Exists(runtimeConfigFile)) + { + return; + } + + var reader = new RuntimeConfigurationReader(runtimeConfigFile); + IEnumerable<(string Name, string Version)> referencedFrameworks = reader.GetFrameworks(); + string runtimePath = Path.GetDirectoryName(typeof(object).Assembly.Location); + string runtimeRootPath = Path.GetFullPath(Path.Combine(runtimePath!, "..", "..")); + foreach ((string frameworkName, string frameworkVersion) in referencedFrameworks) + { + var semVersion = NuGetVersion.Parse(frameworkVersion); + var directory = new DirectoryInfo(Path.Combine(runtimeRootPath, frameworkName)); + string majorVersion = $"{semVersion.Major}.{semVersion.Minor}."; +#pragma warning disable IDE0057 // Use range operator + uint latestVersion = directory.GetDirectories().Where(x => x.Name.StartsWith(majorVersion)) + .Select(x => Convert.ToUInt32(x.Name.Substring(majorVersion.Length))).Max(); +#pragma warning restore IDE0057 // Use range operator + _aspNetSharedFrameworkDirs.Add(Directory.GetDirectories(directory.FullName, majorVersion + $"{latestVersion}*", SearchOption.TopDirectoryOnly)[0]); + } + + _logger.LogVerbose("NetCoreSharedFrameworkResolver search paths:"); + foreach (string searchPath in _aspNetSharedFrameworkDirs) + { + _logger.LogVerbose(searchPath); + } } - internal class AspNetCoreSharedFrameworkResolver : ICompilationAssemblyResolver + public bool TryResolveAssemblyPaths(CompilationLibrary library, List assemblies) { - private readonly string[] _aspNetSharedFrameworkDirs; - private readonly ILogger _logger; + string dllName = $"{library.Name}.dll"; - public AspNetCoreSharedFrameworkResolver(ILogger logger) + foreach (string sharedFrameworkPath in _aspNetSharedFrameworkDirs) + { + if (!Directory.Exists(sharedFrameworkPath)) { - _logger = logger; - string runtimeRootPath = Path.GetDirectoryName(typeof(object).Assembly.Location); - string runtimeVersion = runtimeRootPath.Substring(runtimeRootPath.LastIndexOf(Path.DirectorySeparatorChar) + 1); - _aspNetSharedFrameworkDirs = new string[] - { - Path.GetFullPath(Path.Combine(runtimeRootPath,"../../Microsoft.AspNetCore.All", runtimeVersion)), - Path.GetFullPath(Path.Combine(runtimeRootPath, "../../Microsoft.AspNetCore.App", runtimeVersion)) - }; - - _logger.LogVerbose("AspNetCoreSharedFrameworkResolver search paths:"); - foreach (string searchPath in _aspNetSharedFrameworkDirs) - { - _logger.LogVerbose(searchPath); - } + continue; } - public bool TryResolveAssemblyPaths(CompilationLibrary library, List assemblies) + string[] files = Directory.GetFiles(sharedFrameworkPath); + foreach (string file in files) { - string dllName = $"{library.Name}.dll"; + if (Path.GetFileName(file).Equals(dllName, StringComparison.OrdinalIgnoreCase)) + { + _logger.LogVerbose($"'{dllName}' found in '{file}'"); + assemblies.Add(file); + return true; + } + } + } - foreach (string sharedFrameworkPath in _aspNetSharedFrameworkDirs) - { - if (!Directory.Exists(sharedFrameworkPath)) - { - continue; - } - - foreach (string file in Directory.GetFiles(sharedFrameworkPath)) - { - if (Path.GetFileName(file).Equals(dllName, StringComparison.OrdinalIgnoreCase)) - { - _logger.LogVerbose($"'{dllName}' found in '{file}'"); - assemblies.Add(file); - return true; - } - } - } + return false; + } + } - return false; - } + internal class RuntimeConfigurationReader + { + private readonly string _runtimeConfigFile; + + public RuntimeConfigurationReader(string runtimeConfigFile) + { + _runtimeConfigFile = runtimeConfigFile; + } + + public IEnumerable<(string Name, string Version)> GetFrameworks() + { + string jsonString = File.ReadAllText(_runtimeConfigFile); + + var jsonLoadSettings = new JsonLoadSettings() + { + CommentHandling = CommentHandling.Ignore + }; + + var configuration = JObject.Parse(jsonString, jsonLoadSettings); + + JToken rootElement = configuration.Root; + JToken runtimeOptionsElement = rootElement["runtimeOptions"]; + + if (runtimeOptionsElement?["framework"] != null) + { + return new[] { (runtimeOptionsElement["framework"]["name"]?.Value(), runtimeOptionsElement["framework"]["version"]?.Value()) }; + } + + if (runtimeOptionsElement?["frameworks"] != null) + { + return runtimeOptionsElement["frameworks"].Select(x => (x["name"]?.Value(), x["version"]?.Value())).ToList(); + } + + if (runtimeOptionsElement?["includedFrameworks"] != null) + { + return runtimeOptionsElement["includedFrameworks"].Select(x => (x["name"]?.Value(), x["version"]?.Value())).ToList(); + } + + throw new InvalidOperationException($"Unable to read runtime configuration from {_runtimeConfigFile}."); } + } } diff --git a/src/coverlet.core/Instrumentation/Instrumenter.cs b/src/coverlet.core/Instrumentation/Instrumenter.cs index df43496c9..8ef5e2349 100644 --- a/src/coverlet.core/Instrumentation/Instrumenter.cs +++ b/src/coverlet.core/Instrumentation/Instrumenter.cs @@ -21,946 +21,923 @@ namespace Coverlet.Core.Instrumentation { - internal class Instrumenter + internal class Instrumenter + { + private readonly string _module; + private readonly string _identifier; + private readonly ExcludedFilesHelper _excludedFilesHelper; + private readonly CoverageParameters _parameters; + private readonly string[] _excludedAttributes; + private readonly bool _isCoreLibrary; + private readonly ILogger _logger; + private readonly IInstrumentationHelper _instrumentationHelper; + private readonly IFileSystem _fileSystem; + private readonly ISourceRootTranslator _sourceRootTranslator; + private readonly ICecilSymbolHelper _cecilSymbolHelper; + private readonly string[] _doesNotReturnAttributes; + private readonly AssemblySearchType _excludeAssembliesWithoutSources; + private InstrumenterResult _result; + private FieldDefinition _customTrackerHitsArray; + private FieldDefinition _customTrackerHitsFilePath; + private FieldDefinition _customTrackerSingleHit; + private FieldDefinition _customTrackerFlushHitFile; + private ILProcessor _customTrackerClassConstructorIl; + private TypeDefinition _customTrackerTypeDef; + private MethodReference _customTrackerRegisterUnloadEventsMethod; + private MethodReference _customTrackerRecordHitMethod; + private List _excludedSourceFiles; + private List _branchesInCompiledGeneratedClass; + private List<(SequencePoint firstSequencePoint, SequencePoint lastSequencePoint)> _excludedMethodSections; + private List _excludedLambdaMethods; + private ReachabilityHelper _reachabilityHelper; + + public bool SkipModule { get; set; } + + public Instrumenter( + string module, + string identifier, + CoverageParameters parameters, + ILogger logger, + IInstrumentationHelper instrumentationHelper, + IFileSystem fileSystem, + ISourceRootTranslator sourceRootTranslator, + ICecilSymbolHelper cecilSymbolHelper) { - private readonly string _module; - private readonly string _identifier; - private readonly ExcludedFilesHelper _excludedFilesHelper; - private readonly CoverageParameters _parameters; - private readonly string[] _excludedAttributes; - private readonly bool _isCoreLibrary; - private readonly ILogger _logger; - private readonly IInstrumentationHelper _instrumentationHelper; - private readonly IFileSystem _fileSystem; - private readonly ISourceRootTranslator _sourceRootTranslator; - private readonly ICecilSymbolHelper _cecilSymbolHelper; - private readonly string[] _doesNotReturnAttributes; - private readonly AssemblySearchType _excludeAssembliesWithoutSources; - private InstrumenterResult _result; - private FieldDefinition _customTrackerHitsArray; - private FieldDefinition _customTrackerHitsFilePath; - private FieldDefinition _customTrackerSingleHit; - private FieldDefinition _customTrackerFlushHitFile; - private ILProcessor _customTrackerClassConstructorIl; - private TypeDefinition _customTrackerTypeDef; - private MethodReference _customTrackerRegisterUnloadEventsMethod; - private MethodReference _customTrackerRecordHitMethod; - private List _excludedSourceFiles; - private List _branchesInCompiledGeneratedClass; - private List<(MethodDefinition, int)> _excludedMethods; - private List _excludedLambdaMethods; - private List _excludedCompilerGeneratedTypes; - private ReachabilityHelper _reachabilityHelper; - - public bool SkipModule { get; set; } - - public Instrumenter( - string module, - string identifier, - CoverageParameters parameters, - ILogger logger, - IInstrumentationHelper instrumentationHelper, - IFileSystem fileSystem, - ISourceRootTranslator sourceRootTranslator, - ICecilSymbolHelper cecilSymbolHelper) - { - _module = module; - _identifier = identifier; - _parameters = parameters; - _excludedFilesHelper = new ExcludedFilesHelper(parameters.ExcludedSourceFiles, logger); - _excludedAttributes = PrepareAttributes(parameters.ExcludeAttributes, nameof(ExcludeFromCoverageAttribute), nameof(ExcludeFromCodeCoverageAttribute)); - _isCoreLibrary = Path.GetFileNameWithoutExtension(_module) == "System.Private.CoreLib"; - _logger = logger; - _instrumentationHelper = instrumentationHelper; - _fileSystem = fileSystem; - _sourceRootTranslator = sourceRootTranslator; - _cecilSymbolHelper = cecilSymbolHelper; - _doesNotReturnAttributes = PrepareAttributes(parameters.DoesNotReturnAttributes); - _excludeAssembliesWithoutSources = DetermineHeuristics(parameters.ExcludeAssembliesWithoutSources); - } - - private AssemblySearchType DetermineHeuristics(string parametersExcludeAssembliesWithoutSources) - { - if (Enum.TryParse(parametersExcludeAssembliesWithoutSources, true, out AssemblySearchType option)) - { - return option; - } - return AssemblySearchType.MissingAll; - } + _module = module; + _identifier = identifier; + _parameters = parameters; + _excludedFilesHelper = new ExcludedFilesHelper(parameters.ExcludedSourceFiles, logger); + _excludedAttributes = PrepareAttributes(parameters.ExcludeAttributes, nameof(ExcludeFromCoverageAttribute), nameof(ExcludeFromCodeCoverageAttribute)); + _isCoreLibrary = Path.GetFileNameWithoutExtension(_module) == "System.Private.CoreLib"; + _logger = logger; + _instrumentationHelper = instrumentationHelper; + _fileSystem = fileSystem; + _sourceRootTranslator = sourceRootTranslator; + _cecilSymbolHelper = cecilSymbolHelper; + _doesNotReturnAttributes = PrepareAttributes(parameters.DoesNotReturnAttributes); + _excludeAssembliesWithoutSources = DetermineHeuristics(parameters.ExcludeAssembliesWithoutSources); + } + + private AssemblySearchType DetermineHeuristics(string parametersExcludeAssembliesWithoutSources) + { + if (Enum.TryParse(parametersExcludeAssembliesWithoutSources, true, out AssemblySearchType option)) + { + return option; + } + return AssemblySearchType.MissingAll; + } + + private static string[] PrepareAttributes(IEnumerable providedAttrs, params string[] defaultAttrs) + { + return + (providedAttrs ?? Array.Empty()) + // In case the attribute class ends in "Attribute", but it wasn't specified. + // Both names are included (if it wasn't specified) because the attribute class might not actually end in the prefix. + .SelectMany(a => a.EndsWith("Attribute") ? new[] { a } : new[] { a, $"{a}Attribute" }) + // The default custom attributes used to exclude from coverage. + .Union(defaultAttrs) + .ToArray(); + } - private static string[] PrepareAttributes(IEnumerable providedAttrs, params string[] defaultAttrs) + public bool CanInstrument() + { + try + { + if (_instrumentationHelper.HasPdb(_module, out bool embeddedPdb)) { - return - (providedAttrs ?? Array.Empty()) - // In case the attribute class ends in "Attribute", but it wasn't specified. - // Both names are included (if it wasn't specified) because the attribute class might not actually end in the prefix. - .SelectMany(a => a.EndsWith("Attribute") ? new[] { a } : new[] { a, $"{a}Attribute" }) - // The default custom attributes used to exclude from coverage. - .Union(defaultAttrs) - .ToArray(); + if (_excludeAssembliesWithoutSources.Equals(AssemblySearchType.None)) + { + return true; + } + + if (embeddedPdb) + { + return _instrumentationHelper.EmbeddedPortablePdbHasLocalSource(_module, _excludeAssembliesWithoutSources); + } + else + { + return _instrumentationHelper.PortablePdbHasLocalSource(_module, _excludeAssembliesWithoutSources); + } } - - public bool CanInstrument() + else { - try - { - if (_instrumentationHelper.HasPdb(_module, out bool embeddedPdb)) - { - if (_excludeAssembliesWithoutSources.Equals(AssemblySearchType.None)) - { - return true; - } - - if (embeddedPdb) - { - return _instrumentationHelper.EmbeddedPortablePdbHasLocalSource(_module, _excludeAssembliesWithoutSources); - } - else - { - return _instrumentationHelper.PortablePdbHasLocalSource(_module, _excludeAssembliesWithoutSources); - } - } - else - { - return false; - } - } - catch (Exception ex) - { - _logger.LogWarning($"Unable to instrument module: '{_module}'\n{ex}"); - return false; - } + return false; } + } + catch (Exception ex) + { + _logger.LogWarning($"Unable to instrument module: '{_module}'\n{ex}"); + return false; + } + } - public InstrumenterResult Instrument() + public InstrumenterResult Instrument() + { + string hitsFilePath = Path.Combine( + Path.GetTempPath(), + Path.GetFileNameWithoutExtension(_module) + "_" + _identifier + ); + + _result = new InstrumenterResult + { + Module = Path.GetFileNameWithoutExtension(_module), + HitsFilePath = hitsFilePath, + ModulePath = _module + }; + + InstrumentModule(); + + if (_excludedSourceFiles != null) + { + foreach (string sourceFile in _excludedSourceFiles) { - string hitsFilePath = Path.Combine( - Path.GetTempPath(), - Path.GetFileNameWithoutExtension(_module) + "_" + _identifier - ); + _logger.LogVerbose($"Excluded source file: '{FileSystem.EscapeFileName(sourceFile)}'"); + } + } - _result = new InstrumenterResult - { - Module = Path.GetFileNameWithoutExtension(_module), - HitsFilePath = hitsFilePath, - ModulePath = _module - }; + _result.BranchesInCompiledGeneratedClass = _branchesInCompiledGeneratedClass == null ? Array.Empty() : _branchesInCompiledGeneratedClass.ToArray(); - InstrumentModule(); + return _result; + } - if (_excludedSourceFiles != null) - { - foreach (string sourceFile in _excludedSourceFiles) - { - _logger.LogVerbose($"Excluded source file: '{FileSystem.EscapeFileName(sourceFile)}'"); - } - } + // If current type or one of his parent is excluded we'll exclude it + // If I'm out every my children and every children of my children will be out + private bool IsTypeExcluded(TypeDefinition type) + { + for (TypeDefinition current = type; current != null; current = current.DeclaringType) + { + // Check exclude attribute and filters + if (current.CustomAttributes.Any(IsExcludeAttribute) || _instrumentationHelper.IsTypeExcluded(_module, current.FullName, _parameters.ExcludeFilters)) + { + return true; + } + } - _result.BranchesInCompiledGeneratedClass = _branchesInCompiledGeneratedClass == null ? Array.Empty() : _branchesInCompiledGeneratedClass.ToArray(); + return false; + } - return _result; - } + // Instrumenting Interlocked which is used for recording hits would cause an infinite loop. + private bool Is_System_Threading_Interlocked_CoreLib_Type(TypeDefinition type) + { + return _isCoreLibrary && type.FullName == "System.Threading.Interlocked"; + } - // If current type or one of his parent is excluded we'll exclude it - // If I'm out every my children and every children of my children will be out - private bool IsTypeExcluded(TypeDefinition type) - { - for (TypeDefinition current = type; current != null; current = current.DeclaringType) - { - // Check exclude attribute and filters - if (current.CustomAttributes.Any(IsExcludeAttribute) || _instrumentationHelper.IsTypeExcluded(_module, current.FullName, _parameters.ExcludeFilters)) - { - return true; - } - } + // Have to do this before we start writing to a module, as we'll get into file + // locking issues if we do it while writing. + private void CreateReachabilityHelper() + { + using Stream stream = _fileSystem.NewFileStream(_module, FileMode.Open, FileAccess.Read); + using var resolver = new NetstandardAwareAssemblyResolver(_module, _logger); + resolver.AddSearchDirectory(Path.GetDirectoryName(_module)); + var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }; + if (_isCoreLibrary) + { + parameters.MetadataImporterProvider = new CoreLibMetadataImporterProvider(); + } + + using var module = ModuleDefinition.ReadModule(stream, parameters); + _reachabilityHelper = ReachabilityHelper.CreateForModule(module, _doesNotReturnAttributes, _logger); + } - return false; + private void InstrumentModule() + { + CreateReachabilityHelper(); + + using Stream stream = _fileSystem.NewFileStream(_module, FileMode.Open, FileAccess.ReadWrite); + using var resolver = new NetstandardAwareAssemblyResolver(_module, _logger); + resolver.AddSearchDirectory(Path.GetDirectoryName(_module)); + var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }; + if (_isCoreLibrary) + { + parameters.MetadataImporterProvider = new CoreLibMetadataImporterProvider(); + } + + using var module = ModuleDefinition.ReadModule(stream, parameters); + foreach (CustomAttribute customAttribute in module.Assembly.CustomAttributes) + { + if (IsExcludeAttribute(customAttribute)) + { + _logger.LogVerbose($"Excluded module: '{module}' for assembly level attribute {customAttribute.AttributeType.FullName}"); + SkipModule = true; + return; } - - // Instrumenting Interlocked which is used for recording hits would cause an infinite loop. - private bool Is_System_Threading_Interlocked_CoreLib_Type(TypeDefinition type) + } + + bool containsAppContext = module.GetType(nameof(System), nameof(AppContext)) != null; + IEnumerable types = module.GetTypes(); + AddCustomModuleTrackerToModule(module); + + CustomDebugInformation sourceLinkDebugInfo = module.CustomDebugInformations.FirstOrDefault(c => c.Kind == CustomDebugInformationKind.SourceLink); + if (sourceLinkDebugInfo != null) + { + _result.SourceLink = ((SourceLinkDebugInformation)sourceLinkDebugInfo).Content; + } + + foreach (TypeDefinition type in types) + { + if ( + !Is_System_Threading_Interlocked_CoreLib_Type(type) && + !IsTypeExcluded(type) && + _instrumentationHelper.IsTypeIncluded(_module, type.FullName, _parameters.IncludeFilters) + ) { - return _isCoreLibrary && type.FullName == "System.Threading.Interlocked"; + InstrumentType(type); } - - // Have to do this before we start writing to a module, as we'll get into file - // locking issues if we do it while writing. - private void CreateReachabilityHelper() + } + + // Fixup the custom tracker class constructor, according to all instrumented types + if (_customTrackerRegisterUnloadEventsMethod == null) + { + _customTrackerRegisterUnloadEventsMethod = new MethodReference( + nameof(ModuleTrackerTemplate.RegisterUnloadEvents), module.TypeSystem.Void, _customTrackerTypeDef); + } + + Instruction lastInstr = _customTrackerClassConstructorIl.Body.Instructions.Last(); + + if (!containsAppContext) + { + // For "normal" cases, where the instrumented assembly is not the core library, we add a call to + // RegisterUnloadEvents to the static constructor of the generated custom tracker. Due to static + // initialization constraints, the core library is handled separately below. + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Call, _customTrackerRegisterUnloadEventsMethod)); + } + + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldc_I4, _result.HitCandidates.Count)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Newarr, module.TypeSystem.Int32)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerHitsArray)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldstr, _result.HitsFilePath)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerHitsFilePath)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(_parameters.SingleHit ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerSingleHit)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldc_I4_1)); + _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerFlushHitFile)); + + if (containsAppContext) + { + // Handle the core library by instrumenting System.AppContext.OnProcessExit to directly call + // the UnloadModule method of the custom tracker type. This avoids loops between the static + // initialization of the custom tracker and the static initialization of the hosting AppDomain + // (which for the core library case will be instrumented code). + var eventArgsType = new TypeReference(nameof(System), nameof(EventArgs), module, module.TypeSystem.CoreLibrary); + var customTrackerUnloadModule = new MethodReference(nameof(ModuleTrackerTemplate.UnloadModule), module.TypeSystem.Void, _customTrackerTypeDef); + customTrackerUnloadModule.Parameters.Add(new ParameterDefinition(module.TypeSystem.Object)); + customTrackerUnloadModule.Parameters.Add(new ParameterDefinition(eventArgsType)); + + var appContextType = new TypeReference(nameof(System), nameof(AppContext), module, module.TypeSystem.CoreLibrary); + MethodDefinition onProcessExitMethod = new MethodReference("OnProcessExit", module.TypeSystem.Void, appContextType).Resolve(); + ILProcessor onProcessExitIl = onProcessExitMethod.Body.GetILProcessor(); + + // Put the OnProcessExit body inside try/finally to ensure the call to the UnloadModule. + Instruction lastInst = onProcessExitMethod.Body.Instructions.Last(); + var firstNullParam = Instruction.Create(OpCodes.Ldnull); + var secondNullParam = Instruction.Create(OpCodes.Ldnull); + var callUnload = Instruction.Create(OpCodes.Call, customTrackerUnloadModule); + onProcessExitIl.InsertAfter(lastInst, firstNullParam); + onProcessExitIl.InsertAfter(firstNullParam, secondNullParam); + onProcessExitIl.InsertAfter(secondNullParam, callUnload); + var endFinally = Instruction.Create(OpCodes.Endfinally); + onProcessExitIl.InsertAfter(callUnload, endFinally); + Instruction ret = onProcessExitIl.Create(OpCodes.Ret); + Instruction leaveAfterFinally = onProcessExitIl.Create(OpCodes.Leave, ret); + onProcessExitIl.InsertAfter(endFinally, ret); + foreach (Instruction inst in onProcessExitMethod.Body.Instructions.ToArray()) { - using Stream stream = _fileSystem.NewFileStream(_module, FileMode.Open, FileAccess.Read); - using var resolver = new NetstandardAwareAssemblyResolver(_module, _logger); - resolver.AddSearchDirectory(Path.GetDirectoryName(_module)); - var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }; - if (_isCoreLibrary) - { - parameters.MetadataImporterProvider = new CoreLibMetadataImporterProvider(); - } + // Patch ret to leave after the finally + if (inst.OpCode == OpCodes.Ret && inst != ret) + { + Instruction leaveBodyInstAfterFinally = onProcessExitIl.Create(OpCodes.Leave, ret); + Instruction prevInst = inst.Previous; + onProcessExitMethod.Body.Instructions.Remove(inst); + onProcessExitIl.InsertAfter(prevInst, leaveBodyInstAfterFinally); + } + } + var handler = new ExceptionHandler(ExceptionHandlerType.Finally) + { + TryStart = onProcessExitIl.Body.Instructions.First(), + TryEnd = firstNullParam, + HandlerStart = firstNullParam, + HandlerEnd = ret + }; + + onProcessExitMethod.Body.ExceptionHandlers.Add(handler); + } + + module.Write(stream, new WriterParameters { WriteSymbols = true }); + } + + private void AddCustomModuleTrackerToModule(ModuleDefinition module) + { + using (var coverletInstrumentationAssembly = AssemblyDefinition.ReadAssembly(typeof(ModuleTrackerTemplate).Assembly.Location)) + { + TypeDefinition moduleTrackerTemplate = coverletInstrumentationAssembly.MainModule.GetType( + "Coverlet.Core.Instrumentation", nameof(ModuleTrackerTemplate)); - using var module = ModuleDefinition.ReadModule(stream, parameters); - _reachabilityHelper = ReachabilityHelper.CreateForModule(module, _doesNotReturnAttributes, _logger); + _customTrackerTypeDef = new TypeDefinition( + "Coverlet.Core.Instrumentation.Tracker", Path.GetFileNameWithoutExtension(module.Name) + "_" + _identifier, moduleTrackerTemplate.Attributes); + + _customTrackerTypeDef.BaseType = module.TypeSystem.Object; + foreach (FieldDefinition fieldDef in moduleTrackerTemplate.Fields) + { + var fieldClone = new FieldDefinition(fieldDef.Name, fieldDef.Attributes, fieldDef.FieldType); + fieldClone.FieldType = module.ImportReference(fieldDef.FieldType); + + _customTrackerTypeDef.Fields.Add(fieldClone); + + if (fieldClone.Name == nameof(ModuleTrackerTemplate.HitsArray)) + _customTrackerHitsArray = fieldClone; + else if (fieldClone.Name == nameof(ModuleTrackerTemplate.HitsFilePath)) + _customTrackerHitsFilePath = fieldClone; + else if (fieldClone.Name == nameof(ModuleTrackerTemplate.SingleHit)) + _customTrackerSingleHit = fieldClone; + else if (fieldClone.Name == nameof(ModuleTrackerTemplate.FlushHitFile)) + _customTrackerFlushHitFile = fieldClone; } - private void InstrumentModule() + foreach (MethodDefinition methodDef in moduleTrackerTemplate.Methods) { - CreateReachabilityHelper(); + var methodOnCustomType = new MethodDefinition(methodDef.Name, methodDef.Attributes, methodDef.ReturnType); - using Stream stream = _fileSystem.NewFileStream(_module, FileMode.Open, FileAccess.ReadWrite); - using var resolver = new NetstandardAwareAssemblyResolver(_module, _logger); - resolver.AddSearchDirectory(Path.GetDirectoryName(_module)); - var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }; - if (_isCoreLibrary) - { - parameters.MetadataImporterProvider = new CoreLibMetadataImporterProvider(); - } + foreach (ParameterDefinition parameter in methodDef.Parameters) + { + methodOnCustomType.Parameters.Add(new ParameterDefinition(module.ImportReference(parameter.ParameterType))); + } - using var module = ModuleDefinition.ReadModule(stream, parameters); - foreach (CustomAttribute customAttribute in module.Assembly.CustomAttributes) - { - if (IsExcludeAttribute(customAttribute)) - { - _logger.LogVerbose($"Excluded module: '{module}' for assembly level attribute {customAttribute.AttributeType.FullName}"); - SkipModule = true; - return; - } - } + foreach (VariableDefinition variable in methodDef.Body.Variables) + { + methodOnCustomType.Body.Variables.Add(new VariableDefinition(module.ImportReference(variable.VariableType))); + } - bool containsAppContext = module.GetType(nameof(System), nameof(AppContext)) != null; - IEnumerable types = module.GetTypes(); - AddCustomModuleTrackerToModule(module); + methodOnCustomType.Body.InitLocals = methodDef.Body.InitLocals; - CustomDebugInformation sourceLinkDebugInfo = module.CustomDebugInformations.FirstOrDefault(c => c.Kind == CustomDebugInformationKind.SourceLink); - if (sourceLinkDebugInfo != null) + ILProcessor ilProcessor = methodOnCustomType.Body.GetILProcessor(); + if (methodDef.Name == ".cctor") + _customTrackerClassConstructorIl = ilProcessor; + + foreach (Instruction instr in methodDef.Body.Instructions) + { + if (instr.Operand is MethodReference methodReference) { - _result.SourceLink = ((SourceLinkDebugInformation)sourceLinkDebugInfo).Content; - } + if (!methodReference.FullName.Contains(moduleTrackerTemplate.Namespace)) + { + // External method references, just import then + instr.Operand = module.ImportReference(methodReference); + } + else + { + // Move to the custom type + var updatedMethodReference = new MethodReference(methodReference.Name, methodReference.ReturnType, _customTrackerTypeDef); + foreach (ParameterDefinition parameter in methodReference.Parameters) + updatedMethodReference.Parameters.Add(new ParameterDefinition(parameter.Name, parameter.Attributes, module.ImportReference(parameter.ParameterType))); - foreach (TypeDefinition type in types) + instr.Operand = updatedMethodReference; + } + } + else if (instr.Operand is FieldReference fieldReference) { - if ( - !Is_System_Threading_Interlocked_CoreLib_Type(type) && - !IsTypeExcluded(type) && - _instrumentationHelper.IsTypeIncluded(_module, type.FullName, _parameters.IncludeFilters) - ) - { - if (IsSynthesizedMemberToBeExcluded(type)) - { - (_excludedCompilerGeneratedTypes ??= new List()).Add(type.FullName); - } - else - { - InstrumentType(type); - } - } + instr.Operand = _customTrackerTypeDef.Fields.Single(fd => fd.Name == fieldReference.Name); } - - // Fixup the custom tracker class constructor, according to all instrumented types - if (_customTrackerRegisterUnloadEventsMethod == null) + else if (instr.Operand is TypeReference typeReference) { - _customTrackerRegisterUnloadEventsMethod = new MethodReference( - nameof(ModuleTrackerTemplate.RegisterUnloadEvents), module.TypeSystem.Void, _customTrackerTypeDef); + instr.Operand = module.ImportReference(typeReference); } - Instruction lastInstr = _customTrackerClassConstructorIl.Body.Instructions.Last(); + ilProcessor.Append(instr); + } - if (!containsAppContext) + foreach (ExceptionHandler handler in methodDef.Body.ExceptionHandlers) + { + if (handler.CatchType != null) { - // For "normal" cases, where the instrumented assembly is not the core library, we add a call to - // RegisterUnloadEvents to the static constructor of the generated custom tracker. Due to static - // initialization constraints, the core library is handled separately below. - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Call, _customTrackerRegisterUnloadEventsMethod)); + handler.CatchType = module.ImportReference(handler.CatchType); } - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldc_I4, _result.HitCandidates.Count)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Newarr, module.TypeSystem.Int32)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerHitsArray)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldstr, _result.HitsFilePath)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerHitsFilePath)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(_parameters.SingleHit ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerSingleHit)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Ldc_I4_1)); - _customTrackerClassConstructorIl.InsertBefore(lastInstr, Instruction.Create(OpCodes.Stsfld, _customTrackerFlushHitFile)); - - if (containsAppContext) - { - // Handle the core library by instrumenting System.AppContext.OnProcessExit to directly call - // the UnloadModule method of the custom tracker type. This avoids loops between the static - // initialization of the custom tracker and the static initialization of the hosting AppDomain - // (which for the core library case will be instrumented code). - var eventArgsType = new TypeReference(nameof(System), nameof(EventArgs), module, module.TypeSystem.CoreLibrary); - var customTrackerUnloadModule = new MethodReference(nameof(ModuleTrackerTemplate.UnloadModule), module.TypeSystem.Void, _customTrackerTypeDef); - customTrackerUnloadModule.Parameters.Add(new ParameterDefinition(module.TypeSystem.Object)); - customTrackerUnloadModule.Parameters.Add(new ParameterDefinition(eventArgsType)); - - var appContextType = new TypeReference(nameof(System), nameof(AppContext), module, module.TypeSystem.CoreLibrary); - MethodDefinition onProcessExitMethod = new MethodReference("OnProcessExit", module.TypeSystem.Void, appContextType).Resolve(); - ILProcessor onProcessExitIl = onProcessExitMethod.Body.GetILProcessor(); - - // Put the OnProcessExit body inside try/finally to ensure the call to the UnloadModule. - Instruction lastInst = onProcessExitMethod.Body.Instructions.Last(); - var firstNullParam = Instruction.Create(OpCodes.Ldnull); - var secondNullParam = Instruction.Create(OpCodes.Ldnull); - var callUnload = Instruction.Create(OpCodes.Call, customTrackerUnloadModule); - onProcessExitIl.InsertAfter(lastInst, firstNullParam); - onProcessExitIl.InsertAfter(firstNullParam, secondNullParam); - onProcessExitIl.InsertAfter(secondNullParam, callUnload); - var endFinally = Instruction.Create(OpCodes.Endfinally); - onProcessExitIl.InsertAfter(callUnload, endFinally); - Instruction ret = onProcessExitIl.Create(OpCodes.Ret); - Instruction leaveAfterFinally = onProcessExitIl.Create(OpCodes.Leave, ret); - onProcessExitIl.InsertAfter(endFinally, ret); - foreach (Instruction inst in onProcessExitMethod.Body.Instructions.ToArray()) - { - // Patch ret to leave after the finally - if (inst.OpCode == OpCodes.Ret && inst != ret) - { - Instruction leaveBodyInstAfterFinally = onProcessExitIl.Create(OpCodes.Leave, ret); - Instruction prevInst = inst.Previous; - onProcessExitMethod.Body.Instructions.Remove(inst); - onProcessExitIl.InsertAfter(prevInst, leaveBodyInstAfterFinally); - } - } - var handler = new ExceptionHandler(ExceptionHandlerType.Finally) - { - TryStart = onProcessExitIl.Body.Instructions.First(), - TryEnd = firstNullParam, - HandlerStart = firstNullParam, - HandlerEnd = ret - }; - - onProcessExitMethod.Body.ExceptionHandlers.Add(handler); - } + methodOnCustomType.Body.ExceptionHandlers.Add(handler); + } - module.Write(stream, new WriterParameters { WriteSymbols = true }); + _customTrackerTypeDef.Methods.Add(methodOnCustomType); } - private void AddCustomModuleTrackerToModule(ModuleDefinition module) - { - using (var coverletInstrumentationAssembly = AssemblyDefinition.ReadAssembly(typeof(ModuleTrackerTemplate).Assembly.Location)) - { - TypeDefinition moduleTrackerTemplate = coverletInstrumentationAssembly.MainModule.GetType( - "Coverlet.Core.Instrumentation", nameof(ModuleTrackerTemplate)); - - _customTrackerTypeDef = new TypeDefinition( - "Coverlet.Core.Instrumentation.Tracker", Path.GetFileNameWithoutExtension(module.Name) + "_" + _identifier, moduleTrackerTemplate.Attributes); - - _customTrackerTypeDef.BaseType = module.TypeSystem.Object; - foreach (FieldDefinition fieldDef in moduleTrackerTemplate.Fields) - { - var fieldClone = new FieldDefinition(fieldDef.Name, fieldDef.Attributes, fieldDef.FieldType); - fieldClone.FieldType = module.ImportReference(fieldDef.FieldType); - - _customTrackerTypeDef.Fields.Add(fieldClone); - - if (fieldClone.Name == nameof(ModuleTrackerTemplate.HitsArray)) - _customTrackerHitsArray = fieldClone; - else if (fieldClone.Name == nameof(ModuleTrackerTemplate.HitsFilePath)) - _customTrackerHitsFilePath = fieldClone; - else if (fieldClone.Name == nameof(ModuleTrackerTemplate.SingleHit)) - _customTrackerSingleHit = fieldClone; - else if (fieldClone.Name == nameof(ModuleTrackerTemplate.FlushHitFile)) - _customTrackerFlushHitFile = fieldClone; - } - - foreach (MethodDefinition methodDef in moduleTrackerTemplate.Methods) - { - var methodOnCustomType = new MethodDefinition(methodDef.Name, methodDef.Attributes, methodDef.ReturnType); - - foreach (ParameterDefinition parameter in methodDef.Parameters) - { - methodOnCustomType.Parameters.Add(new ParameterDefinition(module.ImportReference(parameter.ParameterType))); - } - - foreach (VariableDefinition variable in methodDef.Body.Variables) - { - methodOnCustomType.Body.Variables.Add(new VariableDefinition(module.ImportReference(variable.VariableType))); - } - - methodOnCustomType.Body.InitLocals = methodDef.Body.InitLocals; - - ILProcessor ilProcessor = methodOnCustomType.Body.GetILProcessor(); - if (methodDef.Name == ".cctor") - _customTrackerClassConstructorIl = ilProcessor; - - foreach (Instruction instr in methodDef.Body.Instructions) - { - if (instr.Operand is MethodReference methodReference) - { - if (!methodReference.FullName.Contains(moduleTrackerTemplate.Namespace)) - { - // External method references, just import then - instr.Operand = module.ImportReference(methodReference); - } - else - { - // Move to the custom type - var updatedMethodReference = new MethodReference(methodReference.Name, methodReference.ReturnType, _customTrackerTypeDef); - foreach (ParameterDefinition parameter in methodReference.Parameters) - updatedMethodReference.Parameters.Add(new ParameterDefinition(parameter.Name, parameter.Attributes, module.ImportReference(parameter.ParameterType))); - - instr.Operand = updatedMethodReference; - } - } - else if (instr.Operand is FieldReference fieldReference) - { - instr.Operand = _customTrackerTypeDef.Fields.Single(fd => fd.Name == fieldReference.Name); - } - else if (instr.Operand is TypeReference typeReference) - { - instr.Operand = module.ImportReference(typeReference); - } - - ilProcessor.Append(instr); - } - - foreach (ExceptionHandler handler in methodDef.Body.ExceptionHandlers) - { - if (handler.CatchType != null) - { - handler.CatchType = module.ImportReference(handler.CatchType); - } - - methodOnCustomType.Body.ExceptionHandlers.Add(handler); - } - - _customTrackerTypeDef.Methods.Add(methodOnCustomType); - } - - module.Types.Add(_customTrackerTypeDef); - } + module.Types.Add(_customTrackerTypeDef); + } - Debug.Assert(_customTrackerHitsArray != null); - Debug.Assert(_customTrackerClassConstructorIl != null); - } + Debug.Assert(_customTrackerHitsArray != null); + Debug.Assert(_customTrackerClassConstructorIl != null); + } - private bool IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(MethodDefinition method) + private bool IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(MethodDefinition method) + { + // Type compiler generated, the async state machine + TypeDefinition typeDefinition = method.DeclaringType; + if (typeDefinition.DeclaringType is null) + { + return false; + } + + // Search in type that contains async state machine, compiler generates async state machine in private nested class + foreach (MethodDefinition typeMethod in typeDefinition.DeclaringType.Methods) + { + // If we find the async state machine attribute on method + CustomAttribute attribute; + if ((attribute = typeMethod.CustomAttributes.SingleOrDefault(a => a.AttributeType.FullName == typeof(AsyncStateMachineAttribute).FullName)) != null) { - // Type compiler generated, the async state machine - TypeDefinition typeDefinition = method.DeclaringType; - if (typeDefinition.DeclaringType is null) + // If the async state machine generated by compiler is "associated" to this method we check for exclusions + // The associated type is specified on attribute constructor + // https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.asyncstatemachineattribute.-ctor?view=netcore-3.1 + if (attribute.ConstructorArguments[0].Value == method.DeclaringType) + { + if (typeMethod.CustomAttributes.Any(IsExcludeAttribute)) { - return false; + return true; } - - // Search in type that contains async state machine, compiler generates async state machine in private nested class - foreach (MethodDefinition typeMethod in typeDefinition.DeclaringType.Methods) - { - // If we find the async state machine attribute on method - CustomAttribute attribute; - if ((attribute = typeMethod.CustomAttributes.SingleOrDefault(a => a.AttributeType.FullName == typeof(AsyncStateMachineAttribute).FullName)) != null) - { - // If the async state machine generated by compiler is "associated" to this method we check for exclusions - // The associated type is specified on attribute constructor - // https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.asyncstatemachineattribute.-ctor?view=netcore-3.1 - if (attribute.ConstructorArguments[0].Value == method.DeclaringType) - { - if (typeMethod.CustomAttributes.Any(IsExcludeAttribute)) - { - return true; - } - } - } - } - return false; + } } + } + return false; + } - private void InstrumentType(TypeDefinition type) + private void InstrumentType(TypeDefinition type) + { + IEnumerable methods = type.GetMethods(); + + foreach (MethodDefinition method in methods) + { + MethodDefinition actualMethod = method; + IEnumerable customAttributes = method.CustomAttributes; + if (_instrumentationHelper.IsLocalMethod(method.Name)) +#pragma warning disable IDE0057 // Use range operator + actualMethod = methods.FirstOrDefault(m => m.Name == method.Name.Split('>')[0].Substring(1)) ?? method; +#pragma warning restore IDE0057 // Use range operator + + if (actualMethod.IsGetter || actualMethod.IsSetter) { - IEnumerable methods = type.GetMethods(); - - // We keep ordinal index because it's the way used by compiler for generated types/methods to - // avoid ambiguity - int ordinal = -1; - foreach (MethodDefinition method in methods) - { - MethodDefinition actualMethod = method; - IEnumerable customAttributes = method.CustomAttributes; - if (_instrumentationHelper.IsLocalMethod(method.Name)) - actualMethod = methods.FirstOrDefault(m => m.Name == method.Name.Split('>')[0].Substring(1)) ?? method; - - if (actualMethod.IsGetter || actualMethod.IsSetter) - { - if (_parameters.SkipAutoProps && actualMethod.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) - { - continue; - } - - PropertyDefinition prop = type.Properties.FirstOrDefault(p => p.GetMethod?.FullName.Equals(actualMethod.FullName) == true || - p.SetMethod?.FullName.Equals(actualMethod.FullName) == true); - if (prop?.HasCustomAttributes == true) - customAttributes = customAttributes.Union(prop.CustomAttributes); - } - - ordinal++; - - if (IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(method)) - { - continue; - } - - if (IsSynthesizedMemberToBeExcluded(method)) - { - continue; - } - - if (_excludedLambdaMethods != null && _excludedLambdaMethods.Contains(method.FullName)) - { - continue; - } - - if (!customAttributes.Any(IsExcludeAttribute)) - { - InstrumentMethod(method); - } - else - { - (_excludedLambdaMethods ??= new List()).AddRange(CollectLambdaMethodsInsideLocalFunction(method)); - (_excludedMethods ??= new List<(MethodDefinition, int)>()).Add((method, ordinal)); - } - } + if (_parameters.SkipAutoProps && IsCompilerGenerated(actualMethod)) + { + continue; + } + + PropertyDefinition prop = type.Properties.FirstOrDefault(p => p.GetMethod?.FullName.Equals(actualMethod.FullName) == true || + p.SetMethod?.FullName.Equals(actualMethod.FullName) == true); + if (prop?.HasCustomAttributes == true) + customAttributes = customAttributes.Union(prop.CustomAttributes); + } - IEnumerable ctors = type.GetConstructors(); - foreach (MethodDefinition ctor in ctors) - { - if (!ctor.CustomAttributes.Any(IsExcludeAttribute)) - { - InstrumentMethod(ctor); - } - } + if (IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(method)) + { + continue; } - private void InstrumentMethod(MethodDefinition method) + if (_excludedLambdaMethods != null && _excludedLambdaMethods.Contains(method.FullName)) { - string sourceFile = method.DebugInformation.SequencePoints.Select(s => _sourceRootTranslator.ResolveFilePath(s.Document.Url)).FirstOrDefault(); + continue; + } - if (string.IsNullOrEmpty(sourceFile)) return; + if (!customAttributes.Any(IsExcludeAttribute)) + { + InstrumentMethod(method); + } + else + { + (_excludedLambdaMethods ??= new List()).AddRange(CollectLambdaMethodsInsideLocalFunction(method)); + _excludedMethodSections ??= new List<(SequencePoint firstSequencePoint, SequencePoint lastSequencePoint)>(); + AnalyzeCompileGeneratedTypesForExcludedMethod(method); + CacheExcludedMethodSection(method); + } + } - if (!string.IsNullOrEmpty(sourceFile) && _excludedFilesHelper.Exclude(sourceFile)) - { - if (!(_excludedSourceFiles ??= new List()).Contains(sourceFile)) - { - _excludedSourceFiles.Add(sourceFile); - } - return; - } + IEnumerable ctors = type.GetConstructors(); + foreach (MethodDefinition ctor in ctors) + { + if (!ctor.CustomAttributes.Any(IsExcludeAttribute) && !IsCompilerGenerated(ctor)) + { + InstrumentMethod(ctor); + } + } + } - MethodBody methodBody = GetMethodBody(method); - if (methodBody == null) - return; - - if (method.IsNative) - return; - - InstrumentIL(method); - } - - /// - /// The base idea is to inject an int placeholder for every sequence point. We register source+placeholder+lines(from sequence point) for final accounting. - /// Instrumentation alg(current instruction: instruction we're analyzing): - /// 1) We get all branches for the method - /// 2) We get the sequence point of every instruction of method(start line/end line) - /// 3) We check if current instruction is reachable and coverable - /// 4) For every sequence point of an instruction we put load(int hint placeholder)+call opcode above current instruction - /// 5) We patch all jump to current instruction with first injected instruction(load) - /// 6) If current instruction is a target for a branch we inject again load(int hint placeholder)+call opcode above current instruction - /// 7) We patch all jump to current instruction with first injected instruction(load) - /// - private void InstrumentIL(MethodDefinition method) - { - method.Body.SimplifyMacros(); - ILProcessor processor = method.Body.GetILProcessor(); - int index = 0; - int count = processor.Body.Instructions.Count; - IReadOnlyList branchPoints = _cecilSymbolHelper.GetBranchPoints(method); - IDictionary targetsMap = new Dictionary(); - System.Collections.Immutable.ImmutableArray unreachableRanges = _reachabilityHelper.FindUnreachableIL(processor.Body.Instructions, processor.Body.ExceptionHandlers); - int currentUnreachableRangeIx = 0; - for (int n = 0; n < count; n++) - { - Instruction currentInstruction = processor.Body.Instructions[index]; - SequencePoint sequencePoint = method.DebugInformation.GetSequencePoint(currentInstruction); - IEnumerable targetedBranchPoints = branchPoints.Where(p => p.EndOffset == currentInstruction.Offset); - - // make sure we're looking at the correct unreachable range (if any) - int instrOffset = currentInstruction.Offset; - while (currentUnreachableRangeIx < unreachableRanges.Length && instrOffset > unreachableRanges[currentUnreachableRangeIx].EndOffset) - { - currentUnreachableRangeIx++; - } - - // determine if the unreachable - bool isUnreachable = false; - if (currentUnreachableRangeIx < unreachableRanges.Length) - { - ReachabilityHelper.UnreachableRange range = unreachableRanges[currentUnreachableRangeIx]; - isUnreachable = instrOffset >= range.StartOffset && instrOffset <= range.EndOffset; - } - - // Check is both reachable, _and_ coverable - if (isUnreachable || _cecilSymbolHelper.SkipNotCoverableInstruction(method, currentInstruction)) - { - index++; - continue; - } - - if (sequencePoint != null && !sequencePoint.IsHidden) - { - if (_cecilSymbolHelper.SkipInlineAssignedAutoProperty(_parameters.SkipAutoProps, method, currentInstruction)) - { - index++; - continue; - } - - Instruction firstInjectedInstrumentedOpCode = AddInstrumentationCode(method, processor, currentInstruction, sequencePoint); - targetsMap.Add(currentInstruction.Offset, firstInjectedInstrumentedOpCode); - - index += 2; - } - - foreach (BranchPoint branchTarget in targetedBranchPoints) - { - /* - * Skip branches with no sequence point reference for now. - * In this case for an anonymous class the compiler will dynamically create an Equals 'utility' method. - * The CecilSymbolHelper will create branch points with a start line of -1 and no document, which - * I am currently not sure how to handle. - */ - if (branchTarget.StartLine == -1 || branchTarget.Document == null) - continue; - - Instruction firstInjectedInstrumentedOpCode = AddInstrumentationCode(method, processor, currentInstruction, branchTarget); - if (!targetsMap.ContainsKey(currentInstruction.Offset)) - targetsMap.Add(currentInstruction.Offset, firstInjectedInstrumentedOpCode); - - index += 2; - } - - index++; - } + private static bool IsCompilerGenerated(IMemberDefinition member) + { + return member.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName); + } - foreach (Instruction bodyInstruction in processor.Body.Instructions) - ReplaceInstructionTarget(bodyInstruction, targetsMap); + private void InstrumentMethod(MethodDefinition method) + { + string sourceFile = method.DebugInformation.SequencePoints.Select(s => _sourceRootTranslator.ResolveFilePath(s.Document.Url)).FirstOrDefault(); - foreach (ExceptionHandler handler in processor.Body.ExceptionHandlers) - ReplaceExceptionHandlerBoundary(handler, targetsMap); + if (string.IsNullOrEmpty(sourceFile)) return; - method.Body.OptimizeMacros(); + if (!string.IsNullOrEmpty(sourceFile) && _excludedFilesHelper.Exclude(sourceFile)) + { + if (!(_excludedSourceFiles ??= new List()).Contains(sourceFile)) + { + _excludedSourceFiles.Add(sourceFile); } + return; + } - private Instruction AddInstrumentationCode(MethodDefinition method, ILProcessor processor, Instruction instruction, SequencePoint sequencePoint) - { - if (!_result.Documents.TryGetValue(_sourceRootTranslator.ResolveFilePath(sequencePoint.Document.Url), out Document document)) - { - document = new Document { Path = _sourceRootTranslator.ResolveFilePath(sequencePoint.Document.Url) }; - document.Index = _result.Documents.Count; - _result.Documents.Add(document.Path, document); - } + MethodBody methodBody = GetMethodBody(method); + if (methodBody == null) + return; - for (int i = sequencePoint.StartLine; i <= sequencePoint.EndLine; i++) - { - if (!document.Lines.ContainsKey(i)) - document.Lines.Add(i, new Line { Number = i, Class = method.DeclaringType.FullName, Method = method.FullName }); - } + if (method.IsNative) + return; - _result.HitCandidates.Add(new HitCandidate(false, document.Index, sequencePoint.StartLine, sequencePoint.EndLine)); + InstrumentIL(method); + } - return AddInstrumentationInstructions(method, processor, instruction, _result.HitCandidates.Count - 1); + /// + /// The base idea is to inject an int placeholder for every sequence point. We register source+placeholder+lines(from sequence point) for final accounting. + /// Instrumentation alg(current instruction: instruction we're analyzing): + /// 1) We get all branches for the method + /// 2) We get the sequence point of every instruction of method(start line/end line) + /// 3) We check if current instruction is reachable and coverable + /// 4) For every sequence point of an instruction we put load(int hint placeholder)+call opcode above current instruction + /// 5) We patch all jump to current instruction with first injected instruction(load) + /// 6) If current instruction is a target for a branch we inject again load(int hint placeholder)+call opcode above current instruction + /// 7) We patch all jump to current instruction with first injected instruction(load) + /// + private void InstrumentIL(MethodDefinition method) + { + method.Body.SimplifyMacros(); + ILProcessor processor = method.Body.GetILProcessor(); + int index = 0; + int count = processor.Body.Instructions.Count; + IReadOnlyList branchPoints = _cecilSymbolHelper.GetBranchPoints(method); + IDictionary targetsMap = new Dictionary(); + System.Collections.Immutable.ImmutableArray unreachableRanges = _reachabilityHelper.FindUnreachableIL(processor.Body.Instructions, processor.Body.ExceptionHandlers); + int currentUnreachableRangeIx = 0; + for (int n = 0; n < count; n++) + { + Instruction currentInstruction = processor.Body.Instructions[index]; + SequencePoint sequencePoint = method.DebugInformation.GetSequencePoint(currentInstruction); + IEnumerable targetedBranchPoints = branchPoints.Where(p => p.EndOffset == currentInstruction.Offset); + + // make sure we're looking at the correct unreachable range (if any) + int instrOffset = currentInstruction.Offset; + while (currentUnreachableRangeIx < unreachableRanges.Length && instrOffset > unreachableRanges[currentUnreachableRangeIx].EndOffset) + { + currentUnreachableRangeIx++; } - private Instruction AddInstrumentationCode(MethodDefinition method, ILProcessor processor, Instruction instruction, BranchPoint branchPoint) + // determine if the unreachable + bool isUnreachable = false; + if (currentUnreachableRangeIx < unreachableRanges.Length) { - if (!_result.Documents.TryGetValue(_sourceRootTranslator.ResolveFilePath(branchPoint.Document), out Document document)) - { - document = new Document { Path = _sourceRootTranslator.ResolveFilePath(branchPoint.Document) }; - document.Index = _result.Documents.Count; - _result.Documents.Add(document.Path, document); - } + ReachabilityHelper.UnreachableRange range = unreachableRanges[currentUnreachableRangeIx]; + isUnreachable = instrOffset >= range.StartOffset && instrOffset <= range.EndOffset; + } - var key = new BranchKey(branchPoint.StartLine, (int)branchPoint.Ordinal); - if (!document.Branches.ContainsKey(key)) - { - document.Branches.Add( - key, - new Branch - { - Number = branchPoint.StartLine, - Class = method.DeclaringType.FullName, - Method = method.FullName, - Offset = branchPoint.Offset, - EndOffset = branchPoint.EndOffset, - Path = branchPoint.Path, - Ordinal = branchPoint.Ordinal - } - ); - - if (method.DeclaringType.CustomAttributes.Any(x => x.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) - { - if (_branchesInCompiledGeneratedClass == null) - { - _branchesInCompiledGeneratedClass = new List(); - } - - if (!_branchesInCompiledGeneratedClass.Contains(method.FullName)) - { - _branchesInCompiledGeneratedClass.Add(method.FullName); - } - } - } + // Check is both reachable, _and_ coverable + if (isUnreachable || _cecilSymbolHelper.SkipNotCoverableInstruction(method, currentInstruction)) + { + index++; + continue; + } + + if (sequencePoint != null && !sequencePoint.IsHidden) + { + if (_cecilSymbolHelper.SkipInlineAssignedAutoProperty(_parameters.SkipAutoProps, method, + currentInstruction) || IsInsideExcludedMethodSection(sequencePoint)) + { + index++; + continue; + } - _result.HitCandidates.Add(new HitCandidate(true, document.Index, branchPoint.StartLine, (int)branchPoint.Ordinal)); + Instruction firstInjectedInstrumentedOpCode = AddInstrumentationCode(method, processor, currentInstruction, sequencePoint); + targetsMap.Add(currentInstruction.Offset, firstInjectedInstrumentedOpCode); - return AddInstrumentationInstructions(method, processor, instruction, _result.HitCandidates.Count - 1); + index += 2; } - private Instruction AddInstrumentationInstructions(MethodDefinition method, ILProcessor processor, Instruction instruction, int hitEntryIndex) + foreach (BranchPoint branchTarget in targetedBranchPoints) { - if (_customTrackerRecordHitMethod == null) - { - string recordHitMethodName; - if (_parameters.SingleHit) - { - recordHitMethodName = _isCoreLibrary - ? nameof(ModuleTrackerTemplate.RecordSingleHitInCoreLibrary) - : nameof(ModuleTrackerTemplate.RecordSingleHit); - } - else - { - recordHitMethodName = _isCoreLibrary - ? nameof(ModuleTrackerTemplate.RecordHitInCoreLibrary) - : nameof(ModuleTrackerTemplate.RecordHit); - } - - _customTrackerRecordHitMethod = new MethodReference( - recordHitMethodName, method.Module.TypeSystem.Void, _customTrackerTypeDef); - _customTrackerRecordHitMethod.Parameters.Add(new ParameterDefinition("hitLocationIndex", ParameterAttributes.None, method.Module.TypeSystem.Int32)); - } + /* + * Skip branches with no sequence point reference for now. + * In this case for an anonymous class the compiler will dynamically create an Equals 'utility' method. + * The CecilSymbolHelper will create branch points with a start line of -1 and no document, which + * I am currently not sure how to handle. + */ + if (branchTarget.StartLine == -1 || branchTarget.Document == null) + continue; + + Instruction firstInjectedInstrumentedOpCode = AddInstrumentationCode(method, processor, currentInstruction, branchTarget); + if (!targetsMap.ContainsKey(currentInstruction.Offset)) + targetsMap.Add(currentInstruction.Offset, firstInjectedInstrumentedOpCode); + + index += 2; + } - var indxInstr = Instruction.Create(OpCodes.Ldc_I4, hitEntryIndex); - var callInstr = Instruction.Create(OpCodes.Call, _customTrackerRecordHitMethod); + index++; + } - processor.InsertBefore(instruction, callInstr); - processor.InsertBefore(callInstr, indxInstr); + foreach (Instruction bodyInstruction in processor.Body.Instructions) + ReplaceInstructionTarget(bodyInstruction, targetsMap); - return indxInstr; - } + foreach (ExceptionHandler handler in processor.Body.ExceptionHandlers) + ReplaceExceptionHandlerBoundary(handler, targetsMap); + + method.Body.OptimizeMacros(); + } + + private Instruction AddInstrumentationCode(MethodDefinition method, ILProcessor processor, Instruction instruction, SequencePoint sequencePoint) + { + if (!_result.Documents.TryGetValue(_sourceRootTranslator.ResolveFilePath(sequencePoint.Document.Url), out Document document)) + { + document = new Document { Path = _sourceRootTranslator.ResolveFilePath(sequencePoint.Document.Url) }; + document.Index = _result.Documents.Count; + _result.Documents.Add(document.Path, document); + } + + for (int i = sequencePoint.StartLine; i <= sequencePoint.EndLine; i++) + { + if (!document.Lines.ContainsKey(i)) + document.Lines.Add(i, new Line { Number = i, Class = method.DeclaringType.FullName, Method = method.FullName }); + } + + _result.HitCandidates.Add(new HitCandidate(false, document.Index, sequencePoint.StartLine, sequencePoint.EndLine)); + + return AddInstrumentationInstructions(method, processor, instruction, _result.HitCandidates.Count - 1); + } - private static void ReplaceInstructionTarget(Instruction instruction, IDictionary targetsMap) + private Instruction AddInstrumentationCode(MethodDefinition method, ILProcessor processor, Instruction instruction, BranchPoint branchPoint) + { + if (!_result.Documents.TryGetValue(_sourceRootTranslator.ResolveFilePath(branchPoint.Document), out Document document)) + { + document = new Document { Path = _sourceRootTranslator.ResolveFilePath(branchPoint.Document) }; + document.Index = _result.Documents.Count; + _result.Documents.Add(document.Path, document); + } + + var key = new BranchKey(branchPoint.StartLine, (int)branchPoint.Ordinal); + if (!document.Branches.ContainsKey(key)) + { + document.Branches.Add( + key, + new Branch + { + Number = branchPoint.StartLine, + Class = method.DeclaringType.FullName, + Method = method.FullName, + Offset = branchPoint.Offset, + EndOffset = branchPoint.EndOffset, + Path = branchPoint.Path, + Ordinal = branchPoint.Ordinal + } + ); + + if (IsCompilerGenerated(method.DeclaringType)) { - if (instruction.Operand is Instruction operandInstruction) - { - if (targetsMap.TryGetValue(operandInstruction.Offset, out Instruction newTarget)) - { - instruction.Operand = newTarget; - } - } - else if (instruction.Operand is Instruction[] operandInstructions) - { - for (int i = 0; i < operandInstructions.Length; i++) - { - if (targetsMap.TryGetValue(operandInstructions[i].Offset, out Instruction newTarget)) - operandInstructions[i] = newTarget; - } - } + if (_branchesInCompiledGeneratedClass == null) + { + _branchesInCompiledGeneratedClass = new List(); + } + + if (!_branchesInCompiledGeneratedClass.Contains(method.FullName)) + { + _branchesInCompiledGeneratedClass.Add(method.FullName); + } } + } + + _result.HitCandidates.Add(new HitCandidate(true, document.Index, branchPoint.StartLine, (int)branchPoint.Ordinal)); - private static void ReplaceExceptionHandlerBoundary(ExceptionHandler handler, IDictionary targetsMap) + return AddInstrumentationInstructions(method, processor, instruction, _result.HitCandidates.Count - 1); + } + + private Instruction AddInstrumentationInstructions(MethodDefinition method, ILProcessor processor, Instruction instruction, int hitEntryIndex) + { + if (_customTrackerRecordHitMethod == null) + { + string recordHitMethodName; + if (_parameters.SingleHit) { - if (handler.FilterStart is not null && targetsMap.TryGetValue(handler.FilterStart.Offset, out Instruction newFilterStart)) - handler.FilterStart = newFilterStart; + recordHitMethodName = _isCoreLibrary + ? nameof(ModuleTrackerTemplate.RecordSingleHitInCoreLibrary) + : nameof(ModuleTrackerTemplate.RecordSingleHit); + } + else + { + recordHitMethodName = _isCoreLibrary + ? nameof(ModuleTrackerTemplate.RecordHitInCoreLibrary) + : nameof(ModuleTrackerTemplate.RecordHit); + } - if (handler.HandlerEnd is not null && targetsMap.TryGetValue(handler.HandlerEnd.Offset, out Instruction newHandlerEnd)) - handler.HandlerEnd = newHandlerEnd; + _customTrackerRecordHitMethod = new MethodReference( + recordHitMethodName, method.Module.TypeSystem.Void, _customTrackerTypeDef); + _customTrackerRecordHitMethod.Parameters.Add(new ParameterDefinition("hitLocationIndex", ParameterAttributes.None, method.Module.TypeSystem.Int32)); + } - if (handler.HandlerStart is not null && targetsMap.TryGetValue(handler.HandlerStart.Offset, out Instruction newHandlerStart)) - handler.HandlerStart = newHandlerStart; + var indxInstr = Instruction.Create(OpCodes.Ldc_I4, hitEntryIndex); + var callInstr = Instruction.Create(OpCodes.Call, _customTrackerRecordHitMethod); - if (handler.TryEnd is not null && targetsMap.TryGetValue(handler.TryEnd.Offset, out Instruction newTryEnd)) - handler.TryEnd = newTryEnd; + processor.InsertBefore(instruction, callInstr); + processor.InsertBefore(callInstr, indxInstr); - if (handler.TryStart is not null && targetsMap.TryGetValue(handler.TryStart.Offset, out Instruction newTryStart)) - handler.TryStart = newTryStart; - } + return indxInstr; + } - private bool IsExcludeAttribute(CustomAttribute customAttribute) + private static void ReplaceInstructionTarget(Instruction instruction, IDictionary targetsMap) + { + if (instruction.Operand is Instruction operandInstruction) + { + if (targetsMap.TryGetValue(operandInstruction.Offset, out Instruction newTarget)) { - return Array.IndexOf(_excludedAttributes, customAttribute.AttributeType.Name) != -1; + instruction.Operand = newTarget; } - - private static MethodBody GetMethodBody(MethodDefinition method) + } + else if (instruction.Operand is Instruction[] operandInstructions) + { + for (int i = 0; i < operandInstructions.Length; i++) { - try - { - return method.HasBody ? method.Body : null; - } - catch - { - return null; - } + if (targetsMap.TryGetValue(operandInstructions[i].Offset, out Instruction newTarget)) + operandInstructions[i] = newTarget; } + } + } - // Check if the member (type or method) is generated by the compiler from a method excluded from code coverage - private bool IsSynthesizedMemberToBeExcluded(IMemberDefinition definition) - { - if (_excludedMethods is null) - { - return false; - } + private static void ReplaceExceptionHandlerBoundary(ExceptionHandler handler, IDictionary targetsMap) + { + if (handler.FilterStart is not null && targetsMap.TryGetValue(handler.FilterStart.Offset, out Instruction newFilterStart)) + handler.FilterStart = newFilterStart; - TypeDefinition declaringType = definition.DeclaringType; + if (handler.HandlerEnd is not null && targetsMap.TryGetValue(handler.HandlerEnd.Offset, out Instruction newHandlerEnd)) + handler.HandlerEnd = newHandlerEnd; - // We check all parent type of current one bottom-up - while (declaringType != null) - { + if (handler.HandlerStart is not null && targetsMap.TryGetValue(handler.HandlerStart.Offset, out Instruction newHandlerStart)) + handler.HandlerStart = newHandlerStart; - // If parent type is excluded return - if (_excludedCompilerGeneratedTypes != null && - _excludedCompilerGeneratedTypes.Any(t => t == declaringType.FullName)) - { - return true; - } - - // Check methods members and compiler generated types - foreach ((MethodDefinition, int) excludedMethods in _excludedMethods) - { - // Exclude this member if declaring type is the same of the excluded method and - // the name is synthesized from the name of the excluded method. - // - if (declaringType.FullName == excludedMethods.Item1.DeclaringType.FullName && - IsSynthesizedNameOf(definition.Name, excludedMethods.Item1.Name, excludedMethods.Item2)) - { - return true; - } - } - declaringType = declaringType.DeclaringType; - } + if (handler.TryEnd is not null && targetsMap.TryGetValue(handler.TryEnd.Offset, out Instruction newTryEnd)) + handler.TryEnd = newTryEnd; + + if (handler.TryStart is not null && targetsMap.TryGetValue(handler.TryStart.Offset, out Instruction newTryStart)) + handler.TryStart = newTryStart; + } + + private bool IsExcludeAttribute(CustomAttribute customAttribute) + { + return Array.IndexOf(_excludedAttributes, customAttribute.AttributeType.Name) != -1 || + Array.IndexOf(_excludedAttributes, customAttribute.AttributeType.FullName) != -1; + } + + private static MethodBody GetMethodBody(MethodDefinition method) + { + try + { + return method.HasBody ? method.Body : null; + } + catch + { + return null; + } + } + + private bool IsInsideExcludedMethodSection(SequencePoint sequencePoint) + { + if (_excludedMethodSections is null) return false; + + bool IsInsideExcludedSection(SequencePoint firstSequencePoint, SequencePoint lastSequencePoint) + { + bool isInsideSameSourceFile = sequencePoint.Document.Url.Equals(firstSequencePoint.Document.Url); + bool isInsideExcludedMethod = sequencePoint.StartLine >= Math.Min(firstSequencePoint.StartLine, firstSequencePoint.EndLine) && + sequencePoint.StartLine <= Math.Max(lastSequencePoint.StartLine, lastSequencePoint.EndLine); + return isInsideExcludedMethod && isInsideSameSourceFile; + } + + return _excludedMethodSections + .Where(x => x is { firstSequencePoint: not null, lastSequencePoint: not null }) + .Any(x => IsInsideExcludedSection(x.firstSequencePoint, x.lastSequencePoint)); + } + + private void AnalyzeCompileGeneratedTypesForExcludedMethod(MethodDefinition method) + { + IEnumerable referencedTypes = method.CustomAttributes.Where(x => x.HasConstructorArguments) + .SelectMany(x => x.ConstructorArguments.Select(y => y.Value as TypeDefinition)); + + referencedTypes.ToList().ForEach(x => + x?.Methods.Where(y => y.FullName.Contains("MoveNext")).ToList().ForEach(CacheExcludedMethodSection) + ); + } + + private void CacheExcludedMethodSection(MethodDefinition method) + { + _excludedMethodSections.Add(( + method.DebugInformation.SequencePoints.FirstOrDefault(x => !x.IsHidden), + method.DebugInformation.SequencePoints.LastOrDefault(x => !x.IsHidden))); + } + + private static IEnumerable CollectLambdaMethodsInsideLocalFunction(MethodDefinition methodDefinition) + { + if (!methodDefinition.Name.Contains(">g__")) yield break; + + foreach (Instruction instruction in methodDefinition.Body.Instructions.ToList()) + { + if (instruction.OpCode == OpCodes.Ldftn && instruction.Operand is MethodReference mr && + mr.Name.Contains(">b__")) + { + yield return mr.FullName; + } + } + } + + /// + /// A custom importer created specifically to allow the instrumentation of System.Private.CoreLib by + /// removing the external references to netstandard that are generated when instrumenting a typical + /// assembly. + /// + private class CoreLibMetadataImporterProvider : IMetadataImporterProvider + { + public IMetadataImporter GetMetadataImporter(ModuleDefinition module) + { + return new CoreLibMetadataImporter(module); + } + + private class CoreLibMetadataImporter : IMetadataImporter + { + private readonly ModuleDefinition _module; + private readonly DefaultMetadataImporter _defaultMetadataImporter; - return false; + public CoreLibMetadataImporter(ModuleDefinition module) + { + _module = module; + _defaultMetadataImporter = new DefaultMetadataImporter(module); } - // Check if the name is synthesized by the compiler - // Refer to https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNames.cs - // to see how the compiler generate names for lambda, local function, yield or async/await expressions - internal bool IsSynthesizedNameOf(string name, string methodName, int methodOrdinal) + public AssemblyNameReference ImportReference(AssemblyNameReference reference) { - return - // Lambda method - name.IndexOf($"<{methodName}>b__{methodOrdinal}") != -1 || - // Lambda display class - name.IndexOf($"<>c__DisplayClass{methodOrdinal}_") != -1 || - // State machine - name.IndexOf($"<{methodName}>d__{methodOrdinal}") != -1 || - // Local function - (name.IndexOf($"<{methodName}>g__") != -1 && name.IndexOf($"|{methodOrdinal}_") != -1); + return _defaultMetadataImporter.ImportReference(reference); } - private static IEnumerable CollectLambdaMethodsInsideLocalFunction(MethodDefinition methodDefinition) + public TypeReference ImportReference(TypeReference type, IGenericParameterProvider context) { - if (!methodDefinition.Name.Contains(">g__")) yield break; + TypeReference importedRef = _defaultMetadataImporter.ImportReference(type, context); + importedRef.GetElementType().Scope = _module.TypeSystem.CoreLibrary; + return importedRef; + } - foreach (Instruction instruction in methodDefinition.Body.Instructions.ToList()) - { - if (instruction.OpCode == OpCodes.Ldftn && instruction.Operand is MethodReference mr && mr.Name.Contains(">b__")) - { - yield return mr.FullName; - } - } + public FieldReference ImportReference(FieldReference field, IGenericParameterProvider context) + { + FieldReference importedRef = _defaultMetadataImporter.ImportReference(field, context); + importedRef.FieldType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; + return importedRef; } - /// - /// A custom importer created specifically to allow the instrumentation of System.Private.CoreLib by - /// removing the external references to netstandard that are generated when instrumenting a typical - /// assembly. - /// - private class CoreLibMetadataImporterProvider : IMetadataImporterProvider + public MethodReference ImportReference(MethodReference method, IGenericParameterProvider context) { - public IMetadataImporter GetMetadataImporter(ModuleDefinition module) - { - return new CoreLibMetadataImporter(module); - } + MethodReference importedRef = _defaultMetadataImporter.ImportReference(method, context); + importedRef.DeclaringType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - private class CoreLibMetadataImporter : IMetadataImporter + foreach (ParameterDefinition parameter in importedRef.Parameters) + { + if (parameter.ParameterType.Scope == _module.TypeSystem.CoreLibrary) { - private readonly ModuleDefinition _module; - private readonly DefaultMetadataImporter _defaultMetadataImporter; - - public CoreLibMetadataImporter(ModuleDefinition module) - { - _module = module; - _defaultMetadataImporter = new DefaultMetadataImporter(module); - } - - public AssemblyNameReference ImportReference(AssemblyNameReference reference) - { - return _defaultMetadataImporter.ImportReference(reference); - } - - public TypeReference ImportReference(TypeReference type, IGenericParameterProvider context) - { - TypeReference importedRef = _defaultMetadataImporter.ImportReference(type, context); - importedRef.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - return importedRef; - } - - public FieldReference ImportReference(FieldReference field, IGenericParameterProvider context) - { - FieldReference importedRef = _defaultMetadataImporter.ImportReference(field, context); - importedRef.FieldType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - return importedRef; - } - - public MethodReference ImportReference(MethodReference method, IGenericParameterProvider context) - { - MethodReference importedRef = _defaultMetadataImporter.ImportReference(method, context); - importedRef.DeclaringType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - - foreach (ParameterDefinition parameter in importedRef.Parameters) - { - if (parameter.ParameterType.Scope == _module.TypeSystem.CoreLibrary) - { - continue; - } - - parameter.ParameterType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - } - - if (importedRef.ReturnType.Scope != _module.TypeSystem.CoreLibrary) - { - importedRef.ReturnType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; - } - - return importedRef; - } + continue; } + + parameter.ParameterType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; + } + + if (importedRef.ReturnType.Scope != _module.TypeSystem.CoreLibrary) + { + importedRef.ReturnType.GetElementType().Scope = _module.TypeSystem.CoreLibrary; + } + + return importedRef; } + } } + } - // Exclude files helper https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.filesystemglobbing.matcher?view=aspnetcore-2.2 - internal class ExcludedFilesHelper - { - readonly Matcher _matcher; + // Exclude files helper https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.filesystemglobbing.matcher?view=aspnetcore-2.2 + internal class ExcludedFilesHelper + { + readonly Matcher _matcher; - public ExcludedFilesHelper(string[] excludes, ILogger logger) + public ExcludedFilesHelper(string[] excludes, ILogger logger) + { + if (excludes != null && excludes.Length > 0) + { + _matcher = new Matcher(); + foreach (string excludeRule in excludes) { - if (excludes != null && excludes.Length > 0) - { - _matcher = new Matcher(); - foreach (string excludeRule in excludes) - { - if (excludeRule is null) - { - continue; - } - _matcher.AddInclude(Path.IsPathRooted(excludeRule) ? excludeRule.Substring(Path.GetPathRoot(excludeRule).Length) : excludeRule); - } - } + if (excludeRule is null) + { + continue; + } +#pragma warning disable IDE0057 // Use range operator + _matcher.AddInclude(Path.IsPathRooted(excludeRule) ? excludeRule.Substring(Path.GetPathRoot(excludeRule).Length) : excludeRule); +#pragma warning restore IDE0057 // Use range operator } + } + } - public bool Exclude(string sourceFile) - { - if (_matcher is null || sourceFile is null) - return false; + public bool Exclude(string sourceFile) + { + if (_matcher is null || sourceFile is null) + return false; - // We strip out drive because it doesn't work with globbing - return _matcher.Match(Path.IsPathRooted(sourceFile) ? sourceFile.Substring(Path.GetPathRoot(sourceFile).Length) : sourceFile).HasMatches; - } + // We strip out drive because it doesn't work with globbing +#pragma warning disable IDE0057 // Use range operator + return _matcher.Match(Path.IsPathRooted(sourceFile) ? sourceFile.Substring(Path.GetPathRoot(sourceFile).Length) : sourceFile).HasMatches; +#pragma warning restore IDE0057 // Use range operator } + } } diff --git a/src/coverlet.core/Instrumentation/InstrumenterResult.cs b/src/coverlet.core/Instrumentation/InstrumenterResult.cs index 69a6ab24a..d16e3c20b 100644 --- a/src/coverlet.core/Instrumentation/InstrumenterResult.cs +++ b/src/coverlet.core/Instrumentation/InstrumenterResult.cs @@ -1,121 +1,123 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; namespace Coverlet.Core.Instrumentation { - [DebuggerDisplay("Number = {Number} Hits = {Hits} Class = {Class} Method = {Method}")] - [DataContract] - internal class Line - { - [DataMember] - public int Number; - [DataMember] - public string Class; - [DataMember] - public string Method; - [DataMember] - public int Hits; - } + [DebuggerDisplay("Number = {Number} Hits = {Hits} Class = {Class} Method = {Method}")] + [DataContract] + internal class Line + { + [DataMember] + public int Number; + [DataMember] + public string Class; + [DataMember] + public string Method; + [DataMember] + public int Hits; + } - [DebuggerDisplay("Line = {Number} Offset = {Offset} EndOffset = {EndOffset} Path = {Path} Ordinal = {Ordinal} Hits = {Hits}")] - [DataContract] - internal class Branch : Line - { - [DataMember] - public int Offset; - [DataMember] - public int EndOffset; - [DataMember] - public int Path; - [DataMember] - public uint Ordinal; - } + [DebuggerDisplay("Line = {Number} Offset = {Offset} EndOffset = {EndOffset} Path = {Path} Ordinal = {Ordinal} Hits = {Hits}")] + [DataContract] + internal class Branch : Line + { + [DataMember] + public int Offset; + [DataMember] + public int EndOffset; + [DataMember] + public int Path; + [DataMember] + public uint Ordinal; + } - [DebuggerDisplay("line = {Line} Ordinal = {Ordinal}")] - // Implements IEquatable because is used by dictionary key https://docs.microsoft.com/en-us/dotnet/api/system.iequatable-1?view=netcore-2.2#remarks - [DataContract] - internal class BranchKey : IEquatable - { - public BranchKey(int line, int ordinal) => (Line, Ordinal) = (line, ordinal); + [DebuggerDisplay("line = {Line} Ordinal = {Ordinal}")] + // Implements IEquatable because is used by dictionary key https://docs.microsoft.com/en-us/dotnet/api/system.iequatable-1?view=netcore-2.2#remarks + [DataContract] + internal class BranchKey : IEquatable + { + public BranchKey(int line, int ordinal) => (Line, Ordinal) = (line, ordinal); - [DataMember] - public int Line { get; set; } - [DataMember] - public int Ordinal { get; set; } + [DataMember] + public int Line { get; set; } + [DataMember] + public int Ordinal { get; set; } - public override bool Equals(object obj) => Equals(obj); + public override bool Equals(object obj) => Equals(obj); - public bool Equals(BranchKey other) => other is BranchKey branchKey && branchKey.Line == Line && branchKey.Ordinal == Ordinal; + public bool Equals(BranchKey other) => other is BranchKey branchKey && branchKey.Line == Line && branchKey.Ordinal == Ordinal; - public override int GetHashCode() - { - return (Line, Ordinal).GetHashCode(); - } + public override int GetHashCode() + { + return (Line, Ordinal).GetHashCode(); } + } - [DataContract] - internal class Document + [DataContract] + internal class Document + { + public Document() { - public Document() - { - Lines = new Dictionary(); - Branches = new Dictionary(); - } - - [DataMember] - public string Path; - [DataMember] - public int Index; - [DataMember] - public Dictionary Lines { get; private set; } - [DataMember] - public Dictionary Branches { get; private set; } + Lines = new Dictionary(); + Branches = new Dictionary(); } - [DebuggerDisplay("isBranch = {isBranch} docIndex = {docIndex} start = {start} end = {end}")] - [DataContract] - internal class HitCandidate - { - public HitCandidate(bool isBranch, int docIndex, int start, int end) => (this.isBranch, this.docIndex, this.start, this.end) = (isBranch, docIndex, start, end); + [DataMember] + public string Path; + [DataMember] + public int Index; + [DataMember] + public Dictionary Lines { get; private set; } + [DataMember] + public Dictionary Branches { get; private set; } + } - [DataMember] - public bool isBranch { get; set; } - [DataMember] - public int docIndex { get; set; } - [DataMember] - public int start { get; set; } - [DataMember] - public int end { get; set; } - public HashSet AccountedByNestedInstrumentation { get; set; } - } + [DebuggerDisplay("isBranch = {isBranch} docIndex = {docIndex} start = {start} end = {end}")] + [DataContract] + [SuppressMessage("Style", "IDE1006", Justification = "suppress casing error for API compatibility")] + internal class HitCandidate + { + public HitCandidate(bool isBranch, int docIndex, int start, int end) => (this.isBranch, this.docIndex, this.start, this.end) = (isBranch, docIndex, start, end); - [DataContract] - internal class InstrumenterResult - { - public InstrumenterResult() - { - Documents = new Dictionary(); - HitCandidates = new List(); - } + [DataMember] + public bool isBranch { get; set; } + [DataMember] + public int docIndex { get; set; } + [DataMember] + public int start { get; set; } + [DataMember] + public int end { get; set; } + public HashSet AccountedByNestedInstrumentation { get; set; } + } - [DataMember] - public string Module; - [DataMember] - public string[] BranchesInCompiledGeneratedClass; - [DataMember] - public string HitsFilePath; - [DataMember] - public string ModulePath; - [DataMember] - public string SourceLink; - [DataMember] - public Dictionary Documents { get; private set; } - [DataMember] - public List HitCandidates { get; private set; } + [DataContract] + internal class InstrumenterResult + { + public InstrumenterResult() + { + Documents = new Dictionary(); + HitCandidates = new List(); } + + [DataMember] + public string Module; + [DataMember] + public string[] BranchesInCompiledGeneratedClass; + [DataMember] + public string HitsFilePath; + [DataMember] + public string ModulePath; + [DataMember] + public string SourceLink; + [DataMember] + public Dictionary Documents { get; private set; } + [DataMember] + public List HitCandidates { get; private set; } + } } diff --git a/src/coverlet.core/Instrumentation/ModuleTrackerTemplate.cs b/src/coverlet.core/Instrumentation/ModuleTrackerTemplate.cs index 600fe91b1..71b2b5664 100644 --- a/src/coverlet.core/Instrumentation/ModuleTrackerTemplate.cs +++ b/src/coverlet.core/Instrumentation/ModuleTrackerTemplate.cs @@ -10,192 +10,192 @@ namespace Coverlet.Core.Instrumentation { - /// - /// This static class will be injected on a module being instrumented in order to direct on module hits - /// to a single location. - /// - /// - /// As this type is going to be customized for each instrumented module it doesn't follow typical practices - /// regarding visibility of members, etc. - /// - [CompilerGenerated] - [ExcludeFromCodeCoverage] - internal static class ModuleTrackerTemplate + /// + /// This static class will be injected on a module being instrumented in order to direct on module hits + /// to a single location. + /// + /// + /// As this type is going to be customized for each instrumented module it doesn't follow typical practices + /// regarding visibility of members, etc. + /// + [CompilerGenerated] + [ExcludeFromCodeCoverage] + internal static class ModuleTrackerTemplate + { + public static string HitsFilePath; + public static int[] HitsArray; + public static bool SingleHit; + public static bool FlushHitFile; + private static readonly bool s_enableLog = int.TryParse(Environment.GetEnvironmentVariable("COVERLET_ENABLETRACKERLOG"), out int result) && result == 1; + private static readonly string s_sessionId = Guid.NewGuid().ToString(); + + static ModuleTrackerTemplate() { - public static string HitsFilePath; - public static int[] HitsArray; - public static bool SingleHit; - public static bool FlushHitFile; - private static readonly bool s_enableLog = int.TryParse(Environment.GetEnvironmentVariable("COVERLET_ENABLETRACKERLOG"), out int result) && result == 1; - private static readonly string s_sessionId = Guid.NewGuid().ToString(); - - static ModuleTrackerTemplate() - { - // At the end of the instrumentation of a module, the instrumenter needs to add code here - // to initialize the static fields according to the values derived from the instrumentation of - // the module. - } + // At the end of the instrumentation of a module, the instrumenter needs to add code here + // to initialize the static fields according to the values derived from the instrumentation of + // the module. + } - // A call to this method will be injected in the static constructor above for most cases. However, if the - // current assembly is System.Private.CoreLib (or more specifically, defines System.AppDomain), a call directly - // to UnloadModule will be injected in System.AppContext.OnProcessExit. - public static void RegisterUnloadEvents() - { - AppDomain.CurrentDomain.ProcessExit += new EventHandler(UnloadModule); - AppDomain.CurrentDomain.DomainUnload += new EventHandler(UnloadModule); - } + // A call to this method will be injected in the static constructor above for most cases. However, if the + // current assembly is System.Private.CoreLib (or more specifically, defines System.AppDomain), a call directly + // to UnloadModule will be injected in System.AppContext.OnProcessExit. + public static void RegisterUnloadEvents() + { + AppDomain.CurrentDomain.ProcessExit += new EventHandler(UnloadModule); + AppDomain.CurrentDomain.DomainUnload += new EventHandler(UnloadModule); + } - public static void RecordHitInCoreLibrary(int hitLocationIndex) - { - // Make sure to avoid recording if this is a call to RecordHit within the AppDomain setup code in an - // instrumented build of System.Private.CoreLib. - if (HitsArray is null) - return; + public static void RecordHitInCoreLibrary(int hitLocationIndex) + { + // Make sure to avoid recording if this is a call to RecordHit within the AppDomain setup code in an + // instrumented build of System.Private.CoreLib. + if (HitsArray is null) + return; - Interlocked.Increment(ref HitsArray[hitLocationIndex]); - } + Interlocked.Increment(ref HitsArray[hitLocationIndex]); + } - public static void RecordHit(int hitLocationIndex) - { - Interlocked.Increment(ref HitsArray[hitLocationIndex]); - } + public static void RecordHit(int hitLocationIndex) + { + Interlocked.Increment(ref HitsArray[hitLocationIndex]); + } - public static void RecordSingleHitInCoreLibrary(int hitLocationIndex) - { - // Make sure to avoid recording if this is a call to RecordHit within the AppDomain setup code in an - // instrumented build of System.Private.CoreLib. - if (HitsArray is null) - return; - - ref int location = ref HitsArray[hitLocationIndex]; - if (location == 0) - location = 1; - } + public static void RecordSingleHitInCoreLibrary(int hitLocationIndex) + { + // Make sure to avoid recording if this is a call to RecordHit within the AppDomain setup code in an + // instrumented build of System.Private.CoreLib. + if (HitsArray is null) + return; + + ref int location = ref HitsArray[hitLocationIndex]; + if (location == 0) + location = 1; + } - public static void RecordSingleHit(int hitLocationIndex) - { - ref int location = ref HitsArray[hitLocationIndex]; - if (location == 0) - location = 1; - } + public static void RecordSingleHit(int hitLocationIndex) + { + ref int location = ref HitsArray[hitLocationIndex]; + if (location == 0) + location = 1; + } - public static void UnloadModule(object sender, EventArgs e) + public static void UnloadModule(object sender, EventArgs e) + { + // The same module can be unloaded multiple times in the same process via different app domains. + // Use a global mutex to ensure no concurrent access. + using var mutex = new Mutex(true, Path.GetFileNameWithoutExtension(HitsFilePath) + "_Mutex", out bool createdNew); + if (!createdNew) + { + mutex.WaitOne(); + } + + if (FlushHitFile) + { + try { - // The same module can be unloaded multiple times in the same process via different app domains. - // Use a global mutex to ensure no concurrent access. - using var mutex = new Mutex(true, Path.GetFileNameWithoutExtension(HitsFilePath) + "_Mutex", out bool createdNew); - if (!createdNew) + // Claim the current hits array and reset it to prevent double-counting scenarios. + int[] hitsArray = Interlocked.Exchange(ref HitsArray, new int[HitsArray.Length]); + + WriteLog($"Unload called for '{Assembly.GetExecutingAssembly().Location}' by '{sender ?? "null"}'"); + WriteLog($"Flushing hit file '{HitsFilePath}'"); + + bool failedToCreateNewHitsFile = false; + try + { + using var fs = new FileStream(HitsFilePath, FileMode.CreateNew); + using var bw = new BinaryWriter(fs); + bw.Write(hitsArray.Length); + foreach (int hitCount in hitsArray) + { + bw.Write(hitCount); + } + } + catch (Exception ex) + { + WriteLog($"Failed to create new hits file '{HitsFilePath}' -> '{ex.Message}'"); + failedToCreateNewHitsFile = true; + } + + if (failedToCreateNewHitsFile) + { + // Update the number of hits by adding value on disk with the ones on memory. + // This path should be triggered only in the case of multiple AppDomain unloads. + using var fs = new FileStream(HitsFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); + using var br = new BinaryReader(fs); + using var bw = new BinaryWriter(fs); + int hitsLength = br.ReadInt32(); + WriteLog($"Current hits found '{hitsLength}'"); + + if (hitsLength != hitsArray.Length) { - mutex.WaitOne(); + throw new InvalidOperationException($"{HitsFilePath} has {hitsLength} entries but on memory {nameof(HitsArray)} has {hitsArray.Length}"); } - if (FlushHitFile) + for (int i = 0; i < hitsLength; ++i) { - try - { - // Claim the current hits array and reset it to prevent double-counting scenarios. - int[] hitsArray = Interlocked.Exchange(ref HitsArray, new int[HitsArray.Length]); - - WriteLog($"Unload called for '{Assembly.GetExecutingAssembly().Location}' by '{sender ?? "null"}'"); - WriteLog($"Flushing hit file '{HitsFilePath}'"); - - bool failedToCreateNewHitsFile = false; - try - { - using var fs = new FileStream(HitsFilePath, FileMode.CreateNew); - using var bw = new BinaryWriter(fs); - bw.Write(hitsArray.Length); - foreach (int hitCount in hitsArray) - { - bw.Write(hitCount); - } - } - catch (Exception ex) - { - WriteLog($"Failed to create new hits file '{HitsFilePath}' -> '{ex.Message}'"); - failedToCreateNewHitsFile = true; - } - - if (failedToCreateNewHitsFile) - { - // Update the number of hits by adding value on disk with the ones on memory. - // This path should be triggered only in the case of multiple AppDomain unloads. - using var fs = new FileStream(HitsFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); - using var br = new BinaryReader(fs); - using var bw = new BinaryWriter(fs); - int hitsLength = br.ReadInt32(); - WriteLog($"Current hits found '{hitsLength}'"); - - if (hitsLength != hitsArray.Length) - { - throw new InvalidOperationException($"{HitsFilePath} has {hitsLength} entries but on memory {nameof(HitsArray)} has {hitsArray.Length}"); - } - - for (int i = 0; i < hitsLength; ++i) - { - int oldHitCount = br.ReadInt32(); - bw.Seek(-sizeof(int), SeekOrigin.Current); - if (SingleHit) - { - bw.Write(hitsArray[i] + oldHitCount > 0 ? 1 : 0); - } - else - { - bw.Write(hitsArray[i] + oldHitCount); - } - } - } - - WriteHits(sender); - - WriteLog($"Hit file '{HitsFilePath}' flushed, size {new FileInfo(HitsFilePath).Length}"); - WriteLog("--------------------------------"); - } - catch (Exception ex) - { - WriteLog(ex.ToString()); - throw; - } + int oldHitCount = br.ReadInt32(); + bw.Seek(-sizeof(int), SeekOrigin.Current); + if (SingleHit) + { + bw.Write(hitsArray[i] + oldHitCount > 0 ? 1 : 0); + } + else + { + bw.Write(hitsArray[i] + oldHitCount); + } } + } - // On purpose this is not under a try-finally: it is better to have an exception if there was any error writing the hits file - // this case is relevant when instrumenting corelib since multiple processes can be running against the same instrumented dll. - mutex.ReleaseMutex(); - } + WriteHits(sender); - private static void WriteHits(object sender) + WriteLog($"Hit file '{HitsFilePath}' flushed, size {new FileInfo(HitsFilePath).Length}"); + WriteLog("--------------------------------"); + } + catch (Exception ex) { - if (s_enableLog) - { - var currentAssembly = Assembly.GetExecutingAssembly(); - var location = new DirectoryInfo(Path.Combine(Path.GetDirectoryName(currentAssembly.Location), "TrackersHitsLog")); - location.Create(); - string logFile = Path.Combine(location.FullName, $"{Path.GetFileName(currentAssembly.Location)}_{DateTime.UtcNow.Ticks}_{s_sessionId}.txt"); - using (var fs = new FileStream(HitsFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var log = new FileStream(logFile, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)) - using (var logWriter = new StreamWriter(log)) - using (var br = new BinaryReader(fs)) - { - int hitsLength = br.ReadInt32(); - for (int i = 0; i < hitsLength; ++i) - { - logWriter.WriteLine($"{i},{br.ReadInt32()}"); - } - } - - File.AppendAllText(logFile, $"Hits flushed file path {HitsFilePath} location '{Assembly.GetExecutingAssembly().Location}' by '{sender ?? "null"}'"); - } + WriteLog(ex.ToString()); + throw; } + } - private static void WriteLog(string logText) + // On purpose this is not under a try-finally: it is better to have an exception if there was any error writing the hits file + // this case is relevant when instrumenting corelib since multiple processes can be running against the same instrumented dll. + mutex.ReleaseMutex(); + } + + private static void WriteHits(object sender) + { + if (s_enableLog) + { + var currentAssembly = Assembly.GetExecutingAssembly(); + var location = new DirectoryInfo(Path.Combine(Path.GetDirectoryName(currentAssembly.Location), "TrackersHitsLog")); + location.Create(); + string logFile = Path.Combine(location.FullName, $"{Path.GetFileName(currentAssembly.Location)}_{DateTime.UtcNow.Ticks}_{s_sessionId}.txt"); + using (var fs = new FileStream(HitsFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var log = new FileStream(logFile, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)) + using (var logWriter = new StreamWriter(log)) + using (var br = new BinaryReader(fs)) { - if (s_enableLog) - { - // We don't set path as global var to keep benign possible errors inside try/catch - // I'm not sure that location will be ok in every scenario - string location = Assembly.GetExecutingAssembly().Location; - File.AppendAllText(Path.Combine(Path.GetDirectoryName(location), Path.GetFileName(location) + "_tracker.txt"), $"[{DateTime.UtcNow} S:{s_sessionId} T:{Thread.CurrentThread.ManagedThreadId}]{logText}{Environment.NewLine}"); - } + int hitsLength = br.ReadInt32(); + for (int i = 0; i < hitsLength; ++i) + { + logWriter.WriteLine($"{i},{br.ReadInt32()}"); + } } + + File.AppendAllText(logFile, $"Hits flushed file path {HitsFilePath} location '{Assembly.GetExecutingAssembly().Location}' by '{sender ?? "null"}'"); + } + } + + private static void WriteLog(string logText) + { + if (s_enableLog) + { + // We don't set path as global var to keep benign possible errors inside try/catch + // I'm not sure that location will be ok in every scenario + string location = Assembly.GetExecutingAssembly().Location; + File.AppendAllText(Path.Combine(Path.GetDirectoryName(location), Path.GetFileName(location) + "_tracker.txt"), $"[{DateTime.UtcNow} S:{s_sessionId} T:{Thread.CurrentThread.ManagedThreadId}]{logText}{Environment.NewLine}"); + } } + } } diff --git a/src/coverlet.core/Instrumentation/ReachabilityHelper.cs b/src/coverlet.core/Instrumentation/ReachabilityHelper.cs index 1b4840d85..f61016fec 100644 --- a/src/coverlet.core/Instrumentation/ReachabilityHelper.cs +++ b/src/coverlet.core/Instrumentation/ReachabilityHelper.cs @@ -11,168 +11,168 @@ namespace Coverlet.Core.Instrumentation.Reachability { + /// + /// Helper for find unreachable IL instructions. + /// + internal class ReachabilityHelper + { + internal readonly struct UnreachableRange + { + /// + /// Offset of first unreachable instruction. + /// + public int StartOffset { get; } + /// + /// Offset of last unreachable instruction. + /// + public int EndOffset { get; } + + public UnreachableRange(int start, int end) + { + StartOffset = start; + EndOffset = end; + } + + public override string ToString() + => $"[IL_{StartOffset:x4}, IL_{EndOffset:x4}]"; + } + + private class BasicBlock + { + /// + /// Offset of the instruction that starts the block + /// + public int StartOffset { get; } + /// + /// Whether it is possible for control to flow past the end of the block, + /// ie. whether it's tail is reachable + /// + public bool TailReachable => UnreachableAfter == null; + /// + /// If control flows to the end of the block, where it can flow to + /// + public ImmutableArray BranchesTo { get; } + + /// + /// If this block contains a call(i) to a method that does not return + /// this will be the first such call. + /// + public Instruction UnreachableAfter { get; } + + /// + /// If an exception is raised in this block, where control might branch to. + /// + /// Note that this can happen even if the block's end is unreachable. + /// + public ImmutableArray ExceptionBranchesTo { get; } + + /// + /// Mutable, records whether control can flow into the block, + /// ie. whether it's head is reachable + /// + public bool HeadReachable { get; set; } + + public BasicBlock(int startOffset, Instruction unreachableAfter, ImmutableArray branchesTo, ImmutableArray exceptionBranchesTo) + { + StartOffset = startOffset; + UnreachableAfter = unreachableAfter; + BranchesTo = branchesTo; + ExceptionBranchesTo = exceptionBranchesTo; + } + + public override string ToString() + => $"{nameof(StartOffset)}=IL_{StartOffset:x4}, {nameof(HeadReachable)}={HeadReachable}, {nameof(TailReachable)}={TailReachable}, {nameof(BranchesTo)}=({string.Join(", ", BranchesTo.Select(b => $"IL_{b:x4}"))}), {nameof(ExceptionBranchesTo)}=({string.Join(", ", ExceptionBranchesTo.Select(b => $"IL_{b:x4}"))}), {nameof(UnreachableAfter)}={(UnreachableAfter != null ? $"IL_{UnreachableAfter:x4}" : "")}"; + } + /// - /// Helper for find unreachable IL instructions. + /// Represents an Instruction that transitions control flow (ie. branches). + /// + /// This is _different_ from other branch types, like Branch and BranchPoint + /// because it includes unconditional branches too. /// - internal class ReachabilityHelper + private readonly struct BranchInstruction { - internal readonly struct UnreachableRange + /// + /// Location of the branching instruction + /// + public int Offset { get; } + + /// + /// Returns true if this branch has multiple targets. + /// + public bool HasMultiTargets => _targetOffset == -1; + + private readonly int _targetOffset; + + /// + /// Target of the branch, assuming it has a single target. + /// + /// It is illegal to access this if there are multiple targets. + /// + public int TargetOffset + { + get { - /// - /// Offset of first unreachable instruction. - /// - public int StartOffset { get; } - /// - /// Offset of last unreachable instruction. - /// - public int EndOffset { get; } - - public UnreachableRange(int start, int end) - { - StartOffset = start; - EndOffset = end; - } + if (HasMultiTargets) + { + throw new InvalidOperationException($"{HasMultiTargets} is true"); + } - public override string ToString() - => $"[IL_{StartOffset:x4}, IL_{EndOffset:x4}]"; + return _targetOffset; } - - private class BasicBlock + } + + private readonly ImmutableArray _targetOffsets; + + /// + /// Targets of the branch, assuming it has multiple targets. + /// + /// It is illegal to access this if there is a single target. + /// + public ImmutableArray TargetOffsets + { + get { - /// - /// Offset of the instruction that starts the block - /// - public int StartOffset { get; } - /// - /// Whether it is possible for control to flow past the end of the block, - /// ie. whether it's tail is reachable - /// - public bool TailReachable => UnreachableAfter == null; - /// - /// If control flows to the end of the block, where it can flow to - /// - public ImmutableArray BranchesTo { get; } - - /// - /// If this block contains a call(i) to a method that does not return - /// this will be the first such call. - /// - public Instruction UnreachableAfter { get; } - - /// - /// If an exception is raised in this block, where control might branch to. - /// - /// Note that this can happen even if the block's end is unreachable. - /// - public ImmutableArray ExceptionBranchesTo { get; } - - /// - /// Mutable, records whether control can flow into the block, - /// ie. whether it's head is reachable - /// - public bool HeadReachable { get; set; } - - public BasicBlock(int startOffset, Instruction unreachableAfter, ImmutableArray branchesTo, ImmutableArray exceptionBranchesTo) - { - StartOffset = startOffset; - UnreachableAfter = unreachableAfter; - BranchesTo = branchesTo; - ExceptionBranchesTo = exceptionBranchesTo; - } + if (!HasMultiTargets) + { + throw new InvalidOperationException($"{HasMultiTargets} is false"); + } - public override string ToString() - => $"{nameof(StartOffset)}=IL_{StartOffset:x4}, {nameof(HeadReachable)}={HeadReachable}, {nameof(TailReachable)}={TailReachable}, {nameof(BranchesTo)}=({string.Join(", ", BranchesTo.Select(b => $"IL_{b:x4}"))}), {nameof(ExceptionBranchesTo)}=({string.Join(", ", ExceptionBranchesTo.Select(b => $"IL_{b:x4}"))}), {nameof(UnreachableAfter)}={(UnreachableAfter != null ? $"IL_{UnreachableAfter:x4}" : "")}"; + return _targetOffsets; } - - /// - /// Represents an Instruction that transitions control flow (ie. branches). - /// - /// This is _different_ from other branch types, like Branch and BranchPoint - /// because it includes unconditional branches too. - /// - private readonly struct BranchInstruction + } + + public BranchInstruction(int offset, int targetOffset) + { + Offset = offset; + _targetOffset = targetOffset; + _targetOffsets = ImmutableArray.Empty; + } + + public BranchInstruction(int offset, ImmutableArray targetOffset) + { + if (targetOffset.Length == 1) { - /// - /// Location of the branching instruction - /// - public int Offset { get; } - - /// - /// Returns true if this branch has multiple targets. - /// - public bool HasMultiTargets => _targetOffset == -1; - - private readonly int _targetOffset; - - /// - /// Target of the branch, assuming it has a single target. - /// - /// It is illegal to access this if there are multiple targets. - /// - public int TargetOffset - { - get - { - if (HasMultiTargets) - { - throw new InvalidOperationException($"{HasMultiTargets} is true"); - } - - return _targetOffset; - } - } + throw new ArgumentException("Use single entry constructor for single targets", nameof(targetOffset)); + } - private readonly ImmutableArray _targetOffsets; + Offset = offset; + _targetOffset = -1; + _targetOffsets = targetOffset; + } - /// - /// Targets of the branch, assuming it has multiple targets. - /// - /// It is illegal to access this if there is a single target. - /// - public ImmutableArray TargetOffsets - { - get - { - if (!HasMultiTargets) - { - throw new InvalidOperationException($"{HasMultiTargets} is false"); - } - - return _targetOffsets; - } - } - - public BranchInstruction(int offset, int targetOffset) - { - Offset = offset; - _targetOffset = targetOffset; - _targetOffsets = ImmutableArray.Empty; - } + public override string ToString() + => $"IL_{Offset:x4}: {(HasMultiTargets ? string.Join(", ", TargetOffsets.Select(x => $"IL_{x:x4}")) : $"IL_{TargetOffset:x4}")}"; + } - public BranchInstruction(int offset, ImmutableArray targetOffset) + /// + /// OpCodes that transfer control code, even if they do not + /// introduce branch points. + /// + private static readonly ImmutableHashSet s_branchOpCodes = + ImmutableHashSet.CreateRange( + new[] { - if (targetOffset.Length == 1) - { - throw new ArgumentException("Use single entry constructor for single targets", nameof(targetOffset)); - } - - Offset = offset; - _targetOffset = -1; - _targetOffsets = targetOffset; - } - - public override string ToString() - => $"IL_{Offset:x4}: {(HasMultiTargets ? string.Join(", ", TargetOffsets.Select(x => $"IL_{x:x4}")) : $"IL_{TargetOffset:x4}")}"; - } - - /// - /// OpCodes that transfer control code, even if they do not - /// introduce branch points. - /// - private static readonly ImmutableHashSet s_branchOpCodes = - ImmutableHashSet.CreateRange( - new[] - { OpCodes.Beq, OpCodes.Beq_S, OpCodes.Bge, @@ -217,600 +217,600 @@ public override string ToString() // look at exception handlers to figure out where they go to OpCodes.Endfilter, OpCodes.Endfinally - } - ); - - /// - /// OpCodes that unconditionally transfer control, so there - /// is not "fall through" branch target. - /// - private static readonly ImmutableHashSet s_unconditionalBranchOpCodes = - ImmutableHashSet.CreateRange( - new[] - { + } + ); + + /// + /// OpCodes that unconditionally transfer control, so there + /// is not "fall through" branch target. + /// + private static readonly ImmutableHashSet s_unconditionalBranchOpCodes = + ImmutableHashSet.CreateRange( + new[] + { OpCodes.Br, OpCodes.Br_S, OpCodes.Leave, OpCodes.Leave_S - } - ); + } + ); - private readonly ImmutableHashSet _doesNotReturnMethods; + private readonly ImmutableHashSet _doesNotReturnMethods; - private ReachabilityHelper(ImmutableHashSet doesNotReturnMethods) - { - _doesNotReturnMethods = doesNotReturnMethods; - } + private ReachabilityHelper(ImmutableHashSet doesNotReturnMethods) + { + _doesNotReturnMethods = doesNotReturnMethods; + } - /// - /// Build a ReachabilityHelper for the given module. - /// - /// Predetermines methods that will not return, as - /// indicated by the presense of the given attributes. - /// - public static ReachabilityHelper CreateForModule(ModuleDefinition module, string[] doesNotReturnAttributes, ILogger logger) + /// + /// Build a ReachabilityHelper for the given module. + /// + /// Predetermines methods that will not return, as + /// indicated by the presense of the given attributes. + /// + public static ReachabilityHelper CreateForModule(ModuleDefinition module, string[] doesNotReturnAttributes, ILogger logger) + { + if (doesNotReturnAttributes.Length == 0) + { + return new ReachabilityHelper(ImmutableHashSet.Empty); + } + + ImmutableHashSet processedMethods = ImmutableHashSet.Empty; + ImmutableHashSet.Builder doNotReturn = ImmutableHashSet.CreateBuilder(); + foreach (TypeDefinition type in module.Types) + { + foreach (MethodDefinition mtd in type.Methods) { - if (doesNotReturnAttributes.Length == 0) + if (mtd.IsNative) + { + continue; + } + + MethodBody body; + try + { + if (!mtd.HasBody) { - return new ReachabilityHelper(ImmutableHashSet.Empty); + continue; } - ImmutableHashSet processedMethods = ImmutableHashSet.Empty; - ImmutableHashSet.Builder doNotReturn = ImmutableHashSet.CreateBuilder(); - foreach (TypeDefinition type in module.Types) + body = mtd.Body; + } + catch + { + continue; + } + + foreach (Instruction instr in body.Instructions) + { + if (!IsCall(instr, out MethodReference calledMtd)) { - foreach (MethodDefinition mtd in type.Methods) - { - if (mtd.IsNative) - { - continue; - } - - MethodBody body; - try - { - if (!mtd.HasBody) - { - continue; - } - - body = mtd.Body; - } - catch - { - continue; - } - - foreach (Instruction instr in body.Instructions) - { - if (!IsCall(instr, out MethodReference calledMtd)) - { - continue; - } - - MetadataToken token = calledMtd.MetadataToken; - if (processedMethods.Contains(token)) - { - continue; - } - - processedMethods = processedMethods.Add(token); - - MethodDefinition mtdDef; - try - { - mtdDef = calledMtd.Resolve(); - } - catch - { - logger.LogWarning($"Unable to resolve method reference \"{calledMtd.FullName}\", assuming calls to will return"); - mtdDef = null; - } - - if (mtdDef == null) - { - continue; - } - - if (!mtdDef.HasCustomAttributes) - { - continue; - } - - bool hasDoesNotReturnAttribute = false; - foreach (CustomAttribute attr in mtdDef.CustomAttributes) - { - if (Array.IndexOf(doesNotReturnAttributes, attr.AttributeType.Name) != -1) - { - hasDoesNotReturnAttribute = true; - break; - } - } - - if (hasDoesNotReturnAttribute) - { - logger.LogVerbose($"Determined call to \"{calledMtd.FullName}\" will not return"); - doNotReturn.Add(token); - } - } - } + continue; } - ImmutableHashSet doNoReturnTokens = doNotReturn.ToImmutable(); + MetadataToken token = calledMtd.MetadataToken; + if (processedMethods.Contains(token)) + { + continue; + } - return new ReachabilityHelper(doNoReturnTokens); - } + processedMethods = processedMethods.Add(token); - /// - /// Calculates which IL instructions are reachable given an instruction stream and branch points extracted from a method. - /// - /// The algorithm works like so: - /// 1. determine the "blocks" that make up a function - /// * A block starts with either the start of the method, or a branch _target_ - /// * blocks are "where some other code might jump to" - /// * blocks end with either another branch, another branch target, or the end of the method - /// * this means blocks contain no control flow, except (maybe) as the very last instruction - /// 2. blocks have head and tail reachability - /// * a block has head reachablility if some other block that is reachable can branch to it - /// * a block has tail reachability if it contains no calls to methods that never return - /// 4. push the first block onto a stack - /// 5. while the stack is not empty - /// a. pop a block off the stack - /// b. give it head reachability - /// c. if the pop'd block is tail reachable, push the blocks it can branch to onto the stack - /// 6. consider each block - /// * if it is head and tail reachable, all instructions in it are reachable - /// * if it is not head reachable (regardless of tail reachability), no instructions in it are reachable - /// * if it is only head reachable, all instructions up to and including the first call to a method that does not return are reachable - /// - public ImmutableArray FindUnreachableIL(Collection instrs, Collection exceptionHandlers) - { - // no instructions, means nothing to... not reach - if (instrs.Count == 0) + MethodDefinition mtdDef; + try + { + mtdDef = calledMtd.Resolve(); + } + catch { - return ImmutableArray.Empty; + logger.LogWarning($"Unable to resolve method reference \"{calledMtd.FullName}\", assuming calls to will return"); + mtdDef = null; } - // no known methods that do not return, so everything is reachable by definition - if (_doesNotReturnMethods.IsEmpty) + if (mtdDef == null) { - return ImmutableArray.Empty; + continue; } - (bool mayContainUnreachableCode, ImmutableArray branches) = AnalyzeInstructions(instrs, exceptionHandlers); + if (!mtdDef.HasCustomAttributes) + { + continue; + } - // no need to do any more work, nothing unreachable here - if (!mayContainUnreachableCode) + bool hasDoesNotReturnAttribute = false; + foreach (CustomAttribute attr in mtdDef.CustomAttributes) { - return ImmutableArray.Empty; + if (Array.IndexOf(doesNotReturnAttributes, attr.AttributeType.Name) != -1) + { + hasDoesNotReturnAttribute = true; + break; + } } - Instruction lastInstr = instrs[instrs.Count - 1]; + if (hasDoesNotReturnAttribute) + { + logger.LogVerbose($"Determined call to \"{calledMtd.FullName}\" will not return"); + doNotReturn.Add(token); + } + } + } + } + + ImmutableHashSet doNoReturnTokens = doNotReturn.ToImmutable(); + + return new ReachabilityHelper(doNoReturnTokens); + } + + /// + /// Calculates which IL instructions are reachable given an instruction stream and branch points extracted from a method. + /// + /// The algorithm works like so: + /// 1. determine the "blocks" that make up a function + /// * A block starts with either the start of the method, or a branch _target_ + /// * blocks are "where some other code might jump to" + /// * blocks end with either another branch, another branch target, or the end of the method + /// * this means blocks contain no control flow, except (maybe) as the very last instruction + /// 2. blocks have head and tail reachability + /// * a block has head reachablility if some other block that is reachable can branch to it + /// * a block has tail reachability if it contains no calls to methods that never return + /// 4. push the first block onto a stack + /// 5. while the stack is not empty + /// a. pop a block off the stack + /// b. give it head reachability + /// c. if the pop'd block is tail reachable, push the blocks it can branch to onto the stack + /// 6. consider each block + /// * if it is head and tail reachable, all instructions in it are reachable + /// * if it is not head reachable (regardless of tail reachability), no instructions in it are reachable + /// * if it is only head reachable, all instructions up to and including the first call to a method that does not return are reachable + /// + public ImmutableArray FindUnreachableIL(Collection instrs, Collection exceptionHandlers) + { + // no instructions, means nothing to... not reach + if (instrs.Count == 0) + { + return ImmutableArray.Empty; + } + + // no known methods that do not return, so everything is reachable by definition + if (_doesNotReturnMethods.IsEmpty) + { + return ImmutableArray.Empty; + } + + (bool mayContainUnreachableCode, ImmutableArray branches) = AnalyzeInstructions(instrs, exceptionHandlers); + + // no need to do any more work, nothing unreachable here + if (!mayContainUnreachableCode) + { + return ImmutableArray.Empty; + } + + Instruction lastInstr = instrs[instrs.Count - 1]; + + ImmutableArray blocks = CreateBasicBlocks(instrs, exceptionHandlers, branches); - ImmutableArray blocks = CreateBasicBlocks(instrs, exceptionHandlers, branches); + DetermineHeadReachability(blocks); + return DetermineUnreachableRanges(blocks, lastInstr.Offset); + } + + /// + /// Analyzes the instructiona and exception handlers provided to find branches and determine if + /// it is possible for their to be unreachable code. + /// + private (bool MayContainUnreachableCode, ImmutableArray Branches) AnalyzeInstructions(Collection instrs, Collection exceptionHandlers) + { + bool containsDoesNotReturnCall = false; + + ImmutableArray.Builder ret = ImmutableArray.CreateBuilder(); + foreach (Instruction i in instrs) + { + containsDoesNotReturnCall = containsDoesNotReturnCall || DoesNotReturn(i); - DetermineHeadReachability(blocks); - return DetermineUnreachableRanges(blocks, lastInstr.Offset); + if (s_branchOpCodes.Contains(i.OpCode)) + { + (int? singleTargetOffset, ImmutableArray multiTargetOffsets) = GetInstructionTargets(i, exceptionHandlers); + + if (singleTargetOffset != null) + { + ret.Add(new BranchInstruction(i.Offset, singleTargetOffset.Value)); + } + else + { + ret.Add(new BranchInstruction(i.Offset, multiTargetOffsets)); + } } + } + + return (containsDoesNotReturnCall, ret.ToImmutable()); + } - /// - /// Analyzes the instructiona and exception handlers provided to find branches and determine if - /// it is possible for their to be unreachable code. - /// - private (bool MayContainUnreachableCode, ImmutableArray Branches) AnalyzeInstructions(Collection instrs, Collection exceptionHandlers) + /// + /// For a single instruction, determines all the places it might branch to. + /// + private static (int? SingleTargetOffset, ImmutableArray MultiTargetOffsets) GetInstructionTargets(Instruction i, Collection exceptionHandlers) + { + int? singleTargetOffset; + ImmutableArray multiTargetOffsets; + + if (i.Operand is Instruction[] multiTarget) + { + // it's a switch + singleTargetOffset = null; + + multiTargetOffsets = ImmutableArray.Create(i.Next.Offset); + foreach (Instruction instr in multiTarget) { - bool containsDoesNotReturnCall = false; + // in practice these are small arrays, so a scan should be fine + if (multiTargetOffsets.Contains(instr.Offset)) + { + continue; + } - ImmutableArray.Builder ret = ImmutableArray.CreateBuilder(); - foreach (Instruction i in instrs) - { - containsDoesNotReturnCall = containsDoesNotReturnCall || DoesNotReturn(i); - - if (s_branchOpCodes.Contains(i.OpCode)) - { - (int? singleTargetOffset, ImmutableArray multiTargetOffsets) = GetInstructionTargets(i, exceptionHandlers); - - if (singleTargetOffset != null) - { - ret.Add(new BranchInstruction(i.Offset, singleTargetOffset.Value)); - } - else - { - ret.Add(new BranchInstruction(i.Offset, multiTargetOffsets)); - } - } - } + multiTargetOffsets = multiTargetOffsets.Add(instr.Offset); + } + } + else if (i.Operand is Instruction targetInstr) + { + // it's any of the B.*(_S)? or Leave(_S)? instructions - return (containsDoesNotReturnCall, ret.ToImmutable()); + if (s_unconditionalBranchOpCodes.Contains(i.OpCode)) + { + multiTargetOffsets = ImmutableArray.Empty; + singleTargetOffset = targetInstr.Offset; + } + else + { + singleTargetOffset = null; + multiTargetOffsets = ImmutableArray.Create(i.Next.Offset, targetInstr.Offset); + } + } + else if (i.OpCode == OpCodes.Endfilter) + { + // Endfilter is always the last instruction in a filter block, and no sort of control + // flow is allowed so we can scan backwards to see find the block + + ExceptionHandler filterForHandler = null; + foreach (ExceptionHandler handler in exceptionHandlers) + { + if (handler.FilterStart == null) + { + continue; + } + + Instruction startsAt = handler.FilterStart; + Instruction cur = startsAt; + while (cur != null && cur.Offset < i.Offset) + { + cur = cur.Next; + } + + if (cur != null && cur.Offset == i.Offset) + { + filterForHandler = handler; + break; + } } - /// - /// For a single instruction, determines all the places it might branch to. - /// - private static (int? SingleTargetOffset, ImmutableArray MultiTargetOffsets) GetInstructionTargets(Instruction i, Collection exceptionHandlers) + if (filterForHandler == null) { - int? singleTargetOffset; - ImmutableArray multiTargetOffsets; + throw new InvalidOperationException($"Could not find ExceptionHandler associated with {i}"); + } - if (i.Operand is Instruction[] multiTarget) - { - // it's a switch - singleTargetOffset = null; - - multiTargetOffsets = ImmutableArray.Create(i.Next.Offset); - foreach (Instruction instr in multiTarget) - { - // in practice these are small arrays, so a scan should be fine - if (multiTargetOffsets.Contains(instr.Offset)) - { - continue; - } - - multiTargetOffsets = multiTargetOffsets.Add(instr.Offset); - } - } - else if (i.Operand is Instruction targetInstr) - { - // it's any of the B.*(_S)? or Leave(_S)? instructions - - if (s_unconditionalBranchOpCodes.Contains(i.OpCode)) - { - multiTargetOffsets = ImmutableArray.Empty; - singleTargetOffset = targetInstr.Offset; - } - else - { - singleTargetOffset = null; - multiTargetOffsets = ImmutableArray.Create(i.Next.Offset, targetInstr.Offset); - } - } - else if (i.OpCode == OpCodes.Endfilter) - { - // Endfilter is always the last instruction in a filter block, and no sort of control - // flow is allowed so we can scan backwards to see find the block - - ExceptionHandler filterForHandler = null; - foreach (ExceptionHandler handler in exceptionHandlers) - { - if (handler.FilterStart == null) - { - continue; - } - - Instruction startsAt = handler.FilterStart; - Instruction cur = startsAt; - while (cur != null && cur.Offset < i.Offset) - { - cur = cur.Next; - } - - if (cur != null && cur.Offset == i.Offset) - { - filterForHandler = handler; - break; - } - } - - if (filterForHandler == null) - { - throw new InvalidOperationException($"Could not find ExceptionHandler associated with {i}"); - } - - // filter can do one of two things: - // - branch into handler - // - percolate to another catch block, which might not be in this method - // - // so we chose to model this as an unconditional branch into the handler - singleTargetOffset = filterForHandler.HandlerStart.Offset; - multiTargetOffsets = ImmutableArray.Empty; - } - else if (i.OpCode == OpCodes.Endfinally) - { - // Endfinally is very weird - // - // what it does, effectively is "take whatever branch would normally happen after the instruction - // that left the paired try - // - // practically, this makes endfinally a branch with no target - - singleTargetOffset = null; - multiTargetOffsets = ImmutableArray.Empty; - } - else - { - throw new InvalidOperationException($"Unexpected operand when processing branch {i}"); - } + // filter can do one of two things: + // - branch into handler + // - percolate to another catch block, which might not be in this method + // + // so we chose to model this as an unconditional branch into the handler + singleTargetOffset = filterForHandler.HandlerStart.Offset; + multiTargetOffsets = ImmutableArray.Empty; + } + else if (i.OpCode == OpCodes.Endfinally) + { + // Endfinally is very weird + // + // what it does, effectively is "take whatever branch would normally happen after the instruction + // that left the paired try + // + // practically, this makes endfinally a branch with no target + + singleTargetOffset = null; + multiTargetOffsets = ImmutableArray.Empty; + } + else + { + throw new InvalidOperationException($"Unexpected operand when processing branch {i}"); + } + + return (singleTargetOffset, multiTargetOffsets); + } - return (singleTargetOffset, multiTargetOffsets); + /// + /// Calculates which ranges of IL are unreachable, given blocks which have head and tail reachability calculated. + /// + private static ImmutableArray DetermineUnreachableRanges(ImmutableArray blocks, int lastInstructionOffset) + { + ImmutableArray.Builder ret = ImmutableArray.CreateBuilder(); + + int endOfMethodOffset = lastInstructionOffset + 1; // add 1 so we point _past_ the end of the method + + for (int curBlockIx = 0; curBlockIx < blocks.Length; curBlockIx++) + { + BasicBlock curBlock = blocks[curBlockIx]; + + int endOfCurBlockOffset; + if (curBlockIx == blocks.Length - 1) + { + endOfCurBlockOffset = endOfMethodOffset; + } + else + { + endOfCurBlockOffset = blocks[curBlockIx + 1].StartOffset - 1; // minus 1 so we don't include anything of the following block } - /// - /// Calculates which ranges of IL are unreachable, given blocks which have head and tail reachability calculated. - /// - private static ImmutableArray DetermineUnreachableRanges(ImmutableArray blocks, int lastInstructionOffset) + if (curBlock.HeadReachable) { - ImmutableArray.Builder ret = ImmutableArray.CreateBuilder(); + if (curBlock.TailReachable) + { + // it's all reachable + continue; + } - int endOfMethodOffset = lastInstructionOffset + 1; // add 1 so we point _past_ the end of the method + // tail isn't reachable, which means there's a call to something that doesn't return... + Instruction doesNotReturnInstr = curBlock.UnreachableAfter; - for (int curBlockIx = 0; curBlockIx < blocks.Length; curBlockIx++) - { - BasicBlock curBlock = blocks[curBlockIx]; - - int endOfCurBlockOffset; - if (curBlockIx == blocks.Length - 1) - { - endOfCurBlockOffset = endOfMethodOffset; - } - else - { - endOfCurBlockOffset = blocks[curBlockIx + 1].StartOffset - 1; // minus 1 so we don't include anything of the following block - } - - if (curBlock.HeadReachable) - { - if (curBlock.TailReachable) - { - // it's all reachable - continue; - } - - // tail isn't reachable, which means there's a call to something that doesn't return... - Instruction doesNotReturnInstr = curBlock.UnreachableAfter; - - // and it's everything _after_ the following instruction that is unreachable - // so record the following instruction through the end of the block - Instruction followingInstr = doesNotReturnInstr.Next; - - ret.Add(new UnreachableRange(followingInstr.Offset, endOfCurBlockOffset)); - } - else - { - // none of it is reachable - ret.Add(new UnreachableRange(curBlock.StartOffset, endOfCurBlockOffset)); - } - } + // and it's everything _after_ the following instruction that is unreachable + // so record the following instruction through the end of the block + Instruction followingInstr = doesNotReturnInstr.Next; - return ret.ToImmutable(); + ret.Add(new UnreachableRange(followingInstr.Offset, endOfCurBlockOffset)); } + else + { + // none of it is reachable + ret.Add(new UnreachableRange(curBlock.StartOffset, endOfCurBlockOffset)); + } + } + + return ret.ToImmutable(); + } + + /// + /// Process all the blocks and determine if their first instruction is reachable, + /// that is if they have "head reachability". + /// + /// "Tail reachability" will have already been determined in CreateBlocks. + /// + private static void DetermineHeadReachability(ImmutableArray blocks) + { + var blockLookup = blocks.ToImmutableDictionary(b => b.StartOffset); - /// - /// Process all the blocks and determine if their first instruction is reachable, - /// that is if they have "head reachability". - /// - /// "Tail reachability" will have already been determined in CreateBlocks. - /// - private static void DetermineHeadReachability(ImmutableArray blocks) + BasicBlock headBlock = blockLookup[0]; + + var knownLive = ImmutableStack.Create(headBlock); + + while (!knownLive.IsEmpty) + { + knownLive = knownLive.Pop(out BasicBlock block); + + if (block.HeadReachable) { - var blockLookup = blocks.ToImmutableDictionary(b => b.StartOffset); + // already seen this block + continue; + } - BasicBlock headBlock = blockLookup[0]; + // we can reach this block, clearly + block.HeadReachable = true; - var knownLive = ImmutableStack.Create(headBlock); + if (block.TailReachable) + { + // we can reach all the blocks it might flow to + foreach (int reachableOffset in block.BranchesTo) + { + BasicBlock reachableBlock = blockLookup[reachableOffset]; + knownLive = knownLive.Push(reachableBlock); + } + } - while (!knownLive.IsEmpty) - { - knownLive = knownLive.Pop(out BasicBlock block); - - if (block.HeadReachable) - { - // already seen this block - continue; - } - - // we can reach this block, clearly - block.HeadReachable = true; - - if (block.TailReachable) - { - // we can reach all the blocks it might flow to - foreach (int reachableOffset in block.BranchesTo) - { - BasicBlock reachableBlock = blockLookup[reachableOffset]; - knownLive = knownLive.Push(reachableBlock); - } - } - - // if the block is covered by an exception handler, then executing _any_ instruction in it - // could conceivably cause those handlers to be visited - foreach (int exceptionHandlerOffset in block.ExceptionBranchesTo) - { - BasicBlock reachableHandler = blockLookup[exceptionHandlerOffset]; - knownLive = knownLive.Push(reachableHandler); - } - } + // if the block is covered by an exception handler, then executing _any_ instruction in it + // could conceivably cause those handlers to be visited + foreach (int exceptionHandlerOffset in block.ExceptionBranchesTo) + { + BasicBlock reachableHandler = blockLookup[exceptionHandlerOffset]; + knownLive = knownLive.Push(reachableHandler); } + } + } - /// - /// Create BasicBlocks from an instruction stream, exception blocks, and branches. - /// - /// Each block starts either at the start of the method, immediately after a branch or at a target for a branch, - /// and ends with another branch, another branch target, or the end of the method. - /// - /// "Tail reachability" is also calculated, which is whether the block can ever actually get past its last instruction. - /// - private ImmutableArray CreateBasicBlocks(Collection instrs, Collection exceptionHandlers, ImmutableArray branches) + /// + /// Create BasicBlocks from an instruction stream, exception blocks, and branches. + /// + /// Each block starts either at the start of the method, immediately after a branch or at a target for a branch, + /// and ends with another branch, another branch target, or the end of the method. + /// + /// "Tail reachability" is also calculated, which is whether the block can ever actually get past its last instruction. + /// + private ImmutableArray CreateBasicBlocks(Collection instrs, Collection exceptionHandlers, ImmutableArray branches) + { + // every branch-like instruction starts or stops a block + ILookup branchInstrLocs = branches.ToLookup(i => i.Offset); + var branchInstrOffsets = branchInstrLocs.Select(k => k.Key).ToImmutableHashSet(); + + // every target that might be branched to starts or stops a block + ImmutableHashSet.Builder branchTargetOffsetsBuilder = ImmutableHashSet.CreateBuilder(); + foreach (BranchInstruction branch in branches) + { + if (branch.HasMultiTargets) { - // every branch-like instruction starts or stops a block - ILookup branchInstrLocs = branches.ToLookup(i => i.Offset); - var branchInstrOffsets = branchInstrLocs.Select(k => k.Key).ToImmutableHashSet(); + foreach (int target in branch.TargetOffsets) + { + branchTargetOffsetsBuilder.Add(target); + } + } + else + { + branchTargetOffsetsBuilder.Add(branch.TargetOffset); + } + } - // every target that might be branched to starts or stops a block - ImmutableHashSet.Builder branchTargetOffsetsBuilder = ImmutableHashSet.CreateBuilder(); - foreach (BranchInstruction branch in branches) - { - if (branch.HasMultiTargets) - { - foreach (int target in branch.TargetOffsets) - { - branchTargetOffsetsBuilder.Add(target); - } - } - else - { - branchTargetOffsetsBuilder.Add(branch.TargetOffset); - } - } + // every exception handler an entry point + // either it's handler, or it's filter (if present) + foreach (ExceptionHandler handler in exceptionHandlers) + { + if (handler.FilterStart != null) + { + branchTargetOffsetsBuilder.Add(handler.FilterStart.Offset); + } + else + { + branchTargetOffsetsBuilder.Add(handler.HandlerStart.Offset); + } + } - // every exception handler an entry point - // either it's handler, or it's filter (if present) - foreach (ExceptionHandler handler in exceptionHandlers) - { - if (handler.FilterStart != null) - { - branchTargetOffsetsBuilder.Add(handler.FilterStart.Offset); - } - else - { - branchTargetOffsetsBuilder.Add(handler.HandlerStart.Offset); - } - } + ImmutableHashSet branchTargetOffsets = branchTargetOffsetsBuilder.ToImmutable(); - ImmutableHashSet branchTargetOffsets = branchTargetOffsetsBuilder.ToImmutable(); + // ending the method is also important + int endOfMethodOffset = instrs[instrs.Count - 1].Offset; - // ending the method is also important - int endOfMethodOffset = instrs[instrs.Count - 1].Offset; + ImmutableArray blocks = ImmutableArray.Empty; + int? blockStartedAt = null; + Instruction unreachableAfter = null; + foreach (Instruction i in instrs) + { + int offset = i.Offset; + System.Collections.Generic.IEnumerable branchesAtLoc = branchInstrLocs[offset]; - ImmutableArray blocks = ImmutableArray.Empty; - int? blockStartedAt = null; - Instruction unreachableAfter = null; - foreach (Instruction i in instrs) - { - int offset = i.Offset; - System.Collections.Generic.IEnumerable branchesAtLoc = branchInstrLocs[offset]; - - if (blockStartedAt == null) - { - blockStartedAt = offset; - unreachableAfter = null; - } - - bool isBranch = branchInstrOffsets.Contains(offset); - bool isFollowedByBranchTarget = i.Next != null && branchTargetOffsets.Contains(i.Next.Offset); - bool isEndOfMtd = endOfMethodOffset == offset; - - if (unreachableAfter == null && DoesNotReturn(i)) - { - unreachableAfter = i; - } - - bool blockEnds = isBranch || isFollowedByBranchTarget || isEndOfMtd; - if (blockEnds) - { - Instruction nextInstr = i.Next; - - // figure out all the different places the basic block could lead to - ImmutableArray goesTo; - if (branchesAtLoc.Any()) - { - // it ends in a branch, where all does it branch? - goesTo = ImmutableArray.Empty; - foreach (BranchInstruction branch in branchesAtLoc) - { - if (branch.HasMultiTargets) - { - goesTo = goesTo.AddRange(branch.TargetOffsets); - } - else - { - goesTo = goesTo.Add(branch.TargetOffset); - } - } - } - else if (nextInstr != null) - { - // it falls throw to another instruction - goesTo = ImmutableArray.Create(nextInstr.Offset); - } - else - { - // it ends the method - goesTo = ImmutableArray.Empty; - } - - ImmutableArray exceptionSwitchesTo = ImmutableArray.Empty; - - // if the block is covered by any exception handlers then - // it is possible that it will branch to its handler block - foreach (ExceptionHandler handler in exceptionHandlers) - { - int tryStart = handler.TryStart.Offset; - int tryEnd = handler.TryEnd.Offset; - - bool containsStartOfTry = - tryStart >= blockStartedAt.Value && - tryStart <= i.Offset; - - bool containsEndOfTry = - tryEnd >= blockStartedAt.Value && - tryEnd <= i.Offset; - - bool blockInsideTry = blockStartedAt.Value >= tryStart && i.Offset <= tryEnd; - - // blocks do not necessarily align to the TRY part of exception handlers, so we need to handle three cases: - // - the try _starts_ in the block - // - the try _ends_ in the block - // - the try complete covers the block, but starts and ends before and after it (respectively) - bool tryOverlapsBlock = containsStartOfTry || containsEndOfTry || blockInsideTry; - - if (!tryOverlapsBlock) - { - continue; - } - - // if there's a filter, that runs first - if (handler.FilterStart != null) - { - exceptionSwitchesTo = exceptionSwitchesTo.Add(handler.FilterStart.Offset); - } - else - { - // otherwise, go straight to the handler - exceptionSwitchesTo = exceptionSwitchesTo.Add(handler.HandlerStart.Offset); - } - } - - blocks = blocks.Add(new BasicBlock(blockStartedAt.Value, unreachableAfter, goesTo, exceptionSwitchesTo)); - - blockStartedAt = null; - unreachableAfter = null; - } - } + if (blockStartedAt == null) + { + blockStartedAt = offset; + unreachableAfter = null; + } + + bool isBranch = branchInstrOffsets.Contains(offset); + bool isFollowedByBranchTarget = i.Next != null && branchTargetOffsets.Contains(i.Next.Offset); + bool isEndOfMtd = endOfMethodOffset == offset; - return blocks; + if (unreachableAfter == null && DoesNotReturn(i)) + { + unreachableAfter = i; } - /// - /// Returns true if the given instruction will never return, - /// and thus subsequent instructions will never be run. - /// - private bool DoesNotReturn(Instruction instr) + bool blockEnds = isBranch || isFollowedByBranchTarget || isEndOfMtd; + if (blockEnds) { - if (!IsCall(instr, out MethodReference mtd)) + Instruction nextInstr = i.Next; + + // figure out all the different places the basic block could lead to + ImmutableArray goesTo; + if (branchesAtLoc.Any()) + { + // it ends in a branch, where all does it branch? + goesTo = ImmutableArray.Empty; + foreach (BranchInstruction branch in branchesAtLoc) { - return false; + if (branch.HasMultiTargets) + { + goesTo = goesTo.AddRange(branch.TargetOffsets); + } + else + { + goesTo = goesTo.Add(branch.TargetOffset); + } + } + } + else if (nextInstr != null) + { + // it falls throw to another instruction + goesTo = ImmutableArray.Create(nextInstr.Offset); + } + else + { + // it ends the method + goesTo = ImmutableArray.Empty; + } + + ImmutableArray exceptionSwitchesTo = ImmutableArray.Empty; + + // if the block is covered by any exception handlers then + // it is possible that it will branch to its handler block + foreach (ExceptionHandler handler in exceptionHandlers) + { + int tryStart = handler.TryStart.Offset; + int tryEnd = handler.TryEnd.Offset; + + bool containsStartOfTry = + tryStart >= blockStartedAt.Value && + tryStart <= i.Offset; + + bool containsEndOfTry = + tryEnd >= blockStartedAt.Value && + tryEnd <= i.Offset; + + bool blockInsideTry = blockStartedAt.Value >= tryStart && i.Offset <= tryEnd; + + // blocks do not necessarily align to the TRY part of exception handlers, so we need to handle three cases: + // - the try _starts_ in the block + // - the try _ends_ in the block + // - the try complete covers the block, but starts and ends before and after it (respectively) + bool tryOverlapsBlock = containsStartOfTry || containsEndOfTry || blockInsideTry; + + if (!tryOverlapsBlock) + { + continue; } - return _doesNotReturnMethods.Contains(mtd.MetadataToken); - } - - /// - /// Returns true if the given instruction is a Call or Callvirt. - /// - /// If it is a call, extracts the MethodReference that is being called. - /// - private static bool IsCall(Instruction instr, out MethodReference mtd) - { - OpCode opcode = instr.OpCode; - if (opcode != OpCodes.Call && opcode != OpCodes.Callvirt) + // if there's a filter, that runs first + if (handler.FilterStart != null) { - mtd = null; - return false; + exceptionSwitchesTo = exceptionSwitchesTo.Add(handler.FilterStart.Offset); } + else + { + // otherwise, go straight to the handler + exceptionSwitchesTo = exceptionSwitchesTo.Add(handler.HandlerStart.Offset); + } + } - mtd = (MethodReference)instr.Operand; + blocks = blocks.Add(new BasicBlock(blockStartedAt.Value, unreachableAfter, goesTo, exceptionSwitchesTo)); - return true; + blockStartedAt = null; + unreachableAfter = null; } + } + + return blocks; + } + + /// + /// Returns true if the given instruction will never return, + /// and thus subsequent instructions will never be run. + /// + private bool DoesNotReturn(Instruction instr) + { + if (!IsCall(instr, out MethodReference mtd)) + { + return false; + } + + return _doesNotReturnMethods.Contains(mtd.MetadataToken); + } + + /// + /// Returns true if the given instruction is a Call or Callvirt. + /// + /// If it is a call, extracts the MethodReference that is being called. + /// + private static bool IsCall(Instruction instr, out MethodReference mtd) + { + OpCode opcode = instr.OpCode; + if (opcode != OpCodes.Call && opcode != OpCodes.Callvirt) + { + mtd = null; + return false; + } + + mtd = (MethodReference)instr.Operand; + + return true; } + } } diff --git a/src/coverlet.core/Properties/AssemblyInfo.cs b/src/coverlet.core/Properties/AssemblyInfo.cs index 7e65be514..43d36cd7b 100644 --- a/src/coverlet.core/Properties/AssemblyInfo.cs +++ b/src/coverlet.core/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; @@ -12,6 +12,11 @@ [assembly: InternalsVisibleTo("coverlet.core.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] [assembly: InternalsVisibleTo("coverlet.collector.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100ed0ed6af9693182615b8dcadc83c918b8d36312f86cefc69539d67d4189cd1b89420e7c3871802ffef7f5ca7816c68ad856c77bf7c230cc07824d96aa5d1237eebd30e246b9a14e22695fb26b40c800f74ea96619092cbd3a5d430d6c003fc7a82e8ccd1e315b935105d9232fe9e99e8d7ff54bba6f191959338d4a3169df9b3")] +[assembly: InternalsVisibleTo("coverlet.msbuild.tasks.tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010071b1583d63637a225f3f640252fee7130f0f3f2127d75025c1c3ee2d6dfc79a4950919268e0784d7ff54b0eadd8e4762e3e150da422e20e091eb0811d9d84e1779d5b95e349d5428aebb16e82e081bdf805926c5a9eb2094aaed9d36442de024264976a8835c7d6923047cf2f745e8f0ded2332f8980acd390f725224d976ed8")] [assembly: InternalsVisibleTo("coverlet.integration.tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010001d24efbe9cbc2dc49b7a3d2ae34ca37cfb69b4f450acd768a22ce5cd021c8a38ae7dc68b2809a1ac606ad531b578f192a5690b2986990cbda4dd84ec65a3a4c1c36f6d7bb18f08592b93091535eaee2f0c8e48763ed7f190db2008e1f9e0facd5c0df5aaab74febd3430e09a428a72e5e6b88357f92d78e47512d46ebdc3cbb")] +[assembly: InternalsVisibleTo("coverlet.tests.projectsample.aspnet8.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] +[assembly: InternalsVisibleTo("coverlet.tests.projectsample.wpf8.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] +[assembly: InternalsVisibleTo("coverlet.tests.projectsample.aspmvcrazor.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] + // Needed to mock internal type https://github.com/Moq/moq4/wiki/Quickstart#advanced-features -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] \ No newline at end of file +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] diff --git a/src/coverlet.core/Reporters/CoberturaReporter.cs b/src/coverlet.core/Reporters/CoberturaReporter.cs index e3d299fda..23da40c77 100644 --- a/src/coverlet.core/Reporters/CoberturaReporter.cs +++ b/src/coverlet.core/Reporters/CoberturaReporter.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; @@ -14,220 +13,223 @@ namespace Coverlet.Core.Reporters { - internal class CoberturaReporter : IReporter - { - public ReporterOutputType OutputType => ReporterOutputType.File; + internal class CoberturaReporter : IReporter + { + public ReporterOutputType OutputType => ReporterOutputType.File; - public string Format => "cobertura"; + public string Format => "cobertura"; - public string Extension => "cobertura.xml"; + public string Extension => "cobertura.xml"; - public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) + public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) + { + var summary = new CoverageSummary(); + + CoverageDetails lineCoverage = summary.CalculateLineCoverage(result.Modules); + CoverageDetails branchCoverage = summary.CalculateBranchCoverage(result.Modules); + + var xml = new XDocument(); + var coverage = new XElement("coverage"); + coverage.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(result.Modules).Percent / 100).ToString(CultureInfo.InvariantCulture))); + coverage.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(result.Modules).Percent / 100).ToString(CultureInfo.InvariantCulture))); + coverage.Add(new XAttribute("version", "1.9")); + coverage.Add(new XAttribute("timestamp", (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds)); + + var sources = new XElement("sources"); + + var absolutePaths = new List(); + if (!result.Parameters.DeterministicReport) + { + absolutePaths = GetBasePaths(result.Modules, result.Parameters.UseSourceLink).ToList(); + absolutePaths.ForEach(x => sources.Add(new XElement("source", x))); + } + + var packages = new XElement("packages"); + foreach (KeyValuePair module in result.Modules) + { + var package = new XElement("package"); + package.Add(new XAttribute("name", Path.GetFileNameWithoutExtension(module.Key))); + package.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(module.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); + package.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(module.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); + package.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(module.Value))); + + var classes = new XElement("classes"); + foreach (KeyValuePair document in module.Value) { - var summary = new CoverageSummary(); - - CoverageDetails lineCoverage = summary.CalculateLineCoverage(result.Modules); - CoverageDetails branchCoverage = summary.CalculateBranchCoverage(result.Modules); - - var xml = new XDocument(); - var coverage = new XElement("coverage"); - coverage.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(result.Modules).Percent / 100).ToString(CultureInfo.InvariantCulture))); - coverage.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(result.Modules).Percent / 100).ToString(CultureInfo.InvariantCulture))); - coverage.Add(new XAttribute("version", "1.9")); - coverage.Add(new XAttribute("timestamp", (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds)); - - var sources = new XElement("sources"); - - var absolutePaths = new List(); + foreach (KeyValuePair cls in document.Value) + { + var @class = new XElement("class"); + @class.Add(new XAttribute("name", cls.Key)); + string fileName; if (!result.Parameters.DeterministicReport) { - absolutePaths = GetBasePaths(result.Modules, result.Parameters.UseSourceLink).ToList(); - absolutePaths.ForEach(x => sources.Add(new XElement("source", x))); + fileName = GetRelativePathFromBase(absolutePaths, document.Key, result.Parameters.UseSourceLink); + } + else + { + fileName = sourceRootTranslator.ResolveDeterministicPath(document.Key); } + @class.Add(new XAttribute("filename", fileName)); + @class.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(cls.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); + @class.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(cls.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); + @class.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(cls.Value))); + + var classLines = new XElement("lines"); + var methods = new XElement("methods"); - var packages = new XElement("packages"); - foreach (KeyValuePair module in result.Modules) + foreach (KeyValuePair meth in cls.Value) { - var package = new XElement("package"); - package.Add(new XAttribute("name", Path.GetFileNameWithoutExtension(module.Key))); - package.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(module.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); - package.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(module.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); - package.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(module.Value))); - - var classes = new XElement("classes"); - foreach (KeyValuePair document in module.Value) + // Skip all methods with no lines + if (meth.Value.Lines.Count == 0) + continue; + + var method = new XElement("method"); + method.Add(new XAttribute("name", meth.Key.Split(':').Last().Split('(').First())); + method.Add(new XAttribute("signature", "(" + meth.Key.Split(':').Last().Split('(').Last())); + method.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(meth.Value.Lines).Percent / 100).ToString(CultureInfo.InvariantCulture))); + method.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(meth.Value.Branches).Percent / 100).ToString(CultureInfo.InvariantCulture))); + method.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(meth.Value.Branches))); + + var lines = new XElement("lines"); + foreach (KeyValuePair ln in meth.Value.Lines) + { + bool isBranchPoint = meth.Value.Branches.Any(b => b.Line == ln.Key); + var line = new XElement("line"); + line.Add(new XAttribute("number", ln.Key.ToString())); + line.Add(new XAttribute("hits", ln.Value.ToString())); + line.Add(new XAttribute("branch", isBranchPoint.ToString())); + + if (isBranchPoint) { - foreach (KeyValuePair cls in document.Value) - { - var @class = new XElement("class"); - @class.Add(new XAttribute("name", cls.Key)); - string fileName; - if (!result.Parameters.DeterministicReport) - { - fileName = GetRelativePathFromBase(absolutePaths, document.Key, result.Parameters.UseSourceLink); - } - else - { - fileName = sourceRootTranslator.ResolveDeterministicPath(document.Key); - } - @class.Add(new XAttribute("filename", fileName)); - @class.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(cls.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); - @class.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(cls.Value).Percent / 100).ToString(CultureInfo.InvariantCulture))); - @class.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(cls.Value))); - - var classLines = new XElement("lines"); - var methods = new XElement("methods"); - - foreach (KeyValuePair meth in cls.Value) - { - // Skip all methods with no lines - if (meth.Value.Lines.Count == 0) - continue; - - var method = new XElement("method"); - method.Add(new XAttribute("name", meth.Key.Split(':').Last().Split('(').First())); - method.Add(new XAttribute("signature", "(" + meth.Key.Split(':').Last().Split('(').Last())); - method.Add(new XAttribute("line-rate", (summary.CalculateLineCoverage(meth.Value.Lines).Percent / 100).ToString(CultureInfo.InvariantCulture))); - method.Add(new XAttribute("branch-rate", (summary.CalculateBranchCoverage(meth.Value.Branches).Percent / 100).ToString(CultureInfo.InvariantCulture))); - method.Add(new XAttribute("complexity", summary.CalculateCyclomaticComplexity(meth.Value.Branches))); - - var lines = new XElement("lines"); - foreach (KeyValuePair ln in meth.Value.Lines) - { - bool isBranchPoint = meth.Value.Branches.Any(b => b.Line == ln.Key); - var line = new XElement("line"); - line.Add(new XAttribute("number", ln.Key.ToString())); - line.Add(new XAttribute("hits", ln.Value.ToString())); - line.Add(new XAttribute("branch", isBranchPoint.ToString())); - - if (isBranchPoint) - { - var branches = meth.Value.Branches.Where(b => b.Line == ln.Key).ToList(); - CoverageDetails branchInfoCoverage = summary.CalculateBranchCoverage(branches); - line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.Percent.ToString(CultureInfo.InvariantCulture)}% ({branchInfoCoverage.Covered.ToString(CultureInfo.InvariantCulture)}/{branchInfoCoverage.Total.ToString(CultureInfo.InvariantCulture)})")); - var conditions = new XElement("conditions"); - var byOffset = branches.GroupBy(b => b.Offset).ToDictionary(b => b.Key, b => b.ToList()); - foreach (KeyValuePair> entry in byOffset) - { - var condition = new XElement("condition"); - condition.Add(new XAttribute("number", entry.Key)); - condition.Add(new XAttribute("type", entry.Value.Count > 2 ? "switch" : "jump")); // Just guessing here - condition.Add(new XAttribute("coverage", $"{summary.CalculateBranchCoverage(entry.Value).Percent.ToString(CultureInfo.InvariantCulture)}%")); - conditions.Add(condition); - } - - line.Add(conditions); - } - - lines.Add(line); - classLines.Add(line); - } - - method.Add(lines); - methods.Add(method); - } - - @class.Add(methods); - @class.Add(classLines); - classes.Add(@class); - } + var branches = meth.Value.Branches.Where(b => b.Line == ln.Key).ToList(); + CoverageDetails branchInfoCoverage = summary.CalculateBranchCoverage(branches); + line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.Percent.ToString(CultureInfo.InvariantCulture)}% ({branchInfoCoverage.Covered.ToString(CultureInfo.InvariantCulture)}/{branchInfoCoverage.Total.ToString(CultureInfo.InvariantCulture)})")); + var conditions = new XElement("conditions"); + var byOffset = branches.GroupBy(b => b.Offset).ToDictionary(b => b.Key, b => b.ToList()); + foreach (KeyValuePair> entry in byOffset) + { + var condition = new XElement("condition"); + condition.Add(new XAttribute("number", entry.Key)); + condition.Add(new XAttribute("type", entry.Value.Count > 2 ? "switch" : "jump")); // Just guessing here + condition.Add(new XAttribute("coverage", $"{summary.CalculateBranchCoverage(entry.Value).Percent.ToString(CultureInfo.InvariantCulture)}%")); + conditions.Add(condition); + } + + line.Add(conditions); } - package.Add(classes); - packages.Add(package); + lines.Add(line); + classLines.Add(line); + } + + method.Add(lines); + methods.Add(method); } - coverage.Add(new XAttribute("lines-covered", lineCoverage.Covered.ToString(CultureInfo.InvariantCulture))); - coverage.Add(new XAttribute("lines-valid", lineCoverage.Total.ToString(CultureInfo.InvariantCulture))); - coverage.Add(new XAttribute("branches-covered", branchCoverage.Covered.ToString(CultureInfo.InvariantCulture))); - coverage.Add(new XAttribute("branches-valid", branchCoverage.Total.ToString(CultureInfo.InvariantCulture))); + @class.Add(methods); + @class.Add(classLines); + classes.Add(@class); + } + } + + package.Add(classes); + packages.Add(package); + } - coverage.Add(sources); - coverage.Add(packages); - xml.Add(coverage); + coverage.Add(new XAttribute("lines-covered", lineCoverage.Covered.ToString(CultureInfo.InvariantCulture))); + coverage.Add(new XAttribute("lines-valid", lineCoverage.Total.ToString(CultureInfo.InvariantCulture))); + coverage.Add(new XAttribute("branches-covered", branchCoverage.Covered.ToString(CultureInfo.InvariantCulture))); + coverage.Add(new XAttribute("branches-valid", branchCoverage.Total.ToString(CultureInfo.InvariantCulture))); - var stream = new MemoryStream(); - xml.Save(stream); + coverage.Add(sources); + coverage.Add(packages); + xml.Add(coverage); - return Encoding.UTF8.GetString(stream.ToArray()); - } + using var stream = new MemoryStream(); + using var streamWriter = new StreamWriter(stream, new UTF8Encoding(false)); + xml.Save(streamWriter); - private static IEnumerable GetBasePaths(Modules modules, bool useSourceLink) + return Encoding.UTF8.GetString(stream.ToArray()); + } + + private static IEnumerable GetBasePaths(Modules modules, bool useSourceLink) + { + /* + Workflow + + Path1 c:\dir1\dir2\file1.cs + Path2 c:\dir1\file2.cs + Path3 e:\dir1\file2.cs + + 1) Search for root dir + c:\ -> c:\dir1\dir2\file1.cs + c:\dir1\file2.cs + e:\ -> e:\dir1\file2.cs + + 2) Split path on directory separator i.e. for record c:\ ordered ascending by fragment elements + Path1 = [c:|dir1|file2.cs] + Path2 = [c:|dir1|dir2|file1.cs] + + 3) Find longest shared path comparing indexes + Path1[0] = Path2[0], ..., PathY[0] -> add to final fragment list + Path1[n] = Path2[n], ..., PathY[n] -> add to final fragment list + Path1[n+1] != Path2[n+1], ..., PathY[n+1] -> break, Path1[n] was last shared fragment + + 4) Concat created fragment list + */ + if (useSourceLink) + { + return new[] { string.Empty }; + } + + return modules.Values.SelectMany(k => k.Keys).GroupBy(Directory.GetDirectoryRoot).Select(group => + { + var splittedPaths = group.Select(absolutePath => absolutePath.Split(Path.DirectorySeparatorChar)) + .OrderBy(absolutePath => absolutePath.Length).ToList(); + if (splittedPaths.Count == 1) { - /* - Workflow - - Path1 c:\dir1\dir2\file1.cs - Path2 c:\dir1\file2.cs - Path3 e:\dir1\file2.cs - - 1) Search for root dir - c:\ -> c:\dir1\dir2\file1.cs - c:\dir1\file2.cs - e:\ -> e:\dir1\file2.cs - - 2) Split path on directory separator i.e. for record c:\ ordered ascending by fragment elements - Path1 = [c:|dir1|file2.cs] - Path2 = [c:|dir1|dir2|file1.cs] - - 3) Find longest shared path comparing indexes - Path1[0] = Path2[0], ..., PathY[0] -> add to final fragment list - Path1[n] = Path2[n], ..., PathY[n] -> add to final fragment list - Path1[n+1] != Path2[n+1], ..., PathY[n+1] -> break, Path1[n] was last shared fragment - - 4) Concat created fragment list - */ - if (useSourceLink) - { - return new[] { string.Empty }; - } + return group.Key; + } - return modules.Values.SelectMany(k => k.Keys).GroupBy(Directory.GetDirectoryRoot).Select(group => - { - var splittedPaths = group.Select(absolutePath => absolutePath.Split(Path.DirectorySeparatorChar)) - .OrderBy(absolutePath => absolutePath.Length).ToList(); - if (splittedPaths.Count == 1) + var basePathFragments = new List(); + bool stopSearch = false; + splittedPaths[0].Select((value, index) => (value, index)).ToList().ForEach(fragmentIndexPair => + { + if (stopSearch) { - return group.Key; + return; } - var basePathFragments = new List(); - bool stopSearch = false; - splittedPaths[0].Select((value, index) => (value, index)).ToList().ForEach(fragmentIndexPair => + if (splittedPaths.All(sp => fragmentIndexPair.value.Equals(sp[fragmentIndexPair.index]))) { - if (stopSearch) - { - return; - } - - if (splittedPaths.All(sp => fragmentIndexPair.value.Equals(sp[fragmentIndexPair.index]))) - { - basePathFragments.Add(fragmentIndexPair.value); - } - else - { - stopSearch = true; - } - }); - return string.Concat(string.Join(Path.DirectorySeparatorChar.ToString(), basePathFragments), Path.DirectorySeparatorChar); - }); - } - - private static string GetRelativePathFromBase(IEnumerable basePaths, string path, bool useSourceLink) - { - if (useSourceLink) - { - return path; - } - - foreach (string basePath in basePaths) - { - if (path.StartsWith(basePath)) + basePathFragments.Add(fragmentIndexPair.value); + } + else { - return path.Substring(basePath.Length); + stopSearch = true; } - } - return path; + }); + return string.Concat(string.Join(Path.DirectorySeparatorChar.ToString(), basePathFragments), Path.DirectorySeparatorChar); + }); + } + + private static string GetRelativePathFromBase(IEnumerable basePaths, string path, bool useSourceLink) + { + if (useSourceLink) + { + return path; + } + + foreach (string basePath in basePaths) + { + if (path.StartsWith(basePath)) + { +#pragma warning disable IDE0057 // Use range operator + return path.Substring(basePath.Length); +#pragma warning restore IDE0057 // Use range operator } + } + return path; } + } } diff --git a/src/coverlet.core/Reporters/JsonReporter.cs b/src/coverlet.core/Reporters/JsonReporter.cs index 39ecc6e2f..e684e8c8a 100644 --- a/src/coverlet.core/Reporters/JsonReporter.cs +++ b/src/coverlet.core/Reporters/JsonReporter.cs @@ -6,17 +6,17 @@ namespace Coverlet.Core.Reporters { - internal class JsonReporter : IReporter - { - public ReporterOutputType OutputType => ReporterOutputType.File; + internal class JsonReporter : IReporter + { + public ReporterOutputType OutputType => ReporterOutputType.File; - public string Format => "json"; + public string Format => "json"; - public string Extension => "json"; + public string Extension => "json"; - public string Report(CoverageResult result, ISourceRootTranslator _) - { - return JsonConvert.SerializeObject(result.Modules, Formatting.Indented); - } + public string Report(CoverageResult result, ISourceRootTranslator _) + { + return JsonConvert.SerializeObject(result.Modules, Formatting.Indented); } + } } diff --git a/src/coverlet.core/Reporters/LcovReporter.cs b/src/coverlet.core/Reporters/LcovReporter.cs index 5b7471f42..66cbc9b64 100644 --- a/src/coverlet.core/Reporters/LcovReporter.cs +++ b/src/coverlet.core/Reporters/LcovReporter.cs @@ -8,68 +8,68 @@ namespace Coverlet.Core.Reporters { - internal class LcovReporter : IReporter - { - public ReporterOutputType OutputType => ReporterOutputType.File; + internal class LcovReporter : IReporter + { + public ReporterOutputType OutputType => ReporterOutputType.File; + + public string Format => "lcov"; + + public string Extension => "info"; - public string Format => "lcov"; + public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) + { + if (result.Parameters.DeterministicReport) + { + throw new NotSupportedException("Deterministic report not supported by lcov reporter"); + } - public string Extension => "info"; + var summary = new CoverageSummary(); + var lcov = new List(); - public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) + foreach (KeyValuePair module in result.Modules) + { + foreach (KeyValuePair doc in module.Value) { - if (result.Parameters.DeterministicReport) + CoverageDetails docLineCoverage = summary.CalculateLineCoverage(doc.Value); + CoverageDetails docBranchCoverage = summary.CalculateBranchCoverage(doc.Value); + CoverageDetails docMethodCoverage = summary.CalculateMethodCoverage(doc.Value); + + lcov.Add("SF:" + doc.Key); + foreach (KeyValuePair @class in doc.Value) + { + foreach (KeyValuePair method in @class.Value) { - throw new NotSupportedException("Deterministic report not supported by lcov reporter"); - } + // Skip all methods with no lines + if (method.Value.Lines.Count == 0) + continue; - var summary = new CoverageSummary(); - var lcov = new List(); + lcov.Add($"FN:{method.Value.Lines.First().Key - 1},{method.Key}"); + lcov.Add($"FNDA:{method.Value.Lines.First().Value},{method.Key}"); - foreach (KeyValuePair module in result.Modules) - { - foreach (KeyValuePair doc in module.Value) - { - CoverageDetails docLineCoverage = summary.CalculateLineCoverage(doc.Value); - CoverageDetails docBranchCoverage = summary.CalculateBranchCoverage(doc.Value); - CoverageDetails docMethodCoverage = summary.CalculateMethodCoverage(doc.Value); - - lcov.Add("SF:" + doc.Key); - foreach (KeyValuePair @class in doc.Value) - { - foreach (KeyValuePair method in @class.Value) - { - // Skip all methods with no lines - if (method.Value.Lines.Count == 0) - continue; - - lcov.Add($"FN:{method.Value.Lines.First().Key - 1},{method.Key}"); - lcov.Add($"FNDA:{method.Value.Lines.First().Value},{method.Key}"); - - foreach (KeyValuePair line in method.Value.Lines) - lcov.Add($"DA:{line.Key},{line.Value}"); - - foreach (BranchInfo branch in method.Value.Branches) - { - lcov.Add($"BRDA:{branch.Line},{branch.Offset},{branch.Path},{branch.Hits}"); - } - } - } - - lcov.Add($"LF:{docLineCoverage.Total}"); - lcov.Add($"LH:{docLineCoverage.Covered}"); - - lcov.Add($"BRF:{docBranchCoverage.Total}"); - lcov.Add($"BRH:{docBranchCoverage.Covered}"); - - lcov.Add($"FNF:{docMethodCoverage.Total}"); - lcov.Add($"FNH:{docMethodCoverage.Covered}"); - - lcov.Add("end_of_record"); - } + foreach (KeyValuePair line in method.Value.Lines) + lcov.Add($"DA:{line.Key},{line.Value}"); + + foreach (BranchInfo branch in method.Value.Branches) + { + lcov.Add($"BRDA:{branch.Line},{branch.Offset},{branch.Path},{branch.Hits}"); + } } + } + + lcov.Add($"LF:{docLineCoverage.Total}"); + lcov.Add($"LH:{docLineCoverage.Covered}"); + + lcov.Add($"BRF:{docBranchCoverage.Total}"); + lcov.Add($"BRH:{docBranchCoverage.Covered}"); - return string.Join(Environment.NewLine, lcov); + lcov.Add($"FNF:{docMethodCoverage.Total}"); + lcov.Add($"FNH:{docMethodCoverage.Covered}"); + + lcov.Add("end_of_record"); } + } + + return string.Join(Environment.NewLine, lcov); } + } } diff --git a/src/coverlet.core/Reporters/OpenCoverReporter.cs b/src/coverlet.core/Reporters/OpenCoverReporter.cs index 2e42c2894..2ea068ee0 100644 --- a/src/coverlet.core/Reporters/OpenCoverReporter.cs +++ b/src/coverlet.core/Reporters/OpenCoverReporter.cs @@ -11,247 +11,248 @@ namespace Coverlet.Core.Reporters { - internal class OpenCoverReporter : IReporter + internal class OpenCoverReporter : IReporter + { + public ReporterOutputType OutputType => ReporterOutputType.File; + + public string Format => "opencover"; + + public string Extension => "opencover.xml"; + + public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) { - public ReporterOutputType OutputType => ReporterOutputType.File; + if (result.Parameters.DeterministicReport) + { + throw new NotSupportedException("Deterministic report not supported by openCover reporter"); + } - public string Format => "opencover"; + var summary = new CoverageSummary(); + var xml = new XDocument(); + var coverage = new XElement("CoverageSession"); + var coverageSummary = new XElement("Summary"); + var modules = new XElement("Modules"); - public string Extension => "opencover.xml"; + int numClasses = 0, numMethods = 0; + int visitedClasses = 0, visitedMethods = 0; - public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) - { - if (result.Parameters.DeterministicReport) - { - throw new NotSupportedException("Deterministic report not supported by openCover reporter"); - } + int i = 1; - var summary = new CoverageSummary(); - var xml = new XDocument(); - var coverage = new XElement("CoverageSession"); - var coverageSummary = new XElement("Summary"); - var modules = new XElement("Modules"); + foreach (System.Collections.Generic.KeyValuePair mod in result.Modules) + { + var module = new XElement("Module"); + module.Add(new XAttribute("hash", Guid.NewGuid().ToString().ToUpper())); - int numClasses = 0, numMethods = 0; - int visitedClasses = 0, visitedMethods = 0; + var path = new XElement("ModulePath", mod.Key); + var time = new XElement("ModuleTime", DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ss")); + var name = new XElement("ModuleName", Path.GetFileNameWithoutExtension(mod.Key)); - int i = 1; + module.Add(path); + module.Add(time); + module.Add(name); - foreach (System.Collections.Generic.KeyValuePair mod in result.Modules) - { - var module = new XElement("Module"); - module.Add(new XAttribute("hash", Guid.NewGuid().ToString().ToUpper())); + var files = new XElement("Files"); + var classes = new XElement("Classes"); + + foreach (System.Collections.Generic.KeyValuePair doc in mod.Value) + { + var file = new XElement("File"); + file.Add(new XAttribute("uid", i.ToString())); + file.Add(new XAttribute("fullPath", doc.Key)); + files.Add(file); - var path = new XElement("ModulePath", mod.Key); - var time = new XElement("ModuleTime", DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ss")); - var name = new XElement("ModuleName", Path.GetFileNameWithoutExtension(mod.Key)); + foreach (System.Collections.Generic.KeyValuePair cls in doc.Value) + { + var @class = new XElement("Class"); + var classSummary = new XElement("Summary"); - module.Add(path); - module.Add(time); - module.Add(name); + var className = new XElement("FullName", cls.Key); - var files = new XElement("Files"); - var classes = new XElement("Classes"); + var methods = new XElement("Methods"); + int j = 0; + bool classVisited = false; - foreach (System.Collections.Generic.KeyValuePair doc in mod.Value) + foreach (System.Collections.Generic.KeyValuePair meth in cls.Value) + { + // Skip all methods with no lines + if (meth.Value.Lines.Count == 0) + continue; + + CoverageDetails methLineCoverage = summary.CalculateLineCoverage(meth.Value.Lines); + CoverageDetails methBranchCoverage = summary.CalculateBranchCoverage(meth.Value.Branches); + int methCyclomaticComplexity = summary.CalculateCyclomaticComplexity(meth.Value.Branches); + int methNpathComplexity = summary.CalculateNpathComplexity(meth.Value.Branches); + + var method = new XElement("Method"); + + method.Add(new XAttribute("cyclomaticComplexity", methCyclomaticComplexity.ToString())); + method.Add(new XAttribute("nPathComplexity", methCyclomaticComplexity.ToString())); + method.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + method.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + method.Add(new XAttribute("isConstructor", meth.Key.Contains("ctor").ToString())); + method.Add(new XAttribute("isGetter", meth.Key.Contains("get_").ToString())); + method.Add(new XAttribute("isSetter", meth.Key.Contains("set_").ToString())); + method.Add(new XAttribute("isStatic", (!meth.Key.Contains("get_") || !meth.Key.Contains("set_")).ToString())); + + var methodName = new XElement("Name", meth.Key); + + var fileRef = new XElement("FileRef"); + fileRef.Add(new XAttribute("uid", i.ToString())); + + var methodPoint = new XElement("MethodPoint"); + methodPoint.Add(new XAttribute("vc", methLineCoverage.Covered.ToString())); + methodPoint.Add(new XAttribute("uspid", "0")); + methodPoint.Add(new XAttribute(XName.Get("type", "xsi"), "SequencePoint")); + methodPoint.Add(new XAttribute("ordinal", j.ToString())); + methodPoint.Add(new XAttribute("offset", j.ToString())); + methodPoint.Add(new XAttribute("sc", "0")); + methodPoint.Add(new XAttribute("sl", meth.Value.Lines.First().Key.ToString())); + methodPoint.Add(new XAttribute("ec", "1")); + methodPoint.Add(new XAttribute("el", meth.Value.Lines.Last().Key.ToString())); + methodPoint.Add(new XAttribute("bec", "0")); + methodPoint.Add(new XAttribute("bev", "0")); + methodPoint.Add(new XAttribute("fileid", i.ToString())); + + // They're really just lines + var sequencePoints = new XElement("SequencePoints"); + var branchPoints = new XElement("BranchPoints"); + var methodSummary = new XElement("Summary"); + int k = 0; + int kBr = 0; + bool methodVisited = false; + + foreach (System.Collections.Generic.KeyValuePair lines in meth.Value.Lines) + { + BranchInfo[] lineBranches = meth.Value.Branches.Where(branchInfo => branchInfo.Line == lines.Key).ToArray(); + CoverageDetails branchCoverage = summary.CalculateBranchCoverage(lineBranches); + + var sequencePoint = new XElement("SequencePoint"); + sequencePoint.Add(new XAttribute("vc", lines.Value.ToString())); + sequencePoint.Add(new XAttribute("uspid", lines.Key.ToString())); + sequencePoint.Add(new XAttribute("ordinal", k.ToString())); + sequencePoint.Add(new XAttribute("sl", lines.Key.ToString())); + sequencePoint.Add(new XAttribute("sc", "1")); + sequencePoint.Add(new XAttribute("el", lines.Key.ToString())); + sequencePoint.Add(new XAttribute("ec", "2")); + sequencePoint.Add(new XAttribute("bec", branchCoverage.Total)); + sequencePoint.Add(new XAttribute("bev", branchCoverage.Covered)); + sequencePoint.Add(new XAttribute("fileid", i.ToString())); + sequencePoints.Add(sequencePoint); + + if (lines.Value > 0) { - var file = new XElement("File"); - file.Add(new XAttribute("uid", i.ToString())); - file.Add(new XAttribute("fullPath", doc.Key)); - files.Add(file); - - foreach (System.Collections.Generic.KeyValuePair cls in doc.Value) - { - var @class = new XElement("Class"); - var classSummary = new XElement("Summary"); - - var className = new XElement("FullName", cls.Key); - - var methods = new XElement("Methods"); - int j = 0; - bool classVisited = false; - - foreach (System.Collections.Generic.KeyValuePair meth in cls.Value) - { - // Skip all methods with no lines - if (meth.Value.Lines.Count == 0) - continue; - - CoverageDetails methLineCoverage = summary.CalculateLineCoverage(meth.Value.Lines); - CoverageDetails methBranchCoverage = summary.CalculateBranchCoverage(meth.Value.Branches); - int methCyclomaticComplexity = summary.CalculateCyclomaticComplexity(meth.Value.Branches); - int methNpathComplexity = summary.CalculateNpathComplexity(meth.Value.Branches); - - var method = new XElement("Method"); - - method.Add(new XAttribute("cyclomaticComplexity", methCyclomaticComplexity.ToString())); - method.Add(new XAttribute("nPathComplexity", methCyclomaticComplexity.ToString())); - method.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - method.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - method.Add(new XAttribute("isConstructor", meth.Key.Contains("ctor").ToString())); - method.Add(new XAttribute("isGetter", meth.Key.Contains("get_").ToString())); - method.Add(new XAttribute("isSetter", meth.Key.Contains("set_").ToString())); - method.Add(new XAttribute("isStatic", (!meth.Key.Contains("get_") || !meth.Key.Contains("set_")).ToString())); - - var methodName = new XElement("Name", meth.Key); - - var fileRef = new XElement("FileRef"); - fileRef.Add(new XAttribute("uid", i.ToString())); - - var methodPoint = new XElement("MethodPoint"); - methodPoint.Add(new XAttribute("vc", methLineCoverage.Covered.ToString())); - methodPoint.Add(new XAttribute("uspid", "0")); - methodPoint.Add(new XAttribute(XName.Get("type", "xsi"), "SequencePoint")); - methodPoint.Add(new XAttribute("ordinal", j.ToString())); - methodPoint.Add(new XAttribute("offset", j.ToString())); - methodPoint.Add(new XAttribute("sc", "0")); - methodPoint.Add(new XAttribute("sl", meth.Value.Lines.First().Key.ToString())); - methodPoint.Add(new XAttribute("ec", "1")); - methodPoint.Add(new XAttribute("el", meth.Value.Lines.Last().Key.ToString())); - methodPoint.Add(new XAttribute("bec", "0")); - methodPoint.Add(new XAttribute("bev", "0")); - methodPoint.Add(new XAttribute("fileid", i.ToString())); - - // They're really just lines - var sequencePoints = new XElement("SequencePoints"); - var branchPoints = new XElement("BranchPoints"); - var methodSummary = new XElement("Summary"); - int k = 0; - int kBr = 0; - bool methodVisited = false; - - foreach (System.Collections.Generic.KeyValuePair lines in meth.Value.Lines) - { - BranchInfo[] lineBranches = meth.Value.Branches.Where(branchInfo => branchInfo.Line == lines.Key).ToArray(); - CoverageDetails branchCoverage = summary.CalculateBranchCoverage(lineBranches); - - var sequencePoint = new XElement("SequencePoint"); - sequencePoint.Add(new XAttribute("vc", lines.Value.ToString())); - sequencePoint.Add(new XAttribute("uspid", lines.Key.ToString())); - sequencePoint.Add(new XAttribute("ordinal", k.ToString())); - sequencePoint.Add(new XAttribute("sl", lines.Key.ToString())); - sequencePoint.Add(new XAttribute("sc", "1")); - sequencePoint.Add(new XAttribute("el", lines.Key.ToString())); - sequencePoint.Add(new XAttribute("ec", "2")); - sequencePoint.Add(new XAttribute("bec", branchCoverage.Total)); - sequencePoint.Add(new XAttribute("bev", branchCoverage.Covered)); - sequencePoint.Add(new XAttribute("fileid", i.ToString())); - sequencePoints.Add(sequencePoint); - - if (lines.Value > 0) - { - classVisited = true; - methodVisited = true; - } - - k++; - } - - foreach (BranchInfo branche in meth.Value.Branches) - { - var branchPoint = new XElement("BranchPoint"); - branchPoint.Add(new XAttribute("vc", branche.Hits.ToString())); - branchPoint.Add(new XAttribute("uspid", branche.Line.ToString())); - branchPoint.Add(new XAttribute("ordinal", branche.Ordinal.ToString())); - branchPoint.Add(new XAttribute("path", branche.Path.ToString())); - branchPoint.Add(new XAttribute("offset", branche.Offset.ToString())); - branchPoint.Add(new XAttribute("offsetend", branche.EndOffset.ToString())); - branchPoint.Add(new XAttribute("sl", branche.Line.ToString())); - branchPoint.Add(new XAttribute("fileid", i.ToString())); - branchPoints.Add(branchPoint); - kBr++; - } - - numMethods++; - if (methodVisited) - visitedMethods++; - - methodSummary.Add(new XAttribute("numSequencePoints", methLineCoverage.Total.ToString())); - methodSummary.Add(new XAttribute("visitedSequencePoints", methLineCoverage.Covered.ToString())); - methodSummary.Add(new XAttribute("numBranchPoints", methBranchCoverage.Total.ToString())); - methodSummary.Add(new XAttribute("visitedBranchPoints", methBranchCoverage.Covered.ToString())); - methodSummary.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - methodSummary.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - methodSummary.Add(new XAttribute("maxCyclomaticComplexity", methCyclomaticComplexity.ToString())); - methodSummary.Add(new XAttribute("minCyclomaticComplexity", methCyclomaticComplexity.ToString())); - methodSummary.Add(new XAttribute("visitedClasses", "0")); - methodSummary.Add(new XAttribute("numClasses", "0")); - methodSummary.Add(new XAttribute("visitedMethods", methodVisited ? "1" : "0")); - methodSummary.Add(new XAttribute("numMethods", "1")); - - method.Add(methodSummary); - method.Add(new XElement("MetadataToken")); - method.Add(methodName); - method.Add(fileRef); - method.Add(sequencePoints); - method.Add(branchPoints); - method.Add(methodPoint); - methods.Add(method); - j++; - } - - numClasses++; - if (classVisited) - visitedClasses++; - - CoverageDetails classLineCoverage = summary.CalculateLineCoverage(cls.Value); - CoverageDetails classBranchCoverage = summary.CalculateBranchCoverage(cls.Value); - CoverageDetails classMethodCoverage = summary.CalculateMethodCoverage(cls.Value); - int classMaxCyclomaticComplexity = summary.CalculateMaxCyclomaticComplexity(cls.Value); - int classMinCyclomaticComplexity = summary.CalculateMinCyclomaticComplexity(cls.Value); - - classSummary.Add(new XAttribute("numSequencePoints", classLineCoverage.Total.ToString())); - classSummary.Add(new XAttribute("visitedSequencePoints", classLineCoverage.Covered.ToString())); - classSummary.Add(new XAttribute("numBranchPoints", classBranchCoverage.Total.ToString())); - classSummary.Add(new XAttribute("visitedBranchPoints", classBranchCoverage.Covered.ToString())); - classSummary.Add(new XAttribute("sequenceCoverage", classLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - classSummary.Add(new XAttribute("branchCoverage", classBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - classSummary.Add(new XAttribute("maxCyclomaticComplexity", classMaxCyclomaticComplexity.ToString())); - classSummary.Add(new XAttribute("minCyclomaticComplexity", classMinCyclomaticComplexity.ToString())); - classSummary.Add(new XAttribute("visitedClasses", classVisited ? "1" : "0")); - classSummary.Add(new XAttribute("numClasses", "1")); - classSummary.Add(new XAttribute("visitedMethods", classMethodCoverage.Covered.ToString())); - classSummary.Add(new XAttribute("numMethods", classMethodCoverage.Total.ToString())); - - @class.Add(classSummary); - @class.Add(className); - @class.Add(methods); - classes.Add(@class); - } - i++; + classVisited = true; + methodVisited = true; } - module.Add(files); - module.Add(classes); - modules.Add(module); + k++; + } + + foreach (BranchInfo branche in meth.Value.Branches) + { + var branchPoint = new XElement("BranchPoint"); + branchPoint.Add(new XAttribute("vc", branche.Hits.ToString())); + branchPoint.Add(new XAttribute("uspid", branche.Line.ToString())); + branchPoint.Add(new XAttribute("ordinal", branche.Ordinal.ToString())); + branchPoint.Add(new XAttribute("path", branche.Path.ToString())); + branchPoint.Add(new XAttribute("offset", branche.Offset.ToString())); + branchPoint.Add(new XAttribute("offsetend", branche.EndOffset.ToString())); + branchPoint.Add(new XAttribute("sl", branche.Line.ToString())); + branchPoint.Add(new XAttribute("fileid", i.ToString())); + branchPoints.Add(branchPoint); + kBr++; + } + + numMethods++; + if (methodVisited) + visitedMethods++; + + methodSummary.Add(new XAttribute("numSequencePoints", methLineCoverage.Total.ToString())); + methodSummary.Add(new XAttribute("visitedSequencePoints", methLineCoverage.Covered.ToString())); + methodSummary.Add(new XAttribute("numBranchPoints", methBranchCoverage.Total.ToString())); + methodSummary.Add(new XAttribute("visitedBranchPoints", methBranchCoverage.Covered.ToString())); + methodSummary.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + methodSummary.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + methodSummary.Add(new XAttribute("maxCyclomaticComplexity", methCyclomaticComplexity.ToString())); + methodSummary.Add(new XAttribute("minCyclomaticComplexity", methCyclomaticComplexity.ToString())); + methodSummary.Add(new XAttribute("visitedClasses", "0")); + methodSummary.Add(new XAttribute("numClasses", "0")); + methodSummary.Add(new XAttribute("visitedMethods", methodVisited ? "1" : "0")); + methodSummary.Add(new XAttribute("numMethods", "1")); + + method.Add(methodSummary); + method.Add(new XElement("MetadataToken")); + method.Add(methodName); + method.Add(fileRef); + method.Add(sequencePoints); + method.Add(branchPoints); + method.Add(methodPoint); + methods.Add(method); + j++; } - CoverageDetails moduleLineCoverage = summary.CalculateLineCoverage(result.Modules); - CoverageDetails moduleBranchCoverage = summary.CalculateBranchCoverage(result.Modules); - int moduleMaxCyclomaticComplexity = summary.CalculateMaxCyclomaticComplexity(result.Modules); - int moduleMinCyclomaticComplexity = summary.CalculateMinCyclomaticComplexity(result.Modules); - - coverageSummary.Add(new XAttribute("numSequencePoints", moduleLineCoverage.Total.ToString())); - coverageSummary.Add(new XAttribute("visitedSequencePoints", moduleLineCoverage.Covered.ToString())); - coverageSummary.Add(new XAttribute("numBranchPoints", moduleBranchCoverage.Total.ToString())); - coverageSummary.Add(new XAttribute("visitedBranchPoints", moduleBranchCoverage.Covered.ToString())); - coverageSummary.Add(new XAttribute("sequenceCoverage", moduleLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - coverageSummary.Add(new XAttribute("branchCoverage", moduleBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); - coverageSummary.Add(new XAttribute("maxCyclomaticComplexity", moduleMaxCyclomaticComplexity.ToString())); - coverageSummary.Add(new XAttribute("minCyclomaticComplexity", moduleMinCyclomaticComplexity.ToString())); - coverageSummary.Add(new XAttribute("visitedClasses", visitedClasses.ToString())); - coverageSummary.Add(new XAttribute("numClasses", numClasses.ToString())); - coverageSummary.Add(new XAttribute("visitedMethods", visitedMethods.ToString())); - coverageSummary.Add(new XAttribute("numMethods", numMethods.ToString())); - - coverage.Add(coverageSummary); - coverage.Add(modules); - xml.Add(coverage); - - var stream = new MemoryStream(); - xml.Save(stream); - - return Encoding.UTF8.GetString(stream.ToArray()); + numClasses++; + if (classVisited) + visitedClasses++; + + CoverageDetails classLineCoverage = summary.CalculateLineCoverage(cls.Value); + CoverageDetails classBranchCoverage = summary.CalculateBranchCoverage(cls.Value); + CoverageDetails classMethodCoverage = summary.CalculateMethodCoverage(cls.Value); + int classMaxCyclomaticComplexity = summary.CalculateMaxCyclomaticComplexity(cls.Value); + int classMinCyclomaticComplexity = summary.CalculateMinCyclomaticComplexity(cls.Value); + + classSummary.Add(new XAttribute("numSequencePoints", classLineCoverage.Total.ToString())); + classSummary.Add(new XAttribute("visitedSequencePoints", classLineCoverage.Covered.ToString())); + classSummary.Add(new XAttribute("numBranchPoints", classBranchCoverage.Total.ToString())); + classSummary.Add(new XAttribute("visitedBranchPoints", classBranchCoverage.Covered.ToString())); + classSummary.Add(new XAttribute("sequenceCoverage", classLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + classSummary.Add(new XAttribute("branchCoverage", classBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + classSummary.Add(new XAttribute("maxCyclomaticComplexity", classMaxCyclomaticComplexity.ToString())); + classSummary.Add(new XAttribute("minCyclomaticComplexity", classMinCyclomaticComplexity.ToString())); + classSummary.Add(new XAttribute("visitedClasses", classVisited ? "1" : "0")); + classSummary.Add(new XAttribute("numClasses", "1")); + classSummary.Add(new XAttribute("visitedMethods", classMethodCoverage.Covered.ToString())); + classSummary.Add(new XAttribute("numMethods", classMethodCoverage.Total.ToString())); + + @class.Add(classSummary); + @class.Add(className); + @class.Add(methods); + classes.Add(@class); + } + i++; } + + module.Add(files); + module.Add(classes); + modules.Add(module); + } + + CoverageDetails moduleLineCoverage = summary.CalculateLineCoverage(result.Modules); + CoverageDetails moduleBranchCoverage = summary.CalculateBranchCoverage(result.Modules); + int moduleMaxCyclomaticComplexity = summary.CalculateMaxCyclomaticComplexity(result.Modules); + int moduleMinCyclomaticComplexity = summary.CalculateMinCyclomaticComplexity(result.Modules); + + coverageSummary.Add(new XAttribute("numSequencePoints", moduleLineCoverage.Total.ToString())); + coverageSummary.Add(new XAttribute("visitedSequencePoints", moduleLineCoverage.Covered.ToString())); + coverageSummary.Add(new XAttribute("numBranchPoints", moduleBranchCoverage.Total.ToString())); + coverageSummary.Add(new XAttribute("visitedBranchPoints", moduleBranchCoverage.Covered.ToString())); + coverageSummary.Add(new XAttribute("sequenceCoverage", moduleLineCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + coverageSummary.Add(new XAttribute("branchCoverage", moduleBranchCoverage.Percent.ToString("G", CultureInfo.InvariantCulture))); + coverageSummary.Add(new XAttribute("maxCyclomaticComplexity", moduleMaxCyclomaticComplexity.ToString())); + coverageSummary.Add(new XAttribute("minCyclomaticComplexity", moduleMinCyclomaticComplexity.ToString())); + coverageSummary.Add(new XAttribute("visitedClasses", visitedClasses.ToString())); + coverageSummary.Add(new XAttribute("numClasses", numClasses.ToString())); + coverageSummary.Add(new XAttribute("visitedMethods", visitedMethods.ToString())); + coverageSummary.Add(new XAttribute("numMethods", numMethods.ToString())); + + coverage.Add(coverageSummary); + coverage.Add(modules); + xml.Add(coverage); + + using var stream = new MemoryStream(); + using var streamWriter = new StreamWriter(stream, new UTF8Encoding(false)); + xml.Save(streamWriter); + + return Encoding.UTF8.GetString(stream.ToArray()); } + } } diff --git a/src/coverlet.core/Reporters/ReporterFactory.cs b/src/coverlet.core/Reporters/ReporterFactory.cs index 2c9dc95ee..cacd19c34 100644 --- a/src/coverlet.core/Reporters/ReporterFactory.cs +++ b/src/coverlet.core/Reporters/ReporterFactory.cs @@ -7,27 +7,27 @@ namespace Coverlet.Core.Reporters { - internal class ReporterFactory - { - private readonly string _format; - private readonly IReporter[] _reporters; + internal class ReporterFactory + { + private readonly string _format; + private readonly IReporter[] _reporters; - public ReporterFactory(string format) - { - _format = format; - _reporters = new IReporter[] { + public ReporterFactory(string format) + { + _format = format; + _reporters = new IReporter[] { new JsonReporter(), new LcovReporter(), new OpenCoverReporter(), new CoberturaReporter(), new TeamCityReporter() }; - } - - public bool IsValidFormat() - { - return CreateReporter() != null; - } + } - public IReporter CreateReporter() - => _reporters.FirstOrDefault(r => string.Equals(r.Format, _format, StringComparison.OrdinalIgnoreCase)); + public bool IsValidFormat() + { + return CreateReporter() != null; } + + public IReporter CreateReporter() + => _reporters.FirstOrDefault(r => string.Equals(r.Format, _format, StringComparison.OrdinalIgnoreCase)); + } } diff --git a/src/coverlet.core/Reporters/TeamCityReporter.cs b/src/coverlet.core/Reporters/TeamCityReporter.cs index 8ccb0d997..8a5f90cc0 100644 --- a/src/coverlet.core/Reporters/TeamCityReporter.cs +++ b/src/coverlet.core/Reporters/TeamCityReporter.cs @@ -8,67 +8,67 @@ namespace Coverlet.Core.Reporters { - internal class TeamCityReporter : IReporter - { - public ReporterOutputType OutputType => ReporterOutputType.Console; + internal class TeamCityReporter : IReporter + { + public ReporterOutputType OutputType => ReporterOutputType.Console; - public string Format => "teamcity"; + public string Format => "teamcity"; - public string Extension => null; + public string Extension => null; - public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) - { - if (result.Parameters.DeterministicReport) - { - throw new NotSupportedException("Deterministic report not supported by teamcity reporter"); - } + public string Report(CoverageResult result, ISourceRootTranslator sourceRootTranslator) + { + if (result.Parameters.DeterministicReport) + { + throw new NotSupportedException("Deterministic report not supported by teamcity reporter"); + } - // Calculate coverage - var summary = new CoverageSummary(); - CoverageDetails overallLineCoverage = summary.CalculateLineCoverage(result.Modules); - CoverageDetails overallBranchCoverage = summary.CalculateBranchCoverage(result.Modules); - CoverageDetails overallMethodCoverage = summary.CalculateMethodCoverage(result.Modules); + // Calculate coverage + var summary = new CoverageSummary(); + CoverageDetails overallLineCoverage = summary.CalculateLineCoverage(result.Modules); + CoverageDetails overallBranchCoverage = summary.CalculateBranchCoverage(result.Modules); + CoverageDetails overallMethodCoverage = summary.CalculateMethodCoverage(result.Modules); - // Report coverage - var stringBuilder = new StringBuilder(); - OutputLineCoverage(overallLineCoverage, stringBuilder); - OutputBranchCoverage(overallBranchCoverage, stringBuilder); - OutputMethodCoverage(overallMethodCoverage, stringBuilder); + // Report coverage + var stringBuilder = new StringBuilder(); + OutputLineCoverage(overallLineCoverage, stringBuilder); + OutputBranchCoverage(overallBranchCoverage, stringBuilder); + OutputMethodCoverage(overallMethodCoverage, stringBuilder); - // Return a placeholder - return stringBuilder.ToString(); - } + // Return a placeholder + return stringBuilder.ToString(); + } - private static void OutputLineCoverage(CoverageDetails coverageDetails, StringBuilder builder) - { - // The number of covered lines - OutputTeamCityServiceMessage("CodeCoverageAbsLCovered", coverageDetails.Covered, builder); + private static void OutputLineCoverage(CoverageDetails coverageDetails, StringBuilder builder) + { + // The number of covered lines + OutputTeamCityServiceMessage("CodeCoverageAbsLCovered", coverageDetails.Covered, builder); - // Line-level code coverage - OutputTeamCityServiceMessage("CodeCoverageAbsLTotal", coverageDetails.Total, builder); - } + // Line-level code coverage + OutputTeamCityServiceMessage("CodeCoverageAbsLTotal", coverageDetails.Total, builder); + } - private static void OutputBranchCoverage(CoverageDetails coverageDetails, StringBuilder builder) - { - // The number of covered branches - OutputTeamCityServiceMessage("CodeCoverageAbsBCovered", coverageDetails.Covered, builder); + private static void OutputBranchCoverage(CoverageDetails coverageDetails, StringBuilder builder) + { + // The number of covered branches + OutputTeamCityServiceMessage("CodeCoverageAbsBCovered", coverageDetails.Covered, builder); - // Branch-level code coverage - OutputTeamCityServiceMessage("CodeCoverageAbsBTotal", coverageDetails.Total, builder); - } + // Branch-level code coverage + OutputTeamCityServiceMessage("CodeCoverageAbsBTotal", coverageDetails.Total, builder); + } - private static void OutputMethodCoverage(CoverageDetails coverageDetails, StringBuilder builder) - { - // The number of covered methods - OutputTeamCityServiceMessage("CodeCoverageAbsMCovered", coverageDetails.Covered, builder); + private static void OutputMethodCoverage(CoverageDetails coverageDetails, StringBuilder builder) + { + // The number of covered methods + OutputTeamCityServiceMessage("CodeCoverageAbsMCovered", coverageDetails.Covered, builder); - // Method-level code coverage - OutputTeamCityServiceMessage("CodeCoverageAbsMTotal", coverageDetails.Total, builder); - } + // Method-level code coverage + OutputTeamCityServiceMessage("CodeCoverageAbsMTotal", coverageDetails.Total, builder); + } - private static void OutputTeamCityServiceMessage(string key, double value, StringBuilder builder) - { - builder.AppendLine($"##teamcity[buildStatisticValue key='{key}' value='{value.ToString("0.##", new CultureInfo("en-US"))}']"); - } + private static void OutputTeamCityServiceMessage(string key, double value, StringBuilder builder) + { + builder.AppendLine($"##teamcity[buildStatisticValue key='{key}' value='{value.ToString("0.##", new CultureInfo("en-US"))}']"); } + } } diff --git a/src/coverlet.core/Symbols/BranchPoint.cs b/src/coverlet.core/Symbols/BranchPoint.cs index 77a675e82..d600dc02f 100644 --- a/src/coverlet.core/Symbols/BranchPoint.cs +++ b/src/coverlet.core/Symbols/BranchPoint.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; @@ -6,46 +6,46 @@ namespace Coverlet.Core.Symbols { + /// + /// a branch point + /// + [DebuggerDisplay("StartLine = {StartLine}")] + internal class BranchPoint + { /// - /// a branch point + /// Line of the branching instruction /// - [DebuggerDisplay("StartLine = {StartLine}")] - internal class BranchPoint - { - /// - /// Line of the branching instruction - /// - public int StartLine { get; set; } - - /// - /// A path that can be taken - /// - public int Path { get; set; } - - /// - /// An order of the point within the method - /// - public UInt32 Ordinal { get; set; } - - /// - /// List of OffsetPoints between Offset and EndOffset (exclusive) - /// - public System.Collections.Generic.List OffsetPoints { get; set; } - - /// - /// The IL offset of the point - /// - public int Offset { get; set; } - - /// - /// Last Offset == EndOffset. - /// Can be same as Offset - /// - public int EndOffset { get; set; } - - /// - /// The url to the document if an entry was not mapped to an id - /// - public string Document { get; set; } - } -} \ No newline at end of file + public int StartLine { get; set; } + + /// + /// A path that can be taken + /// + public int Path { get; set; } + + /// + /// An order of the point within the method + /// + public UInt32 Ordinal { get; set; } + + /// + /// List of OffsetPoints between Offset and EndOffset (exclusive) + /// + public System.Collections.Generic.List OffsetPoints { get; set; } + + /// + /// The IL offset of the point + /// + public int Offset { get; set; } + + /// + /// Last Offset == EndOffset. + /// Can be same as Offset + /// + public int EndOffset { get; set; } + + /// + /// The url to the document if an entry was not mapped to an id + /// + public string Document { get; set; } + } +} diff --git a/src/coverlet.core/Symbols/CecilSymbolHelper.cs b/src/coverlet.core/Symbols/CecilSymbolHelper.cs index 930d19ede..3b4413780 100644 --- a/src/coverlet.core/Symbols/CecilSymbolHelper.cs +++ b/src/coverlet.core/Symbols/CecilSymbolHelper.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; - +using System.Text.RegularExpressions; using Coverlet.Core.Abstractions; using Coverlet.Core.Extensions; @@ -16,1471 +16,1519 @@ namespace Coverlet.Core.Symbols { - internal class CecilSymbolHelper : ICecilSymbolHelper + internal class CecilSymbolHelper : ICecilSymbolHelper + { + private const int StepOverLineCode = 0xFEEFEE; + // Create single instance, we cannot collide because we use full method name as key + private readonly ConcurrentDictionary _compilerGeneratedBranchesToExclude = new(); + private readonly ConcurrentDictionary> _sequencePointOffsetToSkip = new(); + + // In case of nested compiler generated classes, only the root one presents the CompilerGenerated attribute. + // So let's search up to the outermost declaring type to find the attribute + private static bool IsCompilerGenerated(MethodDefinition methodDefinition) { - private const int StepOverLineCode = 0xFEEFEE; - // Create single instance, we cannot collide because we use full method name as key - private readonly ConcurrentDictionary _compilerGeneratedBranchesToExclude = new(); - private readonly ConcurrentDictionary> _sequencePointOffsetToSkip = new(); - - // In case of nested compiler generated classes, only the root one presents the CompilerGenerated attribute. - // So let's search up to the outermost declaring type to find the attribute - private static bool IsCompilerGenerated(MethodDefinition methodDefinition) + TypeDefinition declaringType = methodDefinition.DeclaringType; + while (declaringType != null) + { + if (declaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) { - TypeDefinition declaringType = methodDefinition.DeclaringType; - while (declaringType != null) - { - if (declaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) - { - return true; - } - declaringType = declaringType.DeclaringType; - } - - return false; + return true; } + declaringType = declaringType.DeclaringType; + } + + return false; + } + + private static bool IsCompilerGenerated(FieldDefinition fieldDefinition) + { + return fieldDefinition.DeclaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName); + } - private static bool IsCompilerGenerated(FieldDefinition fieldDefinition) + private static bool IsCompilerGeneratedField(Instruction instruction, out FieldDefinition field) + { + switch (instruction.Operand) + { + case FieldDefinition fieldDefinition when IsCompilerGenerated(fieldDefinition): + field = fieldDefinition; + return true; + case FieldReference fieldReference when IsCompilerGenerated(fieldReference.Resolve()): + field = fieldReference.Resolve(); + return true; + default: + field = null; + return false; + } + } + + private static bool IsMoveNextInsideAsyncStateMachine(MethodDefinition methodDefinition) + { + if (methodDefinition.FullName.EndsWith("::MoveNext()") && IsCompilerGenerated(methodDefinition)) + { + foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) { - return fieldDefinition.DeclaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName); + if (implementedInterface.InterfaceType.FullName == "System.Runtime.CompilerServices.IAsyncStateMachine") + { + return true; + } } + } - private static bool IsMoveNextInsideAsyncStateMachine(MethodDefinition methodDefinition) - { - if (methodDefinition.FullName.EndsWith("::MoveNext()") && IsCompilerGenerated(methodDefinition)) - { - foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) - { - if (implementedInterface.InterfaceType.FullName == "System.Runtime.CompilerServices.IAsyncStateMachine") - { - return true; - } - } - } + return false; + } - return false; + private static bool IsMoveNextInsideAsyncIterator(MethodDefinition methodDefinition) + { + if (methodDefinition.FullName.EndsWith("::MoveNext()") && IsCompilerGenerated(methodDefinition)) + { + foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) + { + if (implementedInterface.InterfaceType.FullName.StartsWith("System.Collections.Generic.IAsyncEnumerator`1<")) + { + return true; + } } + } - private static bool IsMoveNextInsideAsyncIterator(MethodDefinition methodDefinition) - { - if (methodDefinition.FullName.EndsWith("::MoveNext()") && IsCompilerGenerated(methodDefinition)) - { - foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) - { - if (implementedInterface.InterfaceType.FullName.StartsWith("System.Collections.Generic.IAsyncEnumerator`1<")) - { - return true; - } - } - } + return false; + } - return false; + private static bool IsMoveNextInsideEnumerator(MethodDefinition methodDefinition) + { + if (!methodDefinition.FullName.EndsWith("::MoveNext()")) + { + return false; + } + + if (methodDefinition.DeclaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) + { + foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) + { + if (implementedInterface.InterfaceType.FullName == "System.Collections.IEnumerator") + { + return true; + } } + } - private static bool IsMoveNextInsideEnumerator(MethodDefinition methodDefinition) - { - if (!methodDefinition.FullName.EndsWith("::MoveNext()")) - { - return false; - } + return false; + } - if (methodDefinition.DeclaringType.CustomAttributes.Any(ca => ca.AttributeType.FullName == typeof(CompilerGeneratedAttribute).FullName)) - { - foreach (InterfaceImplementation implementedInterface in methodDefinition.DeclaringType.Interfaces) - { - if (implementedInterface.InterfaceType.FullName == "System.Collections.IEnumerator") - { - return true; - } - } - } + private static bool IsMoveNextInsideAsyncStateMachineProlog(MethodDefinition methodDefinition) + { + /* + int num = <>1__state; + IL_0000: ldarg.0 + IL_0001: ldfld ...::'<>1__state' + IL_0006: stloc.0 + */ + + return (methodDefinition.Body.Instructions[0].OpCode == OpCodes.Ldarg_0 || + methodDefinition.Body.Instructions[0].OpCode == OpCodes.Ldarg) && + + methodDefinition.Body.Instructions[1].OpCode == OpCodes.Ldfld && + ((methodDefinition.Body.Instructions[1].Operand is FieldDefinition fd && fd.Name == "<>1__state") || + (methodDefinition.Body.Instructions[1].Operand is FieldReference fr && fr.Name == "<>1__state")) && + + (methodDefinition.Body.Instructions[2].OpCode == OpCodes.Stloc && + methodDefinition.Body.Instructions[2].Operand is VariableDefinition vd && vd.Index == 0) || + methodDefinition.Body.Instructions[2].OpCode == OpCodes.Stloc_0; + } - return false; + private static bool SkipMoveNextPrologueBranches(Instruction instruction) + { + /* + If method is a generated MoveNext we'll skip first branches (could be a switch or a series of branches) + that check state machine value to jump to correct state (for instance after a true async call) + Check if it's a Cond_Branch on state machine current value int num = <>1__state; + We are on branch OpCode so we need to go back by max 3 operation to reach ldloc.0 the load of "num" + Max 3 because we handle following patterns + + Swich + + // switch (num) + IL_0007: ldloc.0 2 + // (no C# code) + IL_0008: switch (IL_0037, IL_003c, ... 1 + ... + + Single branch + + // if (num != 0) + IL_0007: ldloc.0 2 + // (no C# code) + IL_0008: brfalse.s IL_000c 1 + IL_000a: br.s IL_000e + IL_000c: br.s IL_0049 + IL_000e: nop + ... + + More tha one branch + + // if (num != 0) + IL_0007: ldloc.0 + // (no C# code) + IL_0008: brfalse.s IL_0012 + IL_000a: br.s IL_000c + // if (num == 1) + IL_000c: ldloc.0 3 + IL_000d: ldc.i4.1 2 + IL_000e: beq.s IL_0014 1 + // (no C# code) + IL_0010: br.s IL_0019 + IL_0012: br.s IL_0060 + IL_0014: br IL_00e5 + IL_0019: nop + ... + + so we know that current branch are checking that field and we're not interested in. + */ + + Instruction current = instruction.Previous; + for (int instructionBefore = 3; instructionBefore > 0 && current.Previous != null; current = current.Previous, instructionBefore--) + { + if ( + (current.OpCode == OpCodes.Ldloc && current.Operand is VariableDefinition vo && vo.Index == 0) || + current.OpCode == OpCodes.Ldloc_0 + ) + { + return true; } + } + return false; + } + + private static bool SkipIsCompleteAwaiters(Instruction instruction) + { + // Skip get_IsCompleted to avoid unuseful branch due to async/await state machine + if ( + instruction.Previous.Operand is MethodReference operand && + operand.Name == "get_IsCompleted" && + ( + operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.TaskAwaiter") || + operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ValueTaskAwaiter") || + operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ConfiguredTaskAwaitable") || + operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable") + ) + && + ( + operand.DeclaringType.Scope.Name == "System.Runtime" || + operand.DeclaringType.Scope.Name == "netstandard" || + operand.DeclaringType.Scope.Name == "mscorlib" || + operand.DeclaringType.Scope.Name == "System.Threading.Tasks" || + operand.DeclaringType.Scope.Name == "System.Threading.Tasks.Extensions" + ) + ) + { + return true; + } + return false; + } + + private static bool SkipLambdaCachedField(Instruction instruction) + { + /* + Lambda cached field pattern + + IL_0074: ldloca.s 1 + IL_0076: call instance void [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter::GetResult() + IL_007b: nop + IL_007c: ldarg.0 + IL_007d: ldarg.0 + IL_007e: ldfld class [System.Runtime]System.Collections.Generic.IEnumerable`1 Coverlet.Core.Samples.Tests.Issue_730/'d__1'::objects + IL_0083: ldsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9__1_0' + IL_0088: dup + IL_0089: brtrue.s IL_00a2 -> CHECK IF CACHED FIELD IS NULL OR JUMP TO DELEGATE USAGE + + (INIT STATIC FIELD) + IL_008b: pop + IL_008c: ldsfld class Coverlet.Core.Samples.Tests.Issue_730/'<>c' Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9' + IL_0091: ldftn instance object Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'b__1_0'(object) + IL_0097: newobj instance void class [System.Runtime]System.Func`2::.ctor(object, native int) + IL_009c: dup + IL_009d: stsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9__1_0' + + (USE DELEGATE FIELD) + IL_00a2: call class [System.Runtime]System.Collections.Generic.IEnumerable`1 [System.Linq]System.Linq.Enumerable::Select(class [System.Runtime]System.Collections.Generic.IEnumerable`1, class [System.Runtime]System.Func`2) + */ - private static bool IsMoveNextInsideAsyncStateMachineProlog(MethodDefinition methodDefinition) + Instruction current = instruction.Previous; + for (int instructionBefore = 2; instructionBefore > 0 && current.Previous != null; current = current.Previous, instructionBefore--) + { + if (current.OpCode == OpCodes.Ldsfld && current.Operand is FieldDefinition fd && + // LambdaCacheField https://github.com/dotnet/roslyn/blob/e704ca635bd6de70a0250e34c4567c7a28fa9f6d/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNameKind.cs#L31 + // https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNames.cs#L145 + fd.Name.StartsWith("<>9_") && + IsCompilerGenerated(fd)) { - /* - int num = <>1__state; - IL_0000: ldarg.0 - IL_0001: ldfld ...::'<>1__state' - IL_0006: stloc.0 - */ - - return (methodDefinition.Body.Instructions[0].OpCode == OpCodes.Ldarg_0 || - methodDefinition.Body.Instructions[0].OpCode == OpCodes.Ldarg) && - - methodDefinition.Body.Instructions[1].OpCode == OpCodes.Ldfld && - ((methodDefinition.Body.Instructions[1].Operand is FieldDefinition fd && fd.Name == "<>1__state") || - (methodDefinition.Body.Instructions[1].Operand is FieldReference fr && fr.Name == "<>1__state")) && - - (methodDefinition.Body.Instructions[2].OpCode == OpCodes.Stloc && - methodDefinition.Body.Instructions[2].Operand is VariableDefinition vd && vd.Index == 0) || - methodDefinition.Body.Instructions[2].OpCode == OpCodes.Stloc_0; + return true; } + } + return false; + } - private static bool SkipMoveNextPrologueBranches(Instruction instruction) + private static bool SkipDelegateCacheField(Instruction instruction) + { + /* + Delegate cached field pattern (e.g. method groups) + + IL_0001: ldc.i4.1 + IL_0002: newarr [System.Runtime]System.Int32 + IL_0007: dup + IL_0008: ldc.i4.0 + IL_0009: ldc.i4.1 + IL_000a: stelem.i4 + IL_000b: ldsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_1447/'<>O'::'<0>__Map' + IL_0010: dup + IL_0011: brtrue.s IL_0026 -> CHECK IF CACHED FIELD IS NULL OR JUMP TO DELEGATE USAGE + + IL_0013: pop + IL_0014: ldnull + IL_0015: ldftn int32 Coverlet.Core.Samples.Tests.Issue_1447::Map(int32) + IL_001b: newobj instance void class [System.Runtime]System.Func`2::.ctor(object, native int) + IL_0020: dup + IL_0021: stsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_1447/'<>O'::'<0>__Map' + + (USE DELEGATE FIELD) + IL_0026: call class [System.Runtime]System.Collections.Generic.IEnumerable`1 [System.Linq]System.Linq.Enumerable::Select(class [System.Runtime] System.Collections.Generic.IEnumerable`1, class [System.Runtime] System.Func`2) + */ + + Instruction current = instruction.Previous; + for (int instructionBefore = 2; instructionBefore > 0 && current.Previous != null; current = current.Previous, instructionBefore--) + { + if (current.OpCode == OpCodes.Ldsfld && current.Operand is FieldDefinition fd && + // https://github.com/dotnet/roslyn/blob/main/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNames.cs#L513 + Regex.IsMatch(fd.Name, "^<\\d+>__") && + IsCompilerGenerated(fd)) { - /* - If method is a generated MoveNext we'll skip first branches (could be a switch or a series of branches) - that check state machine value to jump to correct state (for instance after a true async call) - Check if it's a Cond_Branch on state machine current value int num = <>1__state; - We are on branch OpCode so we need to go back by max 3 operation to reach ldloc.0 the load of "num" - Max 3 because we handle following patterns - - Swich - - // switch (num) - IL_0007: ldloc.0 2 - // (no C# code) - IL_0008: switch (IL_0037, IL_003c, ... 1 - ... - - Single branch - - // if (num != 0) - IL_0007: ldloc.0 2 - // (no C# code) - IL_0008: brfalse.s IL_000c 1 - IL_000a: br.s IL_000e - IL_000c: br.s IL_0049 - IL_000e: nop - ... - - More tha one branch - - // if (num != 0) - IL_0007: ldloc.0 - // (no C# code) - IL_0008: brfalse.s IL_0012 - IL_000a: br.s IL_000c - // if (num == 1) - IL_000c: ldloc.0 3 - IL_000d: ldc.i4.1 2 - IL_000e: beq.s IL_0014 1 - // (no C# code) - IL_0010: br.s IL_0019 - IL_0012: br.s IL_0060 - IL_0014: br IL_00e5 - IL_0019: nop - ... - - so we know that current branch are checking that field and we're not interested in. - */ - - Instruction current = instruction.Previous; - for (int instructionBefore = 3; instructionBefore > 0 && current.Previous != null; current = current.Previous, instructionBefore--) - { - if ( - (current.OpCode == OpCodes.Ldloc && current.Operand is VariableDefinition vo && vo.Index == 0) || - current.OpCode == OpCodes.Ldloc_0 - ) - { - return true; - } - } - return false; + return true; } + } + return false; + } - private static bool SkipIsCompleteAwaiters(Instruction instruction) + private static bool SkipGeneratedBranchForExceptionRethrown(List instructions, Instruction instruction) + { + /* + In case of exception re-thrown inside the catch block, + the compiler generates a branch to check if the exception reference is null. + + // Debug version: + IL_00b4: isinst [System.Runtime]System.Exception + IL_00b9: stloc.s 6 + IL_00bb: ldloc.s 6 + IL_00bd: brtrue.s IL_00c6 + + // Release version: + IL_008A: isinst[System.Runtime]System.Exception + IL_008F: dup + IL_0090: brtrue.s IL_0099 + + So we can go back to previous instructions and skip this branch if recognize that type of code block. + There are differences between debug and release configuration so we just look for the highlights. + */ + + int branchIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + + return new[] { 2, 3 }.Any(x => branchIndex >= x && + instructions[branchIndex - x].OpCode == OpCodes.Isinst && + instructions[branchIndex - x].Operand is TypeReference tr && + tr.FullName == "System.Exception") + && + // check for throw opcode after branch + instructions.Count - branchIndex >= 3 && + instructions[branchIndex + 1].OpCode == OpCodes.Ldarg && + instructions[branchIndex + 2].OpCode == OpCodes.Ldfld && + instructions[branchIndex + 3].OpCode == OpCodes.Throw; + } + + private bool SkipGeneratedBranchesForExceptionHandlers(MethodDefinition methodDefinition, Instruction instruction, List bodyInstructions) + { + /* + This method is used to parse compiler generated code inside async state machine and find branches generated for exception catch blocks. + There are differences between debug and release configuration. Also variations of the shown examples exist e.g. multiple catch blocks, + nested catch blocks... Therefore we just look for the highlights. + Typical generated code for catch block is: + + // Debug version: + catch ... + { + // (no C# code) + IL_0028: stloc.2 + // object obj2 = <>s__1 = obj; + IL_0029: ldarg.0 + // (no C# code) + IL_002a: ldloc.2 + IL_002b: stfld object ...::'<>s__1' + // <>s__2 = 1; + IL_0030: ldarg.0 + IL_0031: ldc.i4.1 + IL_0032: stfld int32 ...::'<>s__2' <- store 1 into <>s__2 + // (no C# code) + IL_0037: leave.s IL_0039 + } // end handle + + // int num2 = <>s__2; + IL_0039: ldarg.0 + IL_003a: ldfld int32 ...::'<>s__2' <- load <>s__2 value and check if 1 + IL_003f: stloc.3 + // if (num2 == 1) + IL_0040: ldloc.3 + IL_0041: ldc.i4.1 + IL_0042: beq.s IL_0049 <- BRANCH : if <>s__2 value is 1 go to exception handler code + IL_0044: br IL_00d6 + IL_0049: nop <- start exception handler code + + // Release version: + catch ... + { + IL_001D: stloc.3 + IL_001E: ldarg.0 + IL_001F: ldloc.3 + IL_0020: stfld object Coverlet.Core.Samples.Tests.CatchBlock / 'd__0'::'<>7__wrap1' + IL_0025: ldc.i4.1 + IL_0026: stloc.2 + IL_0027: leave.s IL_0029 + } // end handler + + IL_0029: ldloc.2 + IL_002A: ldc.i4.1 + IL_002B: bne.un.s IL_00AC + + + In case of multiple catch blocks as + try + { + } + catch (ExceptionType1) + { + } + catch (ExceptionType2) + { + } + + generated IL contains multiple branches: + + // Debug version: + catch ...(type1) + { + ... + } + catch ...(type2) + { + ... + } + // int num2 = <>s__2; + IL_0039: ldarg.0 + IL_003a: ldfld int32 ...::'<>s__2' <- load <>s__2 value and check if 1 + IL_003f: stloc.3 + // if (num2 == 1) + IL_0040: ldloc.3 + IL_0041: ldc.i4.1 + IL_0042: beq.s IL_0049 <- BRANCH 1 (type 1) + IL_0044: br IL_00d6 + + // if (num2 == 2) + IL_0067: ldloc.s 4 + IL_0069: ldc.i4.2 + IL_006a: beq IL_0104 <- BRANCH 2 (type 2) + + // (no C# code) + IL_006f: br IL_0191 + + // Release version: + catch ...(type1) + { + ... + } + catch ...(type2) + { + ... + } + IL_003E: ldloc.2 + IL_003F: ldc.i4.1 + IL_0040: beq.s IL_004E + + IL_0042: ldloc.2/ + IL_0043: ldc.i4.2 + IL_0044: beq IL_00CD + + IL_0049: br IL_0147 + */ + if (!_compilerGeneratedBranchesToExclude.ContainsKey(methodDefinition.FullName)) + { + var detectedBranches = new List(); + Collection handlers = methodDefinition.Body.ExceptionHandlers; + + int numberOfCatchBlocks = 1; + foreach (ExceptionHandler handler in handlers) { - // Skip get_IsCompleted to avoid unuseful branch due to async/await state machine - if ( - instruction.Previous.Operand is MethodReference operand && - operand.Name == "get_IsCompleted" && - ( - operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.TaskAwaiter") || - operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ValueTaskAwaiter") || - operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ConfiguredTaskAwaitable") || - operand.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable") - ) - && - ( - operand.DeclaringType.Scope.Name == "System.Runtime" || - operand.DeclaringType.Scope.Name == "netstandard" || - operand.DeclaringType.Scope.Name == "mscorlib" || - operand.DeclaringType.Scope.Name == "System.Threading.Tasks" || - operand.DeclaringType.Scope.Name == "System.Threading.Tasks.Extensions" - ) - ) + if (handlers.Any(h => h.HandlerStart == handler.HandlerEnd)) + { + // In case of multiple consecutive catch block + numberOfCatchBlocks++; + continue; + } + + int currentIndex = bodyInstructions.BinarySearch(handler.HandlerEnd, new InstructionByOffsetComparer()); + + for (int i = 0; i < numberOfCatchBlocks; i++) + { + // We expect the first branch after the end of the handler to be no more than five instructions away. + int firstBranchIndex = currentIndex + Enumerable.Range(1, 5).FirstOrDefault(x => + currentIndex + x < bodyInstructions.Count && + bodyInstructions[currentIndex + x].OpCode == OpCodes.Beq || + bodyInstructions[currentIndex + x].OpCode == OpCodes.Bne_Un); + + if (bodyInstructions.Count - firstBranchIndex > 2 && + bodyInstructions[firstBranchIndex - 1].OpCode == OpCodes.Ldc_I4 && + bodyInstructions[firstBranchIndex - 2].OpCode == OpCodes.Ldloc) { - return true; + detectedBranches.Add(bodyInstructions[firstBranchIndex].Offset); } - return false; + + currentIndex = firstBranchIndex; + } } - private static bool SkipLambdaCachedField(Instruction instruction) + _compilerGeneratedBranchesToExclude.TryAdd(methodDefinition.FullName, detectedBranches.ToArray()); + } + + return _compilerGeneratedBranchesToExclude[methodDefinition.FullName].Contains(instruction.Offset); + } + + private static bool SkipGeneratedBranchesForAwaitForeach(List instructions, Instruction instruction) + { + // An "await foreach" causes four additional branches to be generated + // by the compiler. We want to skip the last three, but we want to + // keep the first one. + // + // (1) At each iteration of the loop, a check that there is another + // item in the sequence. This is a branch that we want to keep, + // because it's basically "should we stay in the loop or not?", + // which is germane to code coverage testing. + // (2) A check near the end for whether the IAsyncEnumerator was ever + // obtained, so it can be disposed. + // (3) A check for whether an exception was thrown in the most recent + // loop iteration. + // (4) A check for whether the exception thrown in the most recent + // loop iteration has (at least) the type System.Exception. + // + // If we're looking at any of the last three of those four branches, + // we should be skipping it. + + int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + + return CheckForAsyncEnumerator(instructions, instruction, currentIndex) || + CheckIfExceptionThrown(instructions, instruction, currentIndex) || + CheckThrownExceptionType(instructions, instruction, currentIndex); + + // The pattern for the "should we stay in the loop or not?", which we don't + // want to skip (so we have no method to try to find it), looks like this: + // + // IL_0111: ldloca.s 4 + // IL_0113: call instance !0 valuetype [System.Private.CoreLib]System.Runtime.CompilerServices.ValueTaskAwaiter`1::GetResult() + // IL_0118: brtrue IL_0047 + // + // In Debug mode, there are additional things that happen in between + // the "call" and branch, but it's the same idea either way: branch + // if GetResult() returned true. + + static bool CheckForAsyncEnumerator(List instructions, Instruction instruction, int currentIndex) + { + // We're looking for the following pattern, which checks whether a + // compiler-generated field of type IAsyncEnumerator<> is null. + // + // IL_012b: ldarg.0 + // IL_012c: ldfld class [System.Private.CoreLib]System.Collections.Generic.IAsyncEnumerator`1 AwaitForeachStateMachine/'d__0'::'<>7__wrap1' + // IL_0131: brfalse.s IL_0196 + + if (instruction.OpCode != OpCodes.Brfalse && + instruction.OpCode != OpCodes.Brfalse_S) { - /* - Lambda cached field pattern - - IL_0074: ldloca.s 1 - IL_0076: call instance void [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter::GetResult() - IL_007b: nop - IL_007c: ldarg.0 - IL_007d: ldarg.0 - IL_007e: ldfld class [System.Runtime]System.Collections.Generic.IEnumerable`1 Coverlet.Core.Samples.Tests.Issue_730/'d__1'::objects - IL_0083: ldsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9__1_0' - IL_0088: dup - IL_0089: brtrue.s IL_00a2 -> CHECK IF CACHED FIELD IS NULL OR JUMP TO DELEGATE USAGE - - (INIT STATIC FIELD) - IL_008b: pop - IL_008c: ldsfld class Coverlet.Core.Samples.Tests.Issue_730/'<>c' Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9' - IL_0091: ldftn instance object Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'b__1_0'(object) - IL_0097: newobj instance void class [System.Runtime]System.Func`2::.ctor(object, native int) - IL_009c: dup - IL_009d: stsfld class [System.Runtime]System.Func`2 Coverlet.Core.Samples.Tests.Issue_730/'<>c'::'<>9__1_0' - - (USE DELEGATE FIELD) - IL_00a2: call class [System.Runtime]System.Collections.Generic.IEnumerable`1 [System.Linq]System.Linq.Enumerable::Select(class [System.Runtime]System.Collections.Generic.IEnumerable`1, class [System.Runtime]System.Func`2) - */ - - Instruction current = instruction.Previous; - for (int instructionBefore = 2; instructionBefore > 0 && current.Previous != null; current = current.Previous, instructionBefore--) - { - if (current.OpCode == OpCodes.Ldsfld && current.Operand is FieldDefinition fd && - // LambdaCacheField https://github.com/dotnet/roslyn/blob/e704ca635bd6de70a0250e34c4567c7a28fa9f6d/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNameKind.cs#L31 - // https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNames.cs#L145 - fd.Name.StartsWith("<>9_") && - IsCompilerGenerated(fd)) - { - return true; - } - } - return false; + return false; } - private static bool SkipGeneratedBranchForExceptionRethrown(List instructions, Instruction instruction) + if (currentIndex >= 2 && + (instructions[currentIndex - 2].OpCode == OpCodes.Ldarg || + instructions[currentIndex - 2].OpCode == OpCodes.Ldarg_0) && + instructions[currentIndex - 1].OpCode == OpCodes.Ldfld && + IsCompilerGeneratedField(instructions[currentIndex - 1], out FieldDefinition field) && + field.FieldType.FullName.StartsWith("System.Collections.Generic.IAsyncEnumerator") + ) { - /* - In case of exception re-thrown inside the catch block, - the compiler generates a branch to check if the exception reference is null. - - // Debug version: - IL_00b4: isinst [System.Runtime]System.Exception - IL_00b9: stloc.s 6 - IL_00bb: ldloc.s 6 - IL_00bd: brtrue.s IL_00c6 - - // Release version: - IL_008A: isinst[System.Runtime]System.Exception - IL_008F: dup - IL_0090: brtrue.s IL_0099 - - So we can go back to previous instructions and skip this branch if recognize that type of code block. - There are differences between debug and release configuration so we just look for the highlights. - */ - - int branchIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); - - return new[] { 2, 3 }.Any(x => branchIndex >= x && - instructions[branchIndex - x].OpCode == OpCodes.Isinst && - instructions[branchIndex - x].Operand is TypeReference tr && - tr.FullName == "System.Exception") - && - // check for throw opcode after branch - instructions.Count - branchIndex >= 3 && - instructions[branchIndex + 1].OpCode == OpCodes.Ldarg && - instructions[branchIndex + 2].OpCode == OpCodes.Ldfld && - instructions[branchIndex + 3].OpCode == OpCodes.Throw; + return true; } - private bool SkipGeneratedBranchesForExceptionHandlers(MethodDefinition methodDefinition, Instruction instruction, List bodyInstructions) + return false; + } + + static bool CheckIfExceptionThrown(List instructions, Instruction instruction, int currentIndex) + { + // Here, we want to find a pattern where we're checking whether a + // compiler-generated field of type Object is null. To narrow our + // search down and reduce the odds of false positives, we'll also + // expect a call to GetResult() to precede the loading of the field's + // value. The basic pattern looks like this: + // + // IL_018f: ldloca.s 2 + // IL_0191: call instance void [System.Private.CoreLib]System.Runtime.CompilerServices.ValueTaskAwaiter::GetResult() + // IL_0196: ldarg.0 + // IL_0197: ldfld object AwaitForeachStateMachine/'d__0'::'<>7__wrap2' + // IL_019c: stloc.s 6 + // IL_019e: ldloc.s 6 + // IL_01a0: brfalse.s IL_01b9 + // + // Variants are possible (e.g., a "dup" instruction instead of a + // "stloc.s" and "ldloc.s" pair), so we'll just look for the + // highlights. + + if (instruction.OpCode != OpCodes.Brfalse && + instruction.OpCode != OpCodes.Brfalse_S) { - /* - This method is used to parse compiler generated code inside async state machine and find branches generated for exception catch blocks. - There are differences between debug and release configuration. Also variations of the shown examples exist e.g. multiple catch blocks, - nested catch blocks... Therefore we just look for the highlights. - Typical generated code for catch block is: - - // Debug version: - catch ... - { - // (no C# code) - IL_0028: stloc.2 - // object obj2 = <>s__1 = obj; - IL_0029: ldarg.0 - // (no C# code) - IL_002a: ldloc.2 - IL_002b: stfld object ...::'<>s__1' - // <>s__2 = 1; - IL_0030: ldarg.0 - IL_0031: ldc.i4.1 - IL_0032: stfld int32 ...::'<>s__2' <- store 1 into <>s__2 - // (no C# code) - IL_0037: leave.s IL_0039 - } // end handle - - // int num2 = <>s__2; - IL_0039: ldarg.0 - IL_003a: ldfld int32 ...::'<>s__2' <- load <>s__2 value and check if 1 - IL_003f: stloc.3 - // if (num2 == 1) - IL_0040: ldloc.3 - IL_0041: ldc.i4.1 - IL_0042: beq.s IL_0049 <- BRANCH : if <>s__2 value is 1 go to exception handler code - IL_0044: br IL_00d6 - IL_0049: nop <- start exception handler code - - // Release version: - catch ... - { - IL_001D: stloc.3 - IL_001E: ldarg.0 - IL_001F: ldloc.3 - IL_0020: stfld object Coverlet.Core.Samples.Tests.CatchBlock / 'd__0'::'<>7__wrap1' - IL_0025: ldc.i4.1 - IL_0026: stloc.2 - IL_0027: leave.s IL_0029 - } // end handler - - IL_0029: ldloc.2 - IL_002A: ldc.i4.1 - IL_002B: bne.un.s IL_00AC - - - In case of multiple catch blocks as - try - { - } - catch (ExceptionType1) - { - } - catch (ExceptionType2) - { - } - - generated IL contains multiple branches: - - // Debug version: - catch ...(type1) - { - ... - } - catch ...(type2) - { - ... - } - // int num2 = <>s__2; - IL_0039: ldarg.0 - IL_003a: ldfld int32 ...::'<>s__2' <- load <>s__2 value and check if 1 - IL_003f: stloc.3 - // if (num2 == 1) - IL_0040: ldloc.3 - IL_0041: ldc.i4.1 - IL_0042: beq.s IL_0049 <- BRANCH 1 (type 1) - IL_0044: br IL_00d6 - - // if (num2 == 2) - IL_0067: ldloc.s 4 - IL_0069: ldc.i4.2 - IL_006a: beq IL_0104 <- BRANCH 2 (type 2) - - // (no C# code) - IL_006f: br IL_0191 - - // Release version: - catch ...(type1) - { - ... - } - catch ...(type2) - { - ... - } - IL_003E: ldloc.2 - IL_003F: ldc.i4.1 - IL_0040: beq.s IL_004E + return false; + } - IL_0042: ldloc.2/ - IL_0043: ldc.i4.2 - IL_0044: beq IL_00CD + // We expect the field to be loaded no more than thre instructions before + // the branch, so that's how far we're willing to search for it. + int minFieldIndex = Math.Max(0, currentIndex - 3); - IL_0049: br IL_0147 - */ - if (!_compilerGeneratedBranchesToExclude.ContainsKey(methodDefinition.FullName)) + for (int i = currentIndex - 1; i >= minFieldIndex; --i) + { + if (instructions[i].OpCode == OpCodes.Ldfld && + IsCompilerGeneratedField(instructions[i], out FieldDefinition field) && + field.FieldType.FullName == "System.Object") + { + // We expect the call to GetResult() to be no more than four + // instructions before the loading of the field's value. + int minCallIndex = Math.Max(0, i - 4); + + for (int j = i - 1; j >= minCallIndex; --j) { - var detectedBranches = new List(); - Collection handlers = methodDefinition.Body.ExceptionHandlers; - - int numberOfCatchBlocks = 1; - foreach (ExceptionHandler handler in handlers) - { - if (handlers.Any(h => h.HandlerStart == handler.HandlerEnd)) - { - // In case of multiple consecutive catch block - numberOfCatchBlocks++; - continue; - } - - int currentIndex = bodyInstructions.BinarySearch(handler.HandlerEnd, new InstructionByOffsetComparer()); - - for (int i = 0; i < numberOfCatchBlocks; i++) - { - // We expect the first branch after the end of the handler to be no more than five instructions away. - int firstBranchIndex = currentIndex + Enumerable.Range(1, 5).FirstOrDefault(x => - currentIndex + x < bodyInstructions.Count && - bodyInstructions[currentIndex + x].OpCode == OpCodes.Beq || - bodyInstructions[currentIndex + x].OpCode == OpCodes.Bne_Un); - - if (bodyInstructions.Count - firstBranchIndex > 2 && - bodyInstructions[firstBranchIndex - 1].OpCode == OpCodes.Ldc_I4 && - bodyInstructions[firstBranchIndex - 2].OpCode == OpCodes.Ldloc) - { - detectedBranches.Add(bodyInstructions[firstBranchIndex].Offset); - } - - currentIndex = firstBranchIndex; - } - } - - _compilerGeneratedBranchesToExclude.TryAdd(methodDefinition.FullName, detectedBranches.ToArray()); + if (instructions[j].OpCode == OpCodes.Call && + instructions[j].Operand is MethodReference callRef && + callRef.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices") && + callRef.DeclaringType.FullName.Contains("TaskAwait") && + callRef.Name == "GetResult") + { + return true; + } } - - return _compilerGeneratedBranchesToExclude[methodDefinition.FullName].Contains(instruction.Offset); + } } - private static bool SkipGeneratedBranchesForAwaitForeach(List instructions, Instruction instruction) + return false; + } + + static bool CheckThrownExceptionType(List instructions, Instruction instruction, int currentIndex) + { + // In this case, we're looking for a branch generated by the compiler to + // check whether a previously-thrown exception has (at least) the type + // System.Exception, the pattern for which looks like this: + // + // IL_01db: ldloc.s 7 + // IL_01dd: isinst [System.Private.CoreLib]System.Exception + // IL_01e2: stloc.s 9 + // IL_01e4: ldloc.s 9 + // IL_01e6: brtrue.s IL_01eb + // + // Once again, variants are possible here, such as a "dup" instruction in + // place of the "stloc.s" and "ldloc.s" pair, and we'll reduce the odds of + // a false positive by requiring a "ldloc.s" instruction to precede the + // "isinst" instruction. + + if (instruction.OpCode != OpCodes.Brtrue && + instruction.OpCode != OpCodes.Brtrue_S) { - // An "await foreach" causes four additional branches to be generated - // by the compiler. We want to skip the last three, but we want to - // keep the first one. - // - // (1) At each iteration of the loop, a check that there is another - // item in the sequence. This is a branch that we want to keep, - // because it's basically "should we stay in the loop or not?", - // which is germane to code coverage testing. - // (2) A check near the end for whether the IAsyncEnumerator was ever - // obtained, so it can be disposed. - // (3) A check for whether an exception was thrown in the most recent - // loop iteration. - // (4) A check for whether the exception thrown in the most recent - // loop iteration has (at least) the type System.Exception. - // - // If we're looking at any of the last three of those four branches, - // we should be skipping it. - - int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); - - return CheckForAsyncEnumerator(instructions, instruction, currentIndex) || - CheckIfExceptionThrown(instructions, instruction, currentIndex) || - CheckThrownExceptionType(instructions, instruction, currentIndex); - - // The pattern for the "should we stay in the loop or not?", which we don't - // want to skip (so we have no method to try to find it), looks like this: - // - // IL_0111: ldloca.s 4 - // IL_0113: call instance !0 valuetype [System.Private.CoreLib]System.Runtime.CompilerServices.ValueTaskAwaiter`1::GetResult() - // IL_0118: brtrue IL_0047 - // - // In Debug mode, there are additional things that happen in between - // the "call" and branch, but it's the same idea either way: branch - // if GetResult() returned true. - - static bool CheckForAsyncEnumerator(List instructions, Instruction instruction, int currentIndex) - { - // We're looking for the following pattern, which checks whether a - // compiler-generated field of type IAsyncEnumerator<> is null. - // - // IL_012b: ldarg.0 - // IL_012c: ldfld class [System.Private.CoreLib]System.Collections.Generic.IAsyncEnumerator`1 AwaitForeachStateMachine/'d__0'::'<>7__wrap1' - // IL_0131: brfalse.s IL_0196 - - if (instruction.OpCode != OpCodes.Brfalse && - instruction.OpCode != OpCodes.Brfalse_S) - { - return false; - } + return false; + } - if (currentIndex >= 2 && - (instructions[currentIndex - 2].OpCode == OpCodes.Ldarg || - instructions[currentIndex - 2].OpCode == OpCodes.Ldarg_0) && - instructions[currentIndex - 1].OpCode == OpCodes.Ldfld && - ( - (instructions[currentIndex - 1].Operand is FieldDefinition field && IsCompilerGenerated(field) && field.FieldType.FullName.StartsWith("System.Collections.Generic.IAsyncEnumerator")) || - (instructions[currentIndex - 1].Operand is FieldReference fieldRef && IsCompilerGenerated(fieldRef.Resolve()) && fieldRef.FieldType.FullName.StartsWith("System.Collections.Generic.IAsyncEnumerator")) - ) - ) - { - return true; - } + int minTypeCheckIndex = Math.Max(1, currentIndex - 3); - return false; - } + for (int i = currentIndex - 1; i >= minTypeCheckIndex; --i) + { + if (instructions[i].OpCode == OpCodes.Isinst && + instructions[i].Operand is TypeReference typeRef && + typeRef.FullName == "System.Exception" && + (instructions[i - 1].OpCode == OpCodes.Ldloc || + instructions[i - 1].OpCode == OpCodes.Ldloc_S || + instructions[i - 1].OpCode == OpCodes.Ldloc_0 || + instructions[i - 1].OpCode == OpCodes.Ldloc_1 || + instructions[i - 1].OpCode == OpCodes.Ldloc_2 || + instructions[i - 1].OpCode == OpCodes.Ldloc_3)) + { + return true; + } + } - static bool CheckIfExceptionThrown(List instructions, Instruction instruction, int currentIndex) - { - // Here, we want to find a pattern where we're checking whether a - // compiler-generated field of type Object is null. To narrow our - // search down and reduce the odds of false positives, we'll also - // expect a call to GetResult() to precede the loading of the field's - // value. The basic pattern looks like this: - // - // IL_018f: ldloca.s 2 - // IL_0191: call instance void [System.Private.CoreLib]System.Runtime.CompilerServices.ValueTaskAwaiter::GetResult() - // IL_0196: ldarg.0 - // IL_0197: ldfld object AwaitForeachStateMachine/'d__0'::'<>7__wrap2' - // IL_019c: stloc.s 6 - // IL_019e: ldloc.s 6 - // IL_01a0: brfalse.s IL_01b9 - // - // Variants are possible (e.g., a "dup" instruction instead of a - // "stloc.s" and "ldloc.s" pair), so we'll just look for the - // highlights. - - if (instruction.OpCode != OpCodes.Brfalse && - instruction.OpCode != OpCodes.Brfalse_S) - { - return false; - } + return false; + } + } - // We expect the field to be loaded no more than thre instructions before - // the branch, so that's how far we're willing to search for it. - int minFieldIndex = Math.Max(0, currentIndex - 3); + private static bool SkipGeneratedBranchesForAwaitUsing(List instructions, Instruction instruction) + { + int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + + return CheckForSkipDisposal(instructions, instruction, currentIndex) || + CheckForCleanup(instructions, instruction, currentIndex); + + static bool CheckForSkipDisposal(List instructions, Instruction instruction, int currentIndex) + { + // The async state machine generated for an "await using" contains a branch + // that checks whether the call to DisposeAsync() needs to be skipped. + // As it turns out, the pattern is a little different in Debug and Release + // configurations, but the idea is the same in either case: + // + // * Check whether the IAsyncDisposable that's being managed by the "await + // using" is null. If so, skip the call to DisposeAsync(). If not, + // make the call. + // + // To avoid other places where this pattern is used, we'll require it to be + // preceded by the tail end of a try/catch generated by the compiler. + // + // The primary difference between the Debug and Release versions of this + // pattern are where that IAsyncDisposable is stored. In Debug mode, it's + // in a field; in Release mode, it's in a local variable. So what we'll + // look for, generally, is a brfalse instruction that checks a value, + // followed shortly by reloading that same value and calling DisposeAsync() + // on it, preceded shortly by a store into a compiler-generated field and + // a "leave" instruction. + // + // Debug version: + // IL_0041: stfld object Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'<>s__2' + // IL_0046: leave.s IL_0048 + // IL_0048: ldarg.0 + // IL_0049: ldfld class [System.Private.CoreLib]System.IO.MemoryStream Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'5__1' + // IL_004e: brfalse.s IL_00b9 + // IL_0050: ldarg.0 + // IL_0051: ldfld class [System.Private.CoreLib]System.IO.MemoryStream Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'5__1' + // IL_0056: callvirt instance valuetype [System.Private.CoreLib]System.Threading.Tasks.ValueTask [System.Private.CoreLib]System.IAsyncDisposable::DisposeAsync() + // + // Release version: + // IL_0032: stfld object Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'<>7__wrap1' + // IL_0037: leave.s IL_0039 + // IL_0039: ldloc.1 + // IL_003a: brfalse.s IL_0098 + // IL_003c: ldloc.1 + // IL_003d: callvirt instance valuetype [System.Private.CoreLib]System.Threading.Tasks.ValueTask [System.Private.CoreLib]System.IAsyncDisposable::DisposeAsync() + + if (instruction.OpCode != OpCodes.Brfalse && + instruction.OpCode != OpCodes.Brfalse_S) + { + return false; + } - for (int i = currentIndex - 1; i >= minFieldIndex; --i) - { - if (instructions[i].OpCode == OpCodes.Ldfld && - ( - (instructions[i].Operand is FieldDefinition field && IsCompilerGenerated(field) && field.FieldType.FullName == "System.Object") || - (instructions[i].Operand is FieldReference fieldRef && IsCompilerGenerated(fieldRef.Resolve()) && fieldRef.FieldType.FullName == "System.Object") - )) - { - // We expect the call to GetResult() to be no more than four - // instructions before the loading of the field's value. - int minCallIndex = Math.Max(0, i - 4); - - for (int j = i - 1; j >= minCallIndex; --j) - { - if (instructions[j].OpCode == OpCodes.Call && - instructions[j].Operand is MethodReference callRef && - callRef.DeclaringType.FullName.StartsWith("System.Runtime.CompilerServices") && - callRef.DeclaringType.FullName.Contains("TaskAwait") && - callRef.Name == "GetResult") - { - return true; - } - } - } - } + bool isFollowedByDisposeAsync = false; - return false; + if (instructions[currentIndex - 1].OpCode == OpCodes.Ldfld) + { + if(! IsCompilerGeneratedField(instructions[currentIndex - 1], out FieldDefinition field)) return false; + + int maxReloadFieldIndex = Math.Min(currentIndex + 2, instructions.Count - 2); + + for (int i = currentIndex + 1; i <= maxReloadFieldIndex; ++i) + { + if (instructions[i].OpCode == OpCodes.Ldfld && + IsCompilerGeneratedField(instructions[i], out FieldDefinition reloadedField) && + field.Equals(reloadedField) && + instructions[i + 1].OpCode == OpCodes.Callvirt && + instructions[i + 1].Operand is MethodReference method && + method.DeclaringType.FullName == "System.IAsyncDisposable" && + method.Name == "DisposeAsync") + { + isFollowedByDisposeAsync = true; + break; } + } + } + else if ((instructions[currentIndex - 1].OpCode == OpCodes.Ldloc || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_S || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_0 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_1 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_2 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_3) && + (instructions[currentIndex + 1].OpCode == OpCodes.Ldloc || + instructions[currentIndex + 1].OpCode == OpCodes.Ldloc_S || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_0 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_1 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_2 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_3) && + instructions[currentIndex + 2].OpCode == OpCodes.Callvirt && + instructions[currentIndex + 2].Operand is MethodReference method && + method.DeclaringType.FullName == "System.IAsyncDisposable" && + method.Name == "DisposeAsync") + { + isFollowedByDisposeAsync = true; + } - static bool CheckThrownExceptionType(List instructions, Instruction instruction, int currentIndex) + if (isFollowedByDisposeAsync) + { + int minLeaveIndex = Math.Max(1, currentIndex - 4); + + for (int i = currentIndex - 1; i >= minLeaveIndex; --i) + { + if ((instructions[i].OpCode == OpCodes.Leave || + instructions[i].OpCode == OpCodes.Leave_S) && + instructions[i - 1].OpCode == OpCodes.Stfld && + IsCompilerGeneratedField(instructions[i - 1], out FieldDefinition _) + ) { - // In this case, we're looking for a branch generated by the compiler to - // check whether a previously-thrown exception has (at least) the type - // System.Exception, the pattern for which looks like this: - // - // IL_01db: ldloc.s 7 - // IL_01dd: isinst [System.Private.CoreLib]System.Exception - // IL_01e2: stloc.s 9 - // IL_01e4: ldloc.s 9 - // IL_01e6: brtrue.s IL_01eb - // - // Once again, variants are possible here, such as a "dup" instruction in - // place of the "stloc.s" and "ldloc.s" pair, and we'll reduce the odds of - // a false positive by requiring a "ldloc.s" instruction to precede the - // "isinst" instruction. - - if (instruction.OpCode != OpCodes.Brtrue && - instruction.OpCode != OpCodes.Brtrue_S) - { - return false; - } - - int minTypeCheckIndex = Math.Max(1, currentIndex - 3); - - for (int i = currentIndex - 1; i >= minTypeCheckIndex; --i) - { - if (instructions[i].OpCode == OpCodes.Isinst && - instructions[i].Operand is TypeReference typeRef && - typeRef.FullName == "System.Exception" && - (instructions[i - 1].OpCode == OpCodes.Ldloc || - instructions[i - 1].OpCode == OpCodes.Ldloc_S || - instructions[i - 1].OpCode == OpCodes.Ldloc_0 || - instructions[i - 1].OpCode == OpCodes.Ldloc_1 || - instructions[i - 1].OpCode == OpCodes.Ldloc_2 || - instructions[i - 1].OpCode == OpCodes.Ldloc_3)) - { - return true; - } - } - - return false; + return true; } + } } - private static bool SkipGeneratedBranchesForAwaitUsing(List instructions, Instruction instruction) + return false; + } + + static bool CheckForCleanup(List instructions, Instruction instruction, int currentIndex) + { + // The pattern we're looking for here is this: + // + // IL_00c6: ldloc.s 5 + // IL_00c8: call class [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Private.CoreLib]System.Exception) + // IL_00cd: callvirt instance void [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() + // IL_00d2: nop + // IL_00d3: ldarg.0 + // IL_00d4: ldfld int32 Coverlet.Core.Samples.Tests.AwaitUsing/'d__2'::'<>s__3' + // IL_00d9: stloc.s 6 + // IL_00db: ldloc.s 6 + // IL_00dd: ldc.i4.1 + // IL_00de: beq.s IL_00e2 + // IL_00e0: br.s IL_00e4 + // IL_00e2: leave.s IL_0115 + // + // It appears that this pattern is not generated in every "await using", + // but only in an "await using" without curly braces (i.e., that is + // scoped to the end of the method). It's also a slightly different + // pattern in Release vs. Debug (bne.un.s instead of beq.s followed by + // br.s). To be as safe as we can, we'll expect an ldc.i4 to precede + // the branch, then we want a load from a compiler-generated field within + // a few instructions before that, then we want an exception to be + // rethrown before that. + + if (instruction.OpCode != OpCodes.Beq && + instruction.OpCode != OpCodes.Beq_S && + instruction.OpCode != OpCodes.Bne_Un && + instruction.OpCode != OpCodes.Bne_Un_S) { - int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + return false; + } - return CheckForSkipDisposal(instructions, instruction, currentIndex) || - CheckForCleanup(instructions, instruction, currentIndex); + if (currentIndex >= 1 && + (instructions[currentIndex - 1].OpCode == OpCodes.Ldc_I4 || + instructions[currentIndex - 1].OpCode == OpCodes.Ldc_I4_1)) + { + int minLoadFieldIndex = Math.Max(1, currentIndex - 5); - static bool CheckForSkipDisposal(List instructions, Instruction instruction, int currentIndex) + for (int i = currentIndex - 2; i >= minLoadFieldIndex; --i) + { + if (instructions[i].OpCode == OpCodes.Ldfld && IsCompilerGeneratedField(instructions[i], out FieldDefinition _)) { - // The async state machine generated for an "await using" contains a branch - // that checks whether the call to DisposeAsync() needs to be skipped. - // As it turns out, the pattern is a little different in Debug and Release - // configurations, but the idea is the same in either case: - // - // * Check whether the IAsyncDisposable that's being managed by the "await - // using" is null. If so, skip the call to DisposeAsync(). If not, - // make the call. - // - // To avoid other places where this pattern is used, we'll require it to be - // preceded by the tail end of a try/catch generated by the compiler. - // - // The primary difference between the Debug and Release versions of this - // pattern are where that IAsyncDisposable is stored. In Debug mode, it's - // in a field; in Release mode, it's in a local variable. So what we'll - // look for, generally, is a brfalse instruction that checks a value, - // followed shortly by reloading that same value and calling DisposeAsync() - // on it, preceded shortly by a store into a compiler-generated field and - // a "leave" instruction. - // - // Debug version: - // IL_0041: stfld object Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'<>s__2' - // IL_0046: leave.s IL_0048 - // IL_0048: ldarg.0 - // IL_0049: ldfld class [System.Private.CoreLib]System.IO.MemoryStream Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'5__1' - // IL_004e: brfalse.s IL_00b9 - // IL_0050: ldarg.0 - // IL_0051: ldfld class [System.Private.CoreLib]System.IO.MemoryStream Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'5__1' - // IL_0056: callvirt instance valuetype [System.Private.CoreLib]System.Threading.Tasks.ValueTask [System.Private.CoreLib]System.IAsyncDisposable::DisposeAsync() - // - // Release version: - // IL_0032: stfld object Coverlet.Core.Samples.Tests.AwaitUsing/'d__0'::'<>7__wrap1' - // IL_0037: leave.s IL_0039 - // IL_0039: ldloc.1 - // IL_003a: brfalse.s IL_0098 - // IL_003c: ldloc.1 - // IL_003d: callvirt instance valuetype [System.Private.CoreLib]System.Threading.Tasks.ValueTask [System.Private.CoreLib]System.IAsyncDisposable::DisposeAsync() - - if (instruction.OpCode != OpCodes.Brfalse && - instruction.OpCode != OpCodes.Brfalse_S) - { - return false; - } - - bool isFollowedByDisposeAsync = false; - - if (instructions[currentIndex - 1].OpCode == OpCodes.Ldfld && - instructions[currentIndex - 1].Operand is FieldDefinition field && - IsCompilerGenerated(field)) + int minRethrowIndex = Math.Max(0, i - 4); + + for (int j = i - 1; j >= minRethrowIndex; --j) + { + if (instructions[j].OpCode == OpCodes.Callvirt && + instructions[j].Operand is MethodReference method && + method.DeclaringType.FullName == "System.Runtime.ExceptionServices.ExceptionDispatchInfo" && + method.Name == "Throw") { - int maxReloadFieldIndex = Math.Min(currentIndex + 2, instructions.Count - 2); - - for (int i = currentIndex + 1; i <= maxReloadFieldIndex; ++i) - { - if (instructions[i].OpCode == OpCodes.Ldfld && - instructions[i].Operand is FieldDefinition reloadedField && - field.Equals(reloadedField) && - instructions[i + 1].OpCode == OpCodes.Callvirt && - instructions[i + 1].Operand is MethodReference method && - method.DeclaringType.FullName == "System.IAsyncDisposable" && - method.Name == "DisposeAsync") - { - isFollowedByDisposeAsync = true; - break; - } - } + return true; } - else if ((instructions[currentIndex - 1].OpCode == OpCodes.Ldloc || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_S || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_0 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_1 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_2 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_3) && - (instructions[currentIndex + 1].OpCode == OpCodes.Ldloc || - instructions[currentIndex + 1].OpCode == OpCodes.Ldloc_S || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_0 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_1 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_2 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldloc_3) && - instructions[currentIndex + 2].OpCode == OpCodes.Callvirt && - instructions[currentIndex + 2].Operand is MethodReference method && - method.DeclaringType.FullName == "System.IAsyncDisposable" && - method.Name == "DisposeAsync") - { - isFollowedByDisposeAsync = true; - } - - if (isFollowedByDisposeAsync) - { - int minLeaveIndex = Math.Max(1, currentIndex - 4); - - for (int i = currentIndex - 1; i >= minLeaveIndex; --i) - { - if ((instructions[i].OpCode == OpCodes.Leave || - instructions[i].OpCode == OpCodes.Leave_S) && - instructions[i - 1].OpCode == OpCodes.Stfld && - instructions[i - 1].Operand is FieldDefinition storeField && - IsCompilerGenerated(storeField)) - { - return true; - } - } - } - - return false; + } } + } + } - static bool CheckForCleanup(List instructions, Instruction instruction, int currentIndex) - { - // The pattern we're looking for here is this: - // - // IL_00c6: ldloc.s 5 - // IL_00c8: call class [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Private.CoreLib]System.Exception) - // IL_00cd: callvirt instance void [System.Private.CoreLib]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() - // IL_00d2: nop - // IL_00d3: ldarg.0 - // IL_00d4: ldfld int32 Coverlet.Core.Samples.Tests.AwaitUsing/'d__2'::'<>s__3' - // IL_00d9: stloc.s 6 - // IL_00db: ldloc.s 6 - // IL_00dd: ldc.i4.1 - // IL_00de: beq.s IL_00e2 - // IL_00e0: br.s IL_00e4 - // IL_00e2: leave.s IL_0115 - // - // It appears that this pattern is not generated in every "await using", - // but only in an "await using" without curly braces (i.e., that is - // scoped to the end of the method). It's also a slightly different - // pattern in Release vs. Debug (bne.un.s instead of beq.s followed by - // br.s). To be as safe as we can, we'll expect an ldc.i4 to precede - // the branch, then we want a load from a compiler-generated field within - // a few instructions before that, then we want an exception to be - // rethrown before that. - - if (instruction.OpCode != OpCodes.Beq && - instruction.OpCode != OpCodes.Beq_S && - instruction.OpCode != OpCodes.Bne_Un && - instruction.OpCode != OpCodes.Bne_Un_S) - { - return false; - } - - if (currentIndex >= 1 && - (instructions[currentIndex - 1].OpCode == OpCodes.Ldc_I4 || - instructions[currentIndex - 1].OpCode == OpCodes.Ldc_I4_1)) - { - int minLoadFieldIndex = Math.Max(1, currentIndex - 5); - - for (int i = currentIndex - 2; i >= minLoadFieldIndex; --i) - { - if (instructions[i].OpCode == OpCodes.Ldfld && - instructions[i].Operand is FieldDefinition loadedField && - IsCompilerGenerated(loadedField)) - { - int minRethrowIndex = Math.Max(0, i - 4); - - for (int j = i - 1; j >= minRethrowIndex; --j) - { - if (instructions[j].OpCode == OpCodes.Callvirt && - instructions[j].Operand is MethodReference method && - method.DeclaringType.FullName == "System.Runtime.ExceptionServices.ExceptionDispatchInfo" && - method.Name == "Throw") - { - return true; - } - } - } - } - } + return false; + } + } - return false; - } + // https://docs.microsoft.com/en-us/archive/msdn-magazine/2019/november/csharp-iterating-with-async-enumerables-in-csharp-8 + private static bool SkipGeneratedBranchesForAsyncIterator(List instructions, Instruction instruction) + { + // There are two branch patterns that we want to eliminate in the + // MoveNext() method in compiler-generated async iterators. + // + // (1) A "switch" instruction near the beginning of MoveNext() that checks + // the state machine's current state and jumps to the right place. + // (2) A check that the compiler-generated field "<>w__disposeMode" is false, + // which is used to know whether the enumerator has been disposed (so it's + // necessary not to iterate any further). This is done in more than once + // place, but we always want to skip it. + + int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + + return CheckForStateSwitch(instructions, instruction, currentIndex) || + DisposeCheck(instructions, instruction, currentIndex); + + static bool CheckForStateSwitch(List instructions, Instruction instruction, int currentIndex) + { + // The pattern we're looking for here is this one: + // + // IL_0000: ldarg.0 + // IL_0001: ldfld int32 Test.AsyncEnumerableStateMachine/'d__0'::'<>1__state' + // IL_0006: stloc.0 + // .try + // { + // IL_0007: ldloc.0 + // IL_0008: ldc.i4.s -4 + // IL_000a: sub + // IL_000b: switch (IL_0026, IL_002b, IL_002f, IL_002f, IL_002d) + // + // The "switch" instruction is the branch we want to skip. To eliminate + // false positives, we'll search back for the "ldfld" of the compiler- + // generated "<>1__state" field, making sure it precedes it within five + // instructions. To be safe, we'll also require a "ldarg.0" instruction + // before the "ldfld". + + if (instruction.OpCode != OpCodes.Switch) + { + return false; } - // https://docs.microsoft.com/en-us/archive/msdn-magazine/2019/november/csharp-iterating-with-async-enumerables-in-csharp-8 - private static bool SkipGeneratedBranchesForAsyncIterator(List instructions, Instruction instruction) - { - // There are two branch patterns that we want to eliminate in the - // MoveNext() method in compiler-generated async iterators. - // - // (1) A "switch" instruction near the beginning of MoveNext() that checks - // the state machine's current state and jumps to the right place. - // (2) A check that the compiler-generated field "<>w__disposeMode" is false, - // which is used to know whether the enumerator has been disposed (so it's - // necessary not to iterate any further). This is done in more than once - // place, but we always want to skip it. - - int currentIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); - - return CheckForStateSwitch(instructions, instruction, currentIndex) || - DisposeCheck(instructions, instruction, currentIndex); - - static bool CheckForStateSwitch(List instructions, Instruction instruction, int currentIndex) - { - // The pattern we're looking for here is this one: - // - // IL_0000: ldarg.0 - // IL_0001: ldfld int32 Test.AsyncEnumerableStateMachine/'d__0'::'<>1__state' - // IL_0006: stloc.0 - // .try - // { - // IL_0007: ldloc.0 - // IL_0008: ldc.i4.s -4 - // IL_000a: sub - // IL_000b: switch (IL_0026, IL_002b, IL_002f, IL_002f, IL_002d) - // - // The "switch" instruction is the branch we want to skip. To eliminate - // false positives, we'll search back for the "ldfld" of the compiler- - // generated "<>1__state" field, making sure it precedes it within five - // instructions. To be safe, we'll also require a "ldarg.0" instruction - // before the "ldfld". - - if (instruction.OpCode != OpCodes.Switch) - { - return false; - } + int minLoadStateFieldIndex = Math.Max(1, currentIndex - 5); - int minLoadStateFieldIndex = Math.Max(1, currentIndex - 5); + for (int i = currentIndex - 1; i >= minLoadStateFieldIndex; --i) + { + if (instructions[i].OpCode == OpCodes.Ldfld && + instructions[i].Operand is FieldDefinition field && + IsCompilerGenerated(field) && field.FullName.EndsWith("__state") && + (instructions[i - 1].OpCode == OpCodes.Ldarg || + instructions[i - 1].OpCode == OpCodes.Ldarg_0)) + { + return true; + } + } - for (int i = currentIndex - 1; i >= minLoadStateFieldIndex; --i) - { - if (instructions[i].OpCode == OpCodes.Ldfld && - instructions[i].Operand is FieldDefinition field && - IsCompilerGenerated(field) && field.FullName.EndsWith("__state") && - (instructions[i - 1].OpCode == OpCodes.Ldarg || - instructions[i - 1].OpCode == OpCodes.Ldarg_0)) - { - return true; - } - } + return false; + } + + static bool DisposeCheck(List instructions, Instruction instruction, int currentIndex) + { + // Within the compiler-generated async iterator, there are at least a + // couple of places where we find this pattern, in which the async + // iterator is checking whether it's been disposed, so it'll know to + // stop iterating. + // + // IL_0024: ldarg.0 + // IL_0025: ldfld bool Test.AsyncEnumerableStateMachine/'d__0'::'<>w__disposeMode' + // IL_002a: brfalse.s IL_0031 + // + // We'll eliminate these wherever they appear. It's reasonable to just + // look for a "brfalse" or "brfalse.s" instruction, preceded immediately + // by "ldfld" of the compiler-generated "<>w__disposeMode" field. + + if (instruction.OpCode != OpCodes.Brfalse && + instruction.OpCode != OpCodes.Brfalse_S) + { + return false; + } - return false; - } + if (currentIndex >= 2 && + instructions[currentIndex - 1].OpCode == OpCodes.Ldfld && + IsCompilerGeneratedField(instructions[currentIndex - 1], out FieldDefinition field) && + field.FullName.EndsWith("__disposeMode") && + (instructions[currentIndex - 2].OpCode == OpCodes.Ldarg || + instructions[currentIndex - 2].OpCode == OpCodes.Ldarg_0)) + { + return true; + } - static bool DisposeCheck(List instructions, Instruction instruction, int currentIndex) - { - // Within the compiler-generated async iterator, there are at least a - // couple of places where we find this pattern, in which the async - // iterator is checking whether it's been disposed, so it'll know to - // stop iterating. - // - // IL_0024: ldarg.0 - // IL_0025: ldfld bool Test.AsyncEnumerableStateMachine/'d__0'::'<>w__disposeMode' - // IL_002a: brfalse.s IL_0031 - // - // We'll eliminate these wherever they appear. It's reasonable to just - // look for a "brfalse" or "brfalse.s" instruction, preceded immediately - // by "ldfld" of the compiler-generated "<>w__disposeMode" field. - - if (instruction.OpCode != OpCodes.Brfalse && - instruction.OpCode != OpCodes.Brfalse_S) - { - return false; - } + return false; + } + } - if (currentIndex >= 2 && - instructions[currentIndex - 1].OpCode == OpCodes.Ldfld && - ( - (instructions[currentIndex - 1].Operand is FieldDefinition field && IsCompilerGenerated(field) && field.FullName.EndsWith("__disposeMode")) || - (instructions[currentIndex - 1].Operand is FieldReference fieldRef && IsCompilerGenerated(fieldRef.Resolve()) && fieldRef.FullName.EndsWith("__disposeMode")) - ) && - (instructions[currentIndex - 2].OpCode == OpCodes.Ldarg || - instructions[currentIndex - 2].OpCode == OpCodes.Ldarg_0)) - { - return true; - } + private static bool SkipGeneratedBranchesForEnumeratorCancellationAttribute(List instructions, Instruction instruction) + { + // For async-enumerable methods an additional cancellation token despite the default one can be passed. + // The EnumeratorCancellation attribute marks the parameter whose value is received by GetAsyncEnumerator(CancellationToken). + // Therefore the compiler generates the field x__combinedTokens and generates some additional branch points. + // + // IL_0118: ldarg.0 + // IL_0119: ldfld class [System.Runtime]System.Threading.CancellationTokenSource Issue1275.AwaitForeachReproduction/'d__1'::'<>x__combinedTokens' + // IL_011E: brfalse.s IL_0133 + // + // We'll eliminate these wherever they appear. It's reasonable to just look for a "brfalse" or "brfalse.s" instruction, preceded + // immediately by "ldfld" of the compiler-generated "<>x__combinedTokens" field. + + int branchIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); + + if (instruction.OpCode != OpCodes.Brfalse && + instruction.OpCode != OpCodes.Brfalse_S) + { + return false; + } + + if (branchIndex >= 2 && + instructions[branchIndex - 1].OpCode == OpCodes.Ldfld && + instructions[branchIndex - 1].Operand is FieldDefinition field && + field.FieldType.FullName.Equals("System.Threading.CancellationTokenSource") && + field.FullName.EndsWith("x__combinedTokens") && + (instructions[branchIndex - 2].OpCode == OpCodes.Ldarg || + instructions[branchIndex - 2].OpCode == OpCodes.Ldarg_0)) + { + return true; + } + return false; + } - return false; - } - } + // https://github.com/dotnet/roslyn/blob/master/docs/compilers/CSharp/Expression%20Breakpoints.md + private static bool SkipExpressionBreakpointsBranches(Instruction instruction) => instruction.Previous is not null && instruction.Previous.OpCode == OpCodes.Ldc_I4 && + instruction.Previous.Operand is int operandValue && operandValue == 1 && + instruction.Next is not null && instruction.Next.OpCode == OpCodes.Nop && + instruction.Operand == instruction.Next?.Next; - private static bool SkipGeneratedBranchesForEnumeratorCancellationAttribute(List instructions, Instruction instruction) + public IReadOnlyList GetBranchPoints(MethodDefinition methodDefinition) + { + var list = new List(); + if (methodDefinition is null) + { + return list; + } + + uint ordinal = 0; + var instructions = methodDefinition.Body.Instructions.ToList(); + + bool isAsyncStateMachineMoveNext = IsMoveNextInsideAsyncStateMachine(methodDefinition); + bool isMoveNextInsideAsyncStateMachineProlog = isAsyncStateMachineMoveNext && IsMoveNextInsideAsyncStateMachineProlog(methodDefinition); + bool isMoveNextInsideAsyncIterator = isAsyncStateMachineMoveNext && IsMoveNextInsideAsyncIterator(methodDefinition); + + // State machine for enumerator uses `brfalse.s`/`beq` or `switch` opcode depending on how many `yield` we have in the method body. + // For more than one `yield` a `switch` is emitted so we should only skip the first branch. In case of a single `yield` we need to + // skip the first two branches to avoid reporting a phantom branch. The first branch (`brfalse.s`) jumps to the `yield`ed value, + // the second one (`beq`) exits the enumeration. + bool skipFirstBranch = IsMoveNextInsideEnumerator(methodDefinition); + bool skipSecondBranch = false; + + foreach (Instruction instruction in instructions.Where(instruction => instruction.OpCode.FlowControl == FlowControl.Cond_Branch)) + { + try { - // For async-enumerable methods an additional cancellation token despite the default one can be passed. - // The EnumeratorCancellation attribute marks the parameter whose value is received by GetAsyncEnumerator(CancellationToken). - // Therefore the compiler generates the field x__combinedTokens and generates some additional branch points. - // - // IL_0118: ldarg.0 - // IL_0119: ldfld class [System.Runtime]System.Threading.CancellationTokenSource Issue1275.AwaitForeachReproduction/'d__1'::'<>x__combinedTokens' - // IL_011E: brfalse.s IL_0133 - // - // We'll eliminate these wherever they appear. It's reasonable to just look for a "brfalse" or "brfalse.s" instruction, preceded - // immediately by "ldfld" of the compiler-generated "<>x__combinedTokens" field. - - int branchIndex = instructions.BinarySearch(instruction, new InstructionByOffsetComparer()); - - if (instruction.OpCode != OpCodes.Brfalse && - instruction.OpCode != OpCodes.Brfalse_S) + if (skipFirstBranch) + { + skipFirstBranch = false; + skipSecondBranch = instruction.OpCode.Code != Code.Switch; + continue; + } + + if (skipSecondBranch) + { + skipSecondBranch = false; + continue; + } + + if (isMoveNextInsideAsyncStateMachineProlog) + { + if (SkipMoveNextPrologueBranches(instruction) || SkipIsCompleteAwaiters(instruction)) { - return false; + continue; } - - if (branchIndex >= 2 && - instructions[branchIndex - 1].OpCode == OpCodes.Ldfld && - instructions[branchIndex - 1].Operand is FieldDefinition field && - field.FieldType.FullName.Equals("System.Threading.CancellationTokenSource") && - field.FullName.EndsWith("x__combinedTokens") && - (instructions[branchIndex - 2].OpCode == OpCodes.Ldarg || - instructions[branchIndex - 2].OpCode == OpCodes.Ldarg_0)) + } + + if (SkipExpressionBreakpointsBranches(instruction)) + { + continue; + } + + if (SkipLambdaCachedField(instruction) || SkipDelegateCacheField(instruction)) + { + continue; + } + + if (isAsyncStateMachineMoveNext) + { + if (SkipGeneratedBranchesForExceptionHandlers(methodDefinition, instruction, instructions) || + SkipGeneratedBranchForExceptionRethrown(instructions, instruction) || + SkipGeneratedBranchesForAwaitForeach(instructions, instruction) || + SkipGeneratedBranchesForAwaitUsing(instructions, instruction)) { - return true; + continue; } - return false; - } - - // https://github.com/dotnet/roslyn/blob/master/docs/compilers/CSharp/Expression%20Breakpoints.md - private static bool SkipExpressionBreakpointsBranches(Instruction instruction) => instruction.Previous is not null && instruction.Previous.OpCode == OpCodes.Ldc_I4 && - instruction.Previous.Operand is int operandValue && operandValue == 1 && - instruction.Next is not null && instruction.Next.OpCode == OpCodes.Nop && - instruction.Operand == instruction.Next?.Next; - - public IReadOnlyList GetBranchPoints(MethodDefinition methodDefinition) - { - var list = new List(); - if (methodDefinition is null) - { - return list; - } - - uint ordinal = 0; - var instructions = methodDefinition.Body.Instructions.ToList(); - - bool isAsyncStateMachineMoveNext = IsMoveNextInsideAsyncStateMachine(methodDefinition); - bool isMoveNextInsideAsyncStateMachineProlog = isAsyncStateMachineMoveNext && IsMoveNextInsideAsyncStateMachineProlog(methodDefinition); - bool isMoveNextInsideAsyncIterator = isAsyncStateMachineMoveNext && IsMoveNextInsideAsyncIterator(methodDefinition); + } - // State machine for enumerator uses `brfalse.s`/`beq` or `switch` opcode depending on how many `yield` we have in the method body. - // For more than one `yield` a `switch` is emitted so we should only skip the first branch. In case of a single `yield` we need to - // skip the first two branches to avoid reporting a phantom branch. The first branch (`brfalse.s`) jumps to the `yield`ed value, - // the second one (`beq`) exits the enumeration. - bool skipFirstBranch = IsMoveNextInsideEnumerator(methodDefinition); - bool skipSecondBranch = false; - - foreach (Instruction instruction in instructions.Where(instruction => instruction.OpCode.FlowControl == FlowControl.Cond_Branch)) + if (isMoveNextInsideAsyncIterator) + { + if (SkipGeneratedBranchesForAsyncIterator(instructions, instruction)) { - try - { - if (skipFirstBranch) - { - skipFirstBranch = false; - skipSecondBranch = instruction.OpCode.Code != Code.Switch; - continue; - } - - if (skipSecondBranch) - { - skipSecondBranch = false; - continue; - } - - if (isMoveNextInsideAsyncStateMachineProlog) - { - if (SkipMoveNextPrologueBranches(instruction) || SkipIsCompleteAwaiters(instruction)) - { - continue; - } - } - - if (SkipExpressionBreakpointsBranches(instruction)) - { - continue; - } - - if (SkipLambdaCachedField(instruction)) - { - continue; - } - - if (isAsyncStateMachineMoveNext) - { - if (SkipGeneratedBranchesForExceptionHandlers(methodDefinition, instruction, instructions) || - SkipGeneratedBranchForExceptionRethrown(instructions, instruction) || - SkipGeneratedBranchesForAwaitForeach(instructions, instruction) || - SkipGeneratedBranchesForAwaitUsing(instructions, instruction)) - { - continue; - } - } - - if (isMoveNextInsideAsyncIterator) - { - if (SkipGeneratedBranchesForAsyncIterator(instructions, instruction)) - { - continue; - } - } - - if (SkipGeneratedBranchesForEnumeratorCancellationAttribute(instructions, instruction)) - { - continue; - } - - if (SkipBranchGeneratedExceptionFilter(instruction, methodDefinition)) - { - continue; - } - - if (SkipBranchGeneratedFinallyBlock(instruction, methodDefinition)) - { - continue; - } - - int pathCounter = 0; - - // store branch origin offset - int branchOffset = instruction.Offset; - SequencePoint closestSeqPt = FindClosestInstructionWithSequencePoint(methodDefinition.Body, instruction).Maybe(i => methodDefinition.DebugInformation.GetSequencePoint(i)); - int branchingInstructionLine = closestSeqPt.Maybe(x => x.StartLine, -1); - string document = closestSeqPt.Maybe(x => x.Document.Url); - - if (instruction.Next == null) - { - return list; - } - - if (!BuildPointsForConditionalBranch(list, instruction, branchingInstructionLine, document, branchOffset, pathCounter, instructions, ref ordinal, methodDefinition)) - { - return list; - } - } - catch (Exception) - { - continue; - } + continue; } - return list; - } + } - private static bool BuildPointsForConditionalBranch(List list, Instruction instruction, - int branchingInstructionLine, string document, int branchOffset, int pathCounter, - List instructions, ref uint ordinal, MethodDefinition methodDefinition) - { - // Add Default branch (Path=0) + if (SkipGeneratedBranchesForEnumeratorCancellationAttribute(instructions, instruction)) + { + continue; + } - // Follow else/default instruction - Instruction @else = instruction.Next; + if (SkipBranchGeneratedExceptionFilter(instruction, methodDefinition)) + { + continue; + } - List pathOffsetList = GetBranchPath(@else); + if (SkipBranchGeneratedFinallyBlock(instruction, methodDefinition)) + { + continue; + } - // add Path 0 - var path0 = new BranchPoint - { - StartLine = branchingInstructionLine, - Document = document, - Offset = branchOffset, - Ordinal = ordinal++, - Path = pathCounter++, - OffsetPoints = - pathOffsetList.Count > 1 - ? pathOffsetList.GetRange(0, pathOffsetList.Count - 1) - : new List(), - EndOffset = pathOffsetList.Last() - }; + int pathCounter = 0; - // Add Conditional Branch (Path=1) - if (instruction.OpCode.Code != Code.Switch) - { - // Follow instruction at operand - if (instruction.Operand is not Instruction @then) - return false; + // store branch origin offset + int branchOffset = instruction.Offset; + SequencePoint closestSeqPt = FindClosestInstructionWithSequencePoint(methodDefinition.Body, instruction).Maybe(i => methodDefinition.DebugInformation.GetSequencePoint(i)); + int branchingInstructionLine = closestSeqPt.Maybe(x => x.StartLine, -1); + string document = closestSeqPt.Maybe(x => x.Document.Url); - ordinal = BuildPointsForBranch(list, then, branchingInstructionLine, document, branchOffset, - ordinal, pathCounter, path0, instructions, methodDefinition); - } - else // instruction.OpCode.Code == Code.Switch - { - if (instruction.Operand is not Instruction[] branchInstructions || branchInstructions.Length == 0) - return false; + if (instruction.Next == null) + { + return list; + } - ordinal = BuildPointsForSwitchCases(list, path0, branchInstructions, branchingInstructionLine, - document, branchOffset, ordinal, ref pathCounter); - } - return true; + if (!BuildPointsForConditionalBranch(list, instruction, branchingInstructionLine, document, branchOffset, pathCounter, instructions, ref ordinal, methodDefinition)) + { + return list; + } } - - private static uint BuildPointsForBranch(List list, Instruction then, int branchingInstructionLine, string document, - int branchOffset, uint ordinal, int pathCounter, BranchPoint path0, List instructions, MethodDefinition methodDefinition) + catch (Exception) { - List pathOffsetList1 = GetBranchPath(@then); + continue; + } + } + return list; + } - // Add path 1 - var path1 = new BranchPoint - { - StartLine = branchingInstructionLine, - Document = document, - Offset = branchOffset, - Ordinal = ordinal++, - Path = pathCounter, - OffsetPoints = - pathOffsetList1.Count > 1 - ? pathOffsetList1.GetRange(0, pathOffsetList1.Count - 1) - : new List(), - EndOffset = pathOffsetList1.Last() - }; + private static bool BuildPointsForConditionalBranch(List list, Instruction instruction, + int branchingInstructionLine, string document, int branchOffset, int pathCounter, + List instructions, ref uint ordinal, MethodDefinition methodDefinition) + { + // Add Default branch (Path=0) + + // Follow else/default instruction + Instruction @else = instruction.Next; + + List pathOffsetList = GetBranchPath(@else); + + // add Path 0 + var path0 = new BranchPoint + { + StartLine = branchingInstructionLine, + Document = document, + Offset = branchOffset, + Ordinal = ordinal++, + Path = pathCounter++, + OffsetPoints = + pathOffsetList.Count > 1 + ? pathOffsetList.GetRange(0, pathOffsetList.Count - 1) + : new List(), + EndOffset = pathOffsetList.Last() + }; + + // Add Conditional Branch (Path=1) + if (instruction.OpCode.Code != Code.Switch) + { + // Follow instruction at operand + if (instruction.Operand is not Instruction @then) + return false; + + ordinal = BuildPointsForBranch(list, then, branchingInstructionLine, document, branchOffset, + ordinal, pathCounter, path0, instructions, methodDefinition); + } + else // instruction.OpCode.Code == Code.Switch + { + if (instruction.Operand is not Instruction[] branchInstructions || branchInstructions.Length == 0) + return false; + + ordinal = BuildPointsForSwitchCases(list, path0, branchInstructions, branchingInstructionLine, + document, branchOffset, ordinal, ref pathCounter); + } + return true; + } - // only add branch if branch does not match a known sequence - // e.g. auto generated field assignment - // or encapsulates at least one sequence point - int[] offsets = new[] - { + private static uint BuildPointsForBranch(List list, Instruction then, int branchingInstructionLine, string document, + int branchOffset, uint ordinal, int pathCounter, BranchPoint path0, List instructions, MethodDefinition methodDefinition) + { + List pathOffsetList1 = GetBranchPath(@then); + + // Add path 1 + var path1 = new BranchPoint + { + StartLine = branchingInstructionLine, + Document = document, + Offset = branchOffset, + Ordinal = ordinal++, + Path = pathCounter, + OffsetPoints = + pathOffsetList1.Count > 1 + ? pathOffsetList1.GetRange(0, pathOffsetList1.Count - 1) + : new List(), + EndOffset = pathOffsetList1.Last() + }; + + // only add branch if branch does not match a known sequence + // e.g. auto generated field assignment + // or encapsulates at least one sequence point + int[] offsets = new[] + { path0.Offset, path0.EndOffset, path1.Offset, path1.EndOffset }; - Code[][] ignoreSequences = new[] - { + Code[][] ignoreSequences = new[] + { // we may need other samples new[] {Code.Brtrue_S, Code.Pop, Code.Ldsfld, Code.Ldftn, Code.Newobj, Code.Dup, Code.Stsfld, Code.Newobj}, // CachedAnonymousMethodDelegate field allocation }; - int bs = offsets.Min(); - int be = offsets.Max(); + int bs = offsets.Min(); + int be = offsets.Max(); - var range = instructions.Where(i => (i.Offset >= bs) && (i.Offset <= be)).ToList(); + var range = instructions.Where(i => (i.Offset >= bs) && (i.Offset <= be)).ToList(); - bool match = ignoreSequences - .Where(ignoreSequence => range.Count >= ignoreSequence.Length) - .Any(ignoreSequence => range.Zip(ignoreSequence, (instruction, code) => instruction.OpCode.Code == code).All(x => x)); + bool match = ignoreSequences + .Where(ignoreSequence => range.Count >= ignoreSequence.Length) + .Any(ignoreSequence => range.Zip(ignoreSequence, (instruction, code) => instruction.OpCode.Code == code).All(x => x)); - int count = range - .Count(i => methodDefinition.DebugInformation.GetSequencePoint(i) != null); + int count = range + .Count(i => methodDefinition.DebugInformation.GetSequencePoint(i) != null); - if (!match || count > 0) - { - list.Add(path0); - list.Add(path1); - } - return ordinal; - } + if (!match || count > 0) + { + list.Add(path0); + list.Add(path1); + } + return ordinal; + } - private static uint BuildPointsForSwitchCases(List list, BranchPoint path0, Instruction[] branchInstructions, - int branchingInstructionLine, string document, int branchOffset, uint ordinal, ref int pathCounter) - { - int counter = pathCounter; - list.Add(path0); - // Add Conditional Branches (Path>0) - list.AddRange(branchInstructions.Select(GetBranchPath) - .Select(pathOffsetList1 => new BranchPoint - { - StartLine = branchingInstructionLine, - Document = document, - Offset = branchOffset, - Ordinal = ordinal++, - Path = counter++, - OffsetPoints = - pathOffsetList1.Count > 1 - ? pathOffsetList1.GetRange(0, pathOffsetList1.Count - 1) - : new List(), - EndOffset = pathOffsetList1.Last() - })); - pathCounter = counter; - return ordinal; - } + private static uint BuildPointsForSwitchCases(List list, BranchPoint path0, Instruction[] branchInstructions, + int branchingInstructionLine, string document, int branchOffset, uint ordinal, ref int pathCounter) + { + int counter = pathCounter; + list.Add(path0); + // Add Conditional Branches (Path>0) + list.AddRange(branchInstructions.Select(GetBranchPath) + .Select(pathOffsetList1 => new BranchPoint + { + StartLine = branchingInstructionLine, + Document = document, + Offset = branchOffset, + Ordinal = ordinal++, + Path = counter++, + OffsetPoints = + pathOffsetList1.Count > 1 + ? pathOffsetList1.GetRange(0, pathOffsetList1.Count - 1) + : new List(), + EndOffset = pathOffsetList1.Last() + })); + pathCounter = counter; + return ordinal; + } - public bool SkipNotCoverableInstruction(MethodDefinition methodDefinition, Instruction instruction) => - SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(methodDefinition, instruction) || - SkipExpressionBreakpointsSequences(methodDefinition, instruction); - - /* - Need to skip instrumentation after exception re-throw inside catch block (only for async state machine MoveNext()) - es: - try - { - ... - } - catch - { - await ... - throw; - } // need to skip instrumentation here - - We can detect this type of code block by searching for method ExceptionDispatchInfo.Throw() inside the compiled IL - ... - // ExceptionDispatchInfo.Capture(ex).Throw(); - IL_00c6: ldloc.s 6 - IL_00c8: call class [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Runtime]System.Exception) - IL_00cd: callvirt instance void [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() - // NOT COVERABLE - IL_00d2: nop - IL_00d3: nop - ... + public bool SkipNotCoverableInstruction(MethodDefinition methodDefinition, Instruction instruction) => + SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(methodDefinition, instruction) || + SkipExpressionBreakpointsSequences(methodDefinition, instruction); - In case of nested code blocks inside catch we need to detect also goto calls + /* + Need to skip instrumentation after exception re-throw inside catch block (only for async state machine MoveNext()) + es: + try + { ... - // ExceptionDispatchInfo.Capture(ex).Throw(); - IL_00d3: ldloc.s 7 - IL_00d5: call class [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Runtime]System.Exception) - IL_00da: callvirt instance void [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() - // NOT COVERABLE - IL_00df: nop - IL_00e0: nop - IL_00e1: br.s IL_00ea - ... - // NOT COVERABLE - IL_00ea: nop - IL_00eb: br.s IL_00ed - ... - */ - public bool SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(MethodDefinition methodDefinition, Instruction instruction) + } + catch + { + await ... + throw; + } // need to skip instrumentation here + + We can detect this type of code block by searching for method ExceptionDispatchInfo.Throw() inside the compiled IL + ... + // ExceptionDispatchInfo.Capture(ex).Throw(); + IL_00c6: ldloc.s 6 + IL_00c8: call class [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Runtime]System.Exception) + IL_00cd: callvirt instance void [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() + // NOT COVERABLE + IL_00d2: nop + IL_00d3: nop + ... + + In case of nested code blocks inside catch we need to detect also goto calls + ... + // ExceptionDispatchInfo.Capture(ex).Throw(); + IL_00d3: ldloc.s 7 + IL_00d5: call class [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Capture(class [System.Runtime]System.Exception) + IL_00da: callvirt instance void [System.Runtime]System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw() + // NOT COVERABLE + IL_00df: nop + IL_00e0: nop + IL_00e1: br.s IL_00ea + ... + // NOT COVERABLE + IL_00ea: nop + IL_00eb: br.s IL_00ed + ... + */ + public bool SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(MethodDefinition methodDefinition, Instruction instruction) + { + if (!IsMoveNextInsideAsyncStateMachine(methodDefinition)) + { + return false; + } + + if (instruction.OpCode != OpCodes.Nop) + { + return false; + } + + // detect if current instruction is not coverable + Instruction prev = GetPreviousNoNopInstruction(instruction); + if (prev != null && + prev.OpCode == OpCodes.Callvirt && + prev.Operand is MethodReference mr && mr.FullName == "System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw()") + { + return true; + } + + // find the caller of current instruction and detect if not coverable + prev = instruction.Previous; + while (prev != null) + { + if (prev.Operand is Instruction i && (i.Offset == instruction.Offset || i.Offset == prev.Next.Offset)) // caller { - if (!IsMoveNextInsideAsyncStateMachine(methodDefinition)) - { - return false; - } - - if (instruction.OpCode != OpCodes.Nop) - { - return false; - } - - // detect if current instruction is not coverable - Instruction prev = GetPreviousNoNopInstruction(instruction); - if (prev != null && - prev.OpCode == OpCodes.Callvirt && - prev.Operand is MethodReference mr && mr.FullName == "System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw()") - { - return true; - } - - // find the caller of current instruction and detect if not coverable - prev = instruction.Previous; - while (prev != null) - { - if (prev.Operand is Instruction i && (i.Offset == instruction.Offset || i.Offset == prev.Next.Offset)) // caller - { - prev = GetPreviousNoNopInstruction(prev); - break; - } - prev = prev.Previous; - } - - return prev != null && - prev.OpCode == OpCodes.Callvirt && - prev.Operand is MethodReference mr1 && mr1.FullName == "System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw()"; - - // local helper - static Instruction GetPreviousNoNopInstruction(Instruction i) - { - Instruction instruction = i.Previous; - while (instruction != null) - { - if (instruction.OpCode != OpCodes.Nop) - { - return instruction; - } - instruction = instruction.Previous; - } - - return null; - } + prev = GetPreviousNoNopInstruction(prev); + break; } - - private bool SkipExpressionBreakpointsSequences(MethodDefinition methodDefinition, Instruction instruction) + prev = prev.Previous; + } + + return prev != null && + prev.OpCode == OpCodes.Callvirt && + prev.Operand is MethodReference mr1 && mr1.FullName == "System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo::Throw()"; + + // local helper + static Instruction GetPreviousNoNopInstruction(Instruction i) + { + Instruction instruction = i.Previous; + while (instruction != null) { - if (_sequencePointOffsetToSkip.ContainsKey(methodDefinition.FullName) && _sequencePointOffsetToSkip[methodDefinition.FullName].Contains(instruction.Offset) && instruction.OpCode == OpCodes.Nop) - { - return true; - } - /* - Sequence to skip https://github.com/dotnet/roslyn/blob/master/docs/compilers/CSharp/Expression%20Breakpoints.md - // if (1 == 0) - // sequence point: (line 33, col 9) to (line 40, col 10) in C:\git\coverletfork\test\coverlet.core.tests\Samples\Instrumentation.SelectionStatements.cs - IL_0000: ldc.i4.1 - IL_0001: brtrue.s IL_0004 - // if (value is int) - // sequence point: (line 34, col 9) to (line 40, col 10) in C:\git\coverletfork\test\coverlet.core.tests\Samples\Instrumentation.SelectionStatements.cs - IL_0003: nop - // sequence point: hidden - ... - */ - if ( - instruction.OpCode == OpCodes.Ldc_I4 && instruction.Operand is int operandValue && operandValue == 1 && - instruction.Next?.OpCode == OpCodes.Brtrue && - instruction.Next?.Next?.OpCode == OpCodes.Nop && - instruction.Next?.Operand == instruction.Next?.Next?.Next && - methodDefinition.DebugInformation.GetSequencePoint(instruction.Next?.Next) is not null - ) - { - if (!_sequencePointOffsetToSkip.ContainsKey(methodDefinition.FullName)) - { - _sequencePointOffsetToSkip.TryAdd(methodDefinition.FullName, new List()); - } - _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Offset); - _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Next.Offset); - _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Next.Next.Offset); - } - - return false; + if (instruction.OpCode != OpCodes.Nop) + { + return instruction; + } + instruction = instruction.Previous; } - public bool SkipInlineAssignedAutoProperty(bool skipAutoProps, MethodDefinition methodDefinition, Instruction instruction) - { - if (!skipAutoProps || !methodDefinition.IsConstructor) return false; - - return SkipGeneratedBackingFieldAssignment(methodDefinition, instruction) || - SkipDefaultInitializationSystemObject(instruction); - } + return null; + } + } - private static bool SkipGeneratedBackingFieldAssignment(MethodDefinition methodDefinition, Instruction instruction) + private bool SkipExpressionBreakpointsSequences(MethodDefinition methodDefinition, Instruction instruction) + { + if (_sequencePointOffsetToSkip.ContainsKey(methodDefinition.FullName) && _sequencePointOffsetToSkip[methodDefinition.FullName].Contains(instruction.Offset) && instruction.OpCode == OpCodes.Nop) + { + return true; + } + /* + Sequence to skip https://github.com/dotnet/roslyn/blob/master/docs/compilers/CSharp/Expression%20Breakpoints.md + // if (1 == 0) + // sequence point: (line 33, col 9) to (line 40, col 10) in C:\git\coverletfork\test\coverlet.core.tests\Samples\Instrumentation.SelectionStatements.cs + IL_0000: ldc.i4.1 + IL_0001: brtrue.s IL_0004 + // if (value is int) + // sequence point: (line 34, col 9) to (line 40, col 10) in C:\git\coverletfork\test\coverlet.core.tests\Samples\Instrumentation.SelectionStatements.cs + IL_0003: nop + // sequence point: hidden + ... + */ + if ( + instruction.OpCode == OpCodes.Ldc_I4 && instruction.Operand is int operandValue && operandValue == 1 && + instruction.Next?.OpCode == OpCodes.Brtrue && + instruction.Next?.Next?.OpCode == OpCodes.Nop && + instruction.Next?.Operand == instruction.Next?.Next?.Next && + methodDefinition.DebugInformation.GetSequencePoint(instruction.Next?.Next) is not null + ) + { + if (!_sequencePointOffsetToSkip.ContainsKey(methodDefinition.FullName)) { - /* - For inline initialization of properties the compiler generates a field that is set in the constructor of the class. - To skip this we search for compiler generated fields that are set in the constructor. - - .field private string 'k__BackingField' - .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( - 01 00 00 00 - ) - - .method public hidebysig specialname rtspecialname - instance void .ctor () cil managed - { - IL_0000: ldarg.0 - IL_0001: ldsfld string[System.Runtime] System.String::Empty - IL_0006: stfld string TestRepro.ClassWithPropertyInit::'k__BackingField' - ... - } - ... - */ - IEnumerable autogeneratedBackingFields = methodDefinition.DeclaringType.Fields.Where(x => - x.CustomAttributes.Any(ca => ca.AttributeType.FullName.Equals(typeof(CompilerGeneratedAttribute).FullName)) && - x.FullName.EndsWith("k__BackingField")); - - return instruction.OpCode == OpCodes.Ldarg && - instruction.Next?.Next?.OpCode == OpCodes.Stfld && - instruction.Next?.Next?.Operand is FieldReference fr && - autogeneratedBackingFields.Select(x => x.FullName).Contains(fr.FullName); + _sequencePointOffsetToSkip.TryAdd(methodDefinition.FullName, new List()); } + _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Offset); + _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Next.Offset); + _sequencePointOffsetToSkip[methodDefinition.FullName].Add(instruction.Next.Next.Offset); + } - private static bool SkipDefaultInitializationSystemObject(Instruction instruction) - { - /* - A type always has a constructor with a default instantiation of System.Object. For record types these - instructions can have a own sequence point. This means that even the default constructor would be instrumented. - To skip this we search for call instructions with a method reference that declares System.Object. - - IL_0000: ldarg.0 - IL_0001: call instance void [System.Runtime]System.Object::.ctor() - IL_0006: ret - */ - return instruction.OpCode == OpCodes.Ldarg && - instruction.Next?.OpCode == OpCodes.Call && - instruction.Next?.Operand is MethodReference mr && mr.DeclaringType.FullName.Equals(typeof(System.Object).FullName); - } + return false; + } - private static bool SkipBranchGeneratedExceptionFilter(Instruction branchInstruction, MethodDefinition methodDefinition) - { - if (!methodDefinition.Body.HasExceptionHandlers) - return false; + public bool SkipInlineAssignedAutoProperty(bool skipAutoProps, MethodDefinition methodDefinition, Instruction instruction) + { + if (!skipAutoProps || !methodDefinition.IsConstructor) return false; - // a generated filter block will have no sequence points in its range - var handlers = methodDefinition.Body.ExceptionHandlers - .Where(e => e.HandlerType == ExceptionHandlerType.Filter) - .ToList(); + return SkipGeneratedBackingFieldAssignment(methodDefinition, instruction) || + SkipDefaultInitializationSystemObject(instruction); + } - foreach (ExceptionHandler exceptionHandler in handlers) - { - Instruction startFilter = exceptionHandler.FilterStart; - Instruction endFilter = startFilter; + private static bool SkipGeneratedBackingFieldAssignment(MethodDefinition methodDefinition, Instruction instruction) + { + /* + For inline initialization of properties the compiler generates a field that is set in the constructor of the class. + To skip this we search for compiler generated fields that are set in the constructor. + + .field private string 'k__BackingField' + .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( + 01 00 00 00 + ) + + .method public hidebysig specialname rtspecialname + instance void .ctor () cil managed + { + IL_0000: ldarg.0 + IL_0001: ldsfld string[System.Runtime] System.String::Empty + IL_0006: stfld string TestRepro.ClassWithPropertyInit::'k__BackingField' + ... + } + ... + */ + IEnumerable autogeneratedBackingFields = methodDefinition.DeclaringType.Fields.Where(x => + x.CustomAttributes.Any(ca => ca.AttributeType.FullName.Equals(typeof(CompilerGeneratedAttribute).FullName)) && + x.FullName.EndsWith("k__BackingField")); + + return instruction.OpCode == OpCodes.Ldarg && + instruction.Next?.Next?.OpCode == OpCodes.Stfld && + instruction.Next?.Next?.Operand is FieldReference fr && + autogeneratedBackingFields.Select(x => x.FullName).Contains(fr.FullName); + } - while (endFilter != null && endFilter.OpCode != OpCodes.Endfilter) - { - endFilter = endFilter.Next; - } + private static bool SkipDefaultInitializationSystemObject(Instruction instruction) + { + /* + A type always has a constructor with a default instantiation of System.Object. For record types these + instructions can have a own sequence point. This means that even the default constructor would be instrumented. + To skip this we search for call instructions with a method reference that declares System.Object. + + IL_0000: ldarg.0 + IL_0001: call instance void [System.Runtime]System.Object::.ctor() + IL_0006: ret + */ + return instruction.OpCode == OpCodes.Ldarg && + instruction.Next?.OpCode == OpCodes.Call && + instruction.Next?.Operand is MethodReference mr && mr.DeclaringType.FullName.Equals(typeof(System.Object).FullName); + } - if (branchInstruction.Offset >= startFilter.Offset && branchInstruction.Offset <= endFilter.Offset) - { - return true; - } - } + private static bool SkipBranchGeneratedExceptionFilter(Instruction branchInstruction, MethodDefinition methodDefinition) + { + if (!methodDefinition.Body.HasExceptionHandlers) + return false; - return false; - } + // a generated filter block will have no sequence points in its range + var handlers = methodDefinition.Body.ExceptionHandlers + .Where(e => e.HandlerType == ExceptionHandlerType.Filter) + .ToList(); - private static bool SkipBranchGeneratedFinallyBlock(Instruction branchInstruction, MethodDefinition methodDefinition) - { - if (!methodDefinition.Body.HasExceptionHandlers) - return false; - - // a generated finally block will have no sequence points in its range - var handlers = methodDefinition.Body.ExceptionHandlers - .Where(e => e.HandlerType == ExceptionHandlerType.Finally) - .ToList(); - - return handlers - .Where(e => branchInstruction.Offset >= e.HandlerStart.Offset) - .Where(e => branchInstruction.Offset < e.HandlerEnd.Maybe(h => h.Offset, GetOffsetOfNextEndfinally(methodDefinition.Body, e.HandlerStart.Offset))) - .OrderByDescending(h => h.HandlerStart.Offset) // we need to work inside out - .Any(eh => !(methodDefinition.DebugInformation.GetSequencePointMapping() - .Where(i => i.Value.StartLine != StepOverLineCode) - .Any(i => i.Value.Offset >= eh.HandlerStart.Offset && i.Value.Offset < eh.HandlerEnd.Maybe(h => h.Offset, GetOffsetOfNextEndfinally(methodDefinition.Body, eh.HandlerStart.Offset))))); - } + foreach (ExceptionHandler exceptionHandler in handlers) + { + Instruction startFilter = exceptionHandler.FilterStart; + Instruction endFilter = startFilter; - private static int GetOffsetOfNextEndfinally(MethodBody body, int startOffset) + while (endFilter != null && endFilter.OpCode != OpCodes.Endfilter) { - int lastOffset = body.Instructions.LastOrDefault().Maybe(i => i.Offset, int.MaxValue); - return body.Instructions.FirstOrDefault(i => i.Offset >= startOffset && i.OpCode.Code == Code.Endfinally).Maybe(i => i.Offset, lastOffset); + endFilter = endFilter.Next; } - private static List GetBranchPath(Instruction instruction) + if (branchInstruction.Offset >= startFilter.Offset && branchInstruction.Offset <= endFilter.Offset) { - var offsetList = new List(); + return true; + } + } - if (instruction != null) - { - Instruction point = instruction; - offsetList.Add(point.Offset); - while (point.OpCode == OpCodes.Br || point.OpCode == OpCodes.Br_S) - { - if (point.Operand is Instruction nextPoint) - { - point = nextPoint; - offsetList.Add(point.Offset); - } - else - { - break; - } - } - } + return false; + } - return offsetList; - } + private static bool SkipBranchGeneratedFinallyBlock(Instruction branchInstruction, MethodDefinition methodDefinition) + { + if (!methodDefinition.Body.HasExceptionHandlers) + return false; + + // a generated finally block will have no sequence points in its range + var handlers = methodDefinition.Body.ExceptionHandlers + .Where(e => e.HandlerType == ExceptionHandlerType.Finally) + .ToList(); + + return handlers + .Where(e => branchInstruction.Offset >= e.HandlerStart.Offset) + .Where(e => branchInstruction.Offset < e.HandlerEnd.Maybe(h => h.Offset, GetOffsetOfNextEndfinally(methodDefinition.Body, e.HandlerStart.Offset))) + .OrderByDescending(h => h.HandlerStart.Offset) // we need to work inside out + .Any(eh => !(methodDefinition.DebugInformation.GetSequencePointMapping() + .Where(i => i.Value.StartLine != StepOverLineCode) + .Any(i => i.Value.Offset >= eh.HandlerStart.Offset && i.Value.Offset < eh.HandlerEnd.Maybe(h => h.Offset, GetOffsetOfNextEndfinally(methodDefinition.Body, eh.HandlerStart.Offset))))); + } - private static Instruction FindClosestInstructionWithSequencePoint(MethodBody methodBody, Instruction instruction) - { - var sequencePointsInMethod = methodBody.Instructions.Where(i => HasValidSequencePoint(i, methodBody.Method)).ToList(); - if (!sequencePointsInMethod.Any()) - return null; - int idx = sequencePointsInMethod.BinarySearch(instruction, new InstructionByOffsetComparer()); - Instruction prev; - if (idx < 0) - { - // no exact match, idx corresponds to the next, larger element - int lower = Math.Max(~idx - 1, 0); - prev = sequencePointsInMethod[lower]; - } - else - { - // exact match, idx corresponds to the match - prev = sequencePointsInMethod[idx]; - } + private static int GetOffsetOfNextEndfinally(MethodBody body, int startOffset) + { + int lastOffset = body.Instructions.LastOrDefault().Maybe(i => i.Offset, int.MaxValue); + return body.Instructions.FirstOrDefault(i => i.Offset >= startOffset && i.OpCode.Code == Code.Endfinally).Maybe(i => i.Offset, lastOffset); + } - return prev; - } + private static List GetBranchPath(Instruction instruction) + { + var offsetList = new List(); - private static bool HasValidSequencePoint(Instruction instruction, MethodDefinition methodDefinition) + if (instruction != null) + { + Instruction point = instruction; + offsetList.Add(point.Offset); + while (point.OpCode == OpCodes.Br || point.OpCode == OpCodes.Br_S) { - SequencePoint sp = methodDefinition.DebugInformation.GetSequencePoint(instruction); - return sp != null && sp.StartLine != StepOverLineCode; + if (point.Operand is Instruction nextPoint) + { + point = nextPoint; + offsetList.Add(point.Offset); + } + else + { + break; + } } + } - private class InstructionByOffsetComparer : IComparer - { - public int Compare(Instruction x, Instruction y) - { - return x.Offset.CompareTo(y.Offset); - } - } + return offsetList; + } + + private static Instruction FindClosestInstructionWithSequencePoint(MethodBody methodBody, Instruction instruction) + { + var sequencePointsInMethod = methodBody.Instructions.Where(i => HasValidSequencePoint(i, methodBody.Method)).ToList(); + if (!sequencePointsInMethod.Any()) + return null; + int idx = sequencePointsInMethod.BinarySearch(instruction, new InstructionByOffsetComparer()); + Instruction prev; + if (idx < 0) + { + // no exact match, idx corresponds to the next, larger element + int lower = Math.Max(~idx - 1, 0); + prev = sequencePointsInMethod[lower]; + } + else + { + // exact match, idx corresponds to the match + prev = sequencePointsInMethod[idx]; + } + + return prev; + } + + private static bool HasValidSequencePoint(Instruction instruction, MethodDefinition methodDefinition) + { + SequencePoint sp = methodDefinition.DebugInformation.GetSequencePoint(instruction); + return sp != null && sp.StartLine != StepOverLineCode; + } + + private class InstructionByOffsetComparer : IComparer + { + public int Compare(Instruction x, Instruction y) + { + return x.Offset.CompareTo(y.Offset); + } } + } } diff --git a/src/coverlet.core/coverlet.core.csproj b/src/coverlet.core/coverlet.core.csproj index 93a6c972d..8d73fc5a6 100644 --- a/src/coverlet.core/coverlet.core.csproj +++ b/src/coverlet.core/coverlet.core.csproj @@ -2,17 +2,29 @@ Library - netstandard2.0 + netstandard2.0 false + + + + + - - - - + + + + + + + + + + + diff --git a/src/coverlet.msbuild.tasks/BaseTask.cs b/src/coverlet.msbuild.tasks/BaseTask.cs index 99606bda8..1798b95b4 100644 --- a/src/coverlet.msbuild.tasks/BaseTask.cs +++ b/src/coverlet.msbuild.tasks/BaseTask.cs @@ -6,8 +6,8 @@ namespace Coverlet.MSbuild.Tasks { - public abstract class BaseTask : Task - { - protected static IServiceProvider ServiceProvider { get; set; } - } + public abstract class BaseTask : Task + { + public static IServiceProvider ServiceProvider { get; protected internal set; } + } } diff --git a/src/coverlet.msbuild.tasks/CoverageResultTask.cs b/src/coverlet.msbuild.tasks/CoverageResultTask.cs index 23a29f7a5..87ba40c7d 100644 --- a/src/coverlet.msbuild.tasks/CoverageResultTask.cs +++ b/src/coverlet.msbuild.tasks/CoverageResultTask.cs @@ -18,247 +18,248 @@ namespace Coverlet.MSbuild.Tasks { - public class CoverageResultTask : BaseTask + public class CoverageResultTask : BaseTask + { + private readonly MSBuildLogger _logger; + + [Required] + public string Output { get; set; } + + [Required] + public string OutputFormat { get; set; } + + [Required] + public string Threshold { get; set; } + + [Required] + public string ThresholdType { get; set; } + + [Required] + public string ThresholdStat { get; set; } + + [Required] + public ITaskItem InstrumenterState { get; set; } + + public string CoverletMultiTargetFrameworksCurrentTFM { get; set; } + + [Output] + public ITaskItem[] ReportItems { get; set; } + + public CoverageResultTask() + { + _logger = new MSBuildLogger(Log); + } + + public override bool Execute() { - private readonly MSBuildLogger _logger; + try + { + _logger.LogInformation("\nCalculating coverage result...", true); - [Required] - public string Output { get; set; } + IFileSystem fileSystem = ServiceProvider.GetService(); + if (InstrumenterState is null || !fileSystem.Exists(InstrumenterState.ItemSpec)) + { + _logger.LogError("Result of instrumentation task not found"); + return false; + } - [Required] - public string OutputFormat { get; set; } + Coverage coverage = null; + using (Stream instrumenterStateStream = fileSystem.NewFileStream(InstrumenterState.ItemSpec, FileMode.Open)) + { + IInstrumentationHelper instrumentationHelper = ServiceProvider.GetService(); + // Task.Log is teared down after a task and thus the new MSBuildLogger must be passed to the InstrumentationHelper + // https://github.com/microsoft/msbuild/issues/5153 + instrumentationHelper.SetLogger(_logger); + coverage = new Coverage(CoveragePrepareResult.Deserialize(instrumenterStateStream), _logger, ServiceProvider.GetService(), fileSystem, ServiceProvider.GetService()); + } - [Required] - public string Threshold { get; set; } + try + { + fileSystem.Delete(InstrumenterState.ItemSpec); + } + catch (Exception ex) + { + // We don't want to block coverage for I/O errors + _logger.LogInformation($"Exception during instrument state deletion, file name '{InstrumenterState.ItemSpec}'"); + _logger.LogWarning(ex); + } - [Required] - public string ThresholdType { get; set; } + CoverageResult result = coverage.GetCoverageResult(); - [Required] - public string ThresholdStat { get; set; } + string directory = Path.GetDirectoryName(Output); + if (directory == string.Empty) + { + directory = Directory.GetCurrentDirectory(); + } + else if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } - [Required] - public ITaskItem InstrumenterState { get; set; } + string[] formats = OutputFormat.Split(','); + var coverageReportPaths = new List(formats.Length); + ISourceRootTranslator sourceRootTranslator = ServiceProvider.GetService(); + foreach (string format in formats) + { + IReporter reporter = new ReporterFactory(format).CreateReporter(); + if (reporter == null) + { + throw new Exception($"Specified output format '{format}' is not supported"); + } + + if (reporter.OutputType == ReporterOutputType.Console) + { + // Output to TaskLoggingHelper + Log.LogMessage(MessageImportance.High, " Outputting results to console"); + Log.LogMessage(MessageImportance.High, reporter.Report(result, sourceRootTranslator)); + } + else + { + ReportWriter writer = new(CoverletMultiTargetFrameworksCurrentTFM, + directory, + Output, + reporter, + fileSystem, + result, + sourceRootTranslator); + string path = writer.WriteReport(); + Log.LogMessage(MessageImportance.High, $" Generating report '{path}'"); + var metadata = new Dictionary { ["Format"] = format }; + coverageReportPaths.Add(new TaskItem(path, metadata)); + } + } - public string CoverletMultiTargetFrameworksCurrentTFM { get; set; } + ReportItems = coverageReportPaths.ToArray(); - [Output] - public ITaskItem[] ReportItems { get; set; } + var thresholdTypeFlagQueue = new Queue(); - public CoverageResultTask() + foreach (string thresholdType in ThresholdType.Split(',').Select(t => t.Trim())) { - _logger = new MSBuildLogger(Log); + if (thresholdType.Equals("line", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Line); + } + else if (thresholdType.Equals("branch", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Branch); + } + else if (thresholdType.Equals("method", StringComparison.OrdinalIgnoreCase)) + { + thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Method); + } } - public override bool Execute() + var thresholdTypeFlagValues = new Dictionary(); + if (Threshold.Contains(',')) { - try + IEnumerable thresholdValues = Threshold.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()); + if (thresholdValues.Count() != thresholdTypeFlagQueue.Count) + { + throw new Exception($"Threshold type flag count ({thresholdTypeFlagQueue.Count}) and values count ({thresholdValues.Count()}) doesn't match"); + } + + foreach (string threshold in thresholdValues) + { + if (double.TryParse(threshold, out double value)) { - Console.WriteLine("\nCalculating coverage result..."); - - IFileSystem fileSystem = ServiceProvider.GetService(); - if (InstrumenterState is null || !fileSystem.Exists(InstrumenterState.ItemSpec)) - { - _logger.LogError("Result of instrumentation task not found"); - return false; - } - - Coverage coverage = null; - using (Stream instrumenterStateStream = fileSystem.NewFileStream(InstrumenterState.ItemSpec, FileMode.Open)) - { - IInstrumentationHelper instrumentationHelper = ServiceProvider.GetService(); - // Task.Log is teared down after a task and thus the new MSBuildLogger must be passed to the InstrumentationHelper - // https://github.com/microsoft/msbuild/issues/5153 - instrumentationHelper.SetLogger(_logger); - coverage = new Coverage(CoveragePrepareResult.Deserialize(instrumenterStateStream), _logger, ServiceProvider.GetService(), fileSystem, ServiceProvider.GetService()); - } - - try - { - fileSystem.Delete(InstrumenterState.ItemSpec); - } - catch (Exception ex) - { - // We don't want to block coverage for I/O errors - _logger.LogWarning($"Exception during instrument state deletion, file name '{InstrumenterState.ItemSpec}' exception message '{ex.Message}'"); - } - - CoverageResult result = coverage.GetCoverageResult(); - - string directory = Path.GetDirectoryName(Output); - if (directory == string.Empty) - { - directory = Directory.GetCurrentDirectory(); - } - else if (!Directory.Exists(directory)) - { - Directory.CreateDirectory(directory); - } - - string[] formats = OutputFormat.Split(','); - var coverageReportPaths = new List(formats.Length); - ISourceRootTranslator sourceRootTranslator = ServiceProvider.GetService(); - foreach (string format in formats) - { - IReporter reporter = new ReporterFactory(format).CreateReporter(); - if (reporter == null) - { - throw new Exception($"Specified output format '{format}' is not supported"); - } - - if (reporter.OutputType == ReporterOutputType.Console) - { - // Output to console - Console.WriteLine(" Outputting results to console"); - Console.WriteLine(reporter.Report(result, sourceRootTranslator)); - } - else - { - ReportWriter writer = new(CoverletMultiTargetFrameworksCurrentTFM, - directory, - Output, - reporter, - fileSystem, - ServiceProvider.GetService(), - result, - sourceRootTranslator); - string path = writer.WriteReport(); - var metadata = new Dictionary { ["Format"] = format }; - coverageReportPaths.Add(new TaskItem(path, metadata)); - } - } - - ReportItems = coverageReportPaths.ToArray(); - - var thresholdTypeFlagQueue = new Queue(); - - foreach (string thresholdType in ThresholdType.Split(',').Select(t => t.Trim())) - { - if (thresholdType.Equals("line", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Line); - } - else if (thresholdType.Equals("branch", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Branch); - } - else if (thresholdType.Equals("method", StringComparison.OrdinalIgnoreCase)) - { - thresholdTypeFlagQueue.Enqueue(ThresholdTypeFlags.Method); - } - } - - var thresholdTypeFlagValues = new Dictionary(); - if (Threshold.Contains(',')) - { - IEnumerable thresholdValues = Threshold.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()); - if (thresholdValues.Count() != thresholdTypeFlagQueue.Count) - { - throw new Exception($"Threshold type flag count ({thresholdTypeFlagQueue.Count}) and values count ({thresholdValues.Count()}) doesn't match"); - } - - foreach (string threshold in thresholdValues) - { - if (double.TryParse(threshold, out double value)) - { - thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = value; - } - else - { - throw new Exception($"Invalid threshold value must be numeric"); - } - } - } - else - { - double thresholdValue = double.Parse(Threshold); - - while (thresholdTypeFlagQueue.Any()) - { - thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = thresholdValue; - } - } - - ThresholdStatistic thresholdStat = ThresholdStatistic.Minimum; - if (ThresholdStat.Equals("average", StringComparison.OrdinalIgnoreCase)) - { - thresholdStat = ThresholdStatistic.Average; - } - else if (ThresholdStat.Equals("total", StringComparison.OrdinalIgnoreCase)) - { - thresholdStat = ThresholdStatistic.Total; - } - - var coverageTable = new ConsoleTable("Module", "Line", "Branch", "Method"); - var summary = new CoverageSummary(); - - CoverageDetails linePercentCalculation = summary.CalculateLineCoverage(result.Modules); - CoverageDetails branchPercentCalculation = summary.CalculateBranchCoverage(result.Modules); - CoverageDetails methodPercentCalculation = summary.CalculateMethodCoverage(result.Modules); - - double totalLinePercent = linePercentCalculation.Percent; - double totalBranchPercent = branchPercentCalculation.Percent; - double totalMethodPercent = methodPercentCalculation.Percent; - - double averageLinePercent = linePercentCalculation.AverageModulePercent; - double averageBranchPercent = branchPercentCalculation.AverageModulePercent; - double averageMethodPercent = methodPercentCalculation.AverageModulePercent; - - foreach (KeyValuePair module in result.Modules) - { - double linePercent = summary.CalculateLineCoverage(module.Value).Percent; - double branchPercent = summary.CalculateBranchCoverage(module.Value).Percent; - double methodPercent = summary.CalculateMethodCoverage(module.Value).Percent; - - coverageTable.AddRow(Path.GetFileNameWithoutExtension(module.Key), $"{InvariantFormat(linePercent)}%", $"{InvariantFormat(branchPercent)}%", $"{InvariantFormat(methodPercent)}%"); - } - - Console.WriteLine(); - Console.WriteLine(coverageTable.ToStringAlternative()); - - coverageTable.Columns.Clear(); - coverageTable.Rows.Clear(); - - coverageTable.AddColumn(new[] { "", "Line", "Branch", "Method" }); - coverageTable.AddRow("Total", $"{InvariantFormat(totalLinePercent)}%", $"{InvariantFormat(totalBranchPercent)}%", $"{InvariantFormat(totalMethodPercent)}%"); - coverageTable.AddRow("Average", $"{InvariantFormat(averageLinePercent)}%", $"{InvariantFormat(averageBranchPercent)}%", $"{InvariantFormat(averageMethodPercent)}%"); - - Console.WriteLine(coverageTable.ToStringAlternative()); - - ThresholdTypeFlags thresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStat); - if (thresholdTypeFlags != ThresholdTypeFlags.None) - { - var exceptionMessageBuilder = new StringBuilder(); - if ((thresholdTypeFlags & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine( - $"The {thresholdStat.ToString().ToLower()} line coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Line]}"); - } - - if ((thresholdTypeFlags & ThresholdTypeFlags.Branch) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine( - $"The {thresholdStat.ToString().ToLower()} branch coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Branch]}"); - } - - if ((thresholdTypeFlags & ThresholdTypeFlags.Method) != ThresholdTypeFlags.None) - { - exceptionMessageBuilder.AppendLine( - $"The {thresholdStat.ToString().ToLower()} method coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Method]}"); - } - - throw new Exception(exceptionMessageBuilder.ToString()); - } + thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = value; } - catch (Exception ex) + else { - _logger.LogError(ex); - return false; + throw new Exception($"Invalid threshold value must be numeric"); } + } + } + else + { + double thresholdValue = double.Parse(Threshold); + + while (thresholdTypeFlagQueue.Any()) + { + thresholdTypeFlagValues[thresholdTypeFlagQueue.Dequeue()] = thresholdValue; + } + } + + ThresholdStatistic thresholdStat = ThresholdStatistic.Minimum; + if (ThresholdStat.Equals("average", StringComparison.OrdinalIgnoreCase)) + { + thresholdStat = ThresholdStatistic.Average; + } + else if (ThresholdStat.Equals("total", StringComparison.OrdinalIgnoreCase)) + { + thresholdStat = ThresholdStatistic.Total; + } + + var coverageTable = new ConsoleTable("Module", "Line", "Branch", "Method"); + var summary = new CoverageSummary(); - return true; + CoverageDetails linePercentCalculation = summary.CalculateLineCoverage(result.Modules); + CoverageDetails branchPercentCalculation = summary.CalculateBranchCoverage(result.Modules); + CoverageDetails methodPercentCalculation = summary.CalculateMethodCoverage(result.Modules); + + double totalLinePercent = linePercentCalculation.Percent; + double totalBranchPercent = branchPercentCalculation.Percent; + double totalMethodPercent = methodPercentCalculation.Percent; + + double averageLinePercent = linePercentCalculation.AverageModulePercent; + double averageBranchPercent = branchPercentCalculation.AverageModulePercent; + double averageMethodPercent = methodPercentCalculation.AverageModulePercent; + + foreach (KeyValuePair module in result.Modules) + { + double linePercent = summary.CalculateLineCoverage(module.Value).Percent; + double branchPercent = summary.CalculateBranchCoverage(module.Value).Percent; + double methodPercent = summary.CalculateMethodCoverage(module.Value).Percent; + + coverageTable.AddRow(Path.GetFileNameWithoutExtension(module.Key), $"{InvariantFormat(linePercent)}%", $"{InvariantFormat(branchPercent)}%", $"{InvariantFormat(methodPercent)}%"); } - private static string InvariantFormat(double value) => value.ToString(CultureInfo.InvariantCulture); + Console.WriteLine(); + Console.WriteLine(coverageTable.ToStringAlternative()); + + coverageTable.Columns.Clear(); + coverageTable.Rows.Clear(); + + coverageTable.AddColumn(new[] { "", "Line", "Branch", "Method" }); + coverageTable.AddRow("Total", $"{InvariantFormat(totalLinePercent)}%", $"{InvariantFormat(totalBranchPercent)}%", $"{InvariantFormat(totalMethodPercent)}%"); + coverageTable.AddRow("Average", $"{InvariantFormat(averageLinePercent)}%", $"{InvariantFormat(averageBranchPercent)}%", $"{InvariantFormat(averageMethodPercent)}%"); + + Console.WriteLine(coverageTable.ToStringAlternative()); + + ThresholdTypeFlags thresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStat); + if (thresholdTypeFlags != ThresholdTypeFlags.None) + { + var exceptionMessageBuilder = new StringBuilder(); + if ((thresholdTypeFlags & ThresholdTypeFlags.Line) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine( + $"The {thresholdStat.ToString().ToLower()} line coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Line]}"); + } + + if ((thresholdTypeFlags & ThresholdTypeFlags.Branch) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine( + $"The {thresholdStat.ToString().ToLower()} branch coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Branch]}"); + } + + if ((thresholdTypeFlags & ThresholdTypeFlags.Method) != ThresholdTypeFlags.None) + { + exceptionMessageBuilder.AppendLine( + $"The {thresholdStat.ToString().ToLower()} method coverage is below the specified {thresholdTypeFlagValues[ThresholdTypeFlags.Method]}"); + } + + throw new Exception(exceptionMessageBuilder.ToString()); + } + } + catch (Exception ex) + { + Log.LogErrorFromException(ex, true); + return false; + } + + return true; } + + private static string InvariantFormat(double value) => value.ToString(CultureInfo.InvariantCulture); + } } diff --git a/src/coverlet.msbuild.tasks/InstrumentationTask.cs b/src/coverlet.msbuild.tasks/InstrumentationTask.cs index 9a0506f51..0e5c12126 100644 --- a/src/coverlet.msbuild.tasks/InstrumentationTask.cs +++ b/src/coverlet.msbuild.tasks/InstrumentationTask.cs @@ -16,118 +16,118 @@ namespace Coverlet.MSbuild.Tasks { - public class InstrumentationTask : BaseTask - { - private readonly MSBuildLogger _logger; + public class InstrumentationTask : BaseTask + { + private readonly MSBuildLogger _logger; - [Required] - public string Path { get; set; } + [Required] + public string Path { get; set; } - public string Include { get; set; } + public string Include { get; set; } - public string IncludeDirectory { get; set; } + public string IncludeDirectory { get; set; } - public string Exclude { get; set; } + public string Exclude { get; set; } - public string ExcludeByFile { get; set; } + public string ExcludeByFile { get; set; } - public string ExcludeByAttribute { get; set; } + public string ExcludeByAttribute { get; set; } - public bool IncludeTestAssembly { get; set; } + public bool IncludeTestAssembly { get; set; } - public bool SingleHit { get; set; } + public bool SingleHit { get; set; } - public string MergeWith { get; set; } + public string MergeWith { get; set; } - public bool UseSourceLink { get; set; } + public bool UseSourceLink { get; set; } - public bool SkipAutoProps { get; set; } + public bool SkipAutoProps { get; set; } - public string DoesNotReturnAttribute { get; set; } + public string DoesNotReturnAttribute { get; set; } - public bool DeterministicReport { get; set; } + public bool DeterministicReport { get; set; } - public string ExcludeAssembliesWithoutSources { get; set; } + public string ExcludeAssembliesWithoutSources { get; set; } - [Output] - public ITaskItem InstrumenterState { get; set; } + [Output] + public ITaskItem InstrumenterState { get; set; } - public InstrumentationTask() - { - _logger = new MSBuildLogger(Log); - } + public InstrumentationTask() + { + _logger = new MSBuildLogger(Log); + } - private void AttachDebugger() - { - if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_MSBUILD_INSTRUMENTATIONTASK_DEBUG"), out int result) && result == 1) - { - Debugger.Launch(); - Debugger.Break(); - } - } - - public override bool Execute() + private void AttachDebugger() + { + if (int.TryParse(Environment.GetEnvironmentVariable("COVERLET_MSBUILD_INSTRUMENTATIONTASK_DEBUG"), out int result) && result == 1) + { + Debugger.Launch(); + Debugger.Break(); + } + } + + public override bool Execute() + { + AttachDebugger(); + + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => _logger); + serviceCollection.AddTransient(); + // We cache resolutions + serviceCollection.AddSingleton(serviceProvider => + new SourceRootTranslator(Path, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); + // We need to keep singleton/static semantics + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + ServiceProvider = serviceCollection.BuildServiceProvider(); + + try + { + IFileSystem fileSystem = ServiceProvider.GetService(); + + var parameters = new CoverageParameters { - AttachDebugger(); - - IServiceCollection serviceCollection = new ServiceCollection(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => _logger); - serviceCollection.AddTransient(); - // We cache resolutions - serviceCollection.AddSingleton(serviceProvider => - new SourceRootTranslator(Path, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); - // We need to keep singleton/static semantics - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); - - ServiceProvider = serviceCollection.BuildServiceProvider(); - - try - { - IFileSystem fileSystem = ServiceProvider.GetService(); - - var parameters = new CoverageParameters - { - IncludeFilters = Include?.Split(','), - IncludeDirectories = IncludeDirectory?.Split(','), - ExcludeFilters = Exclude?.Split(','), - ExcludedSourceFiles = ExcludeByFile?.Split(','), - ExcludeAttributes = ExcludeByAttribute?.Split(','), - IncludeTestAssembly = IncludeTestAssembly, - SingleHit = SingleHit, - MergeWith = MergeWith, - UseSourceLink = UseSourceLink, - SkipAutoProps = SkipAutoProps, - DeterministicReport = DeterministicReport, - ExcludeAssembliesWithoutSources = ExcludeAssembliesWithoutSources, - DoesNotReturnAttributes = DoesNotReturnAttribute?.Split(',') - }; - - var coverage = new Coverage(Path, - parameters, - _logger, - ServiceProvider.GetService(), - ServiceProvider.GetService(), - ServiceProvider.GetService(), - ServiceProvider.GetService()); - - CoveragePrepareResult prepareResult = coverage.PrepareModules(); - InstrumenterState = new TaskItem(System.IO.Path.GetTempFileName()); - using Stream instrumentedStateFile = fileSystem.NewFileStream(InstrumenterState.ItemSpec, FileMode.Open, FileAccess.Write); - using Stream serializedState = CoveragePrepareResult.Serialize(prepareResult); - serializedState.CopyTo(instrumentedStateFile); - } - catch (Exception ex) - { - _logger.LogError(ex); - return false; - } - - return true; - } + IncludeFilters = Include?.Split(','), + IncludeDirectories = IncludeDirectory?.Split(','), + ExcludeFilters = Exclude?.Split(','), + ExcludedSourceFiles = ExcludeByFile?.Split(','), + ExcludeAttributes = ExcludeByAttribute?.Split(','), + IncludeTestAssembly = IncludeTestAssembly, + SingleHit = SingleHit, + MergeWith = MergeWith, + UseSourceLink = UseSourceLink, + SkipAutoProps = SkipAutoProps, + DeterministicReport = DeterministicReport, + ExcludeAssembliesWithoutSources = ExcludeAssembliesWithoutSources, + DoesNotReturnAttributes = DoesNotReturnAttribute?.Split(',') + }; + + var coverage = new Coverage(Path, + parameters, + _logger, + ServiceProvider.GetService(), + ServiceProvider.GetService(), + ServiceProvider.GetService(), + ServiceProvider.GetService()); + + CoveragePrepareResult prepareResult = coverage.PrepareModules(); + string randomPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName()); + InstrumenterState = new TaskItem(randomPath); + using Stream instrumentedStateFile = fileSystem.NewFileStream(InstrumenterState.ItemSpec, FileMode.CreateNew, FileAccess.Write); + using Stream serializedState = CoveragePrepareResult.Serialize(prepareResult); + serializedState.CopyTo(instrumentedStateFile); + } + catch (Exception ex) + { + _logger.LogError(ex); + return false; + } + + return true; } + } } diff --git a/src/coverlet.msbuild.tasks/MSBuildLogger.cs b/src/coverlet.msbuild.tasks/MSBuildLogger.cs index 33fe3afaf..b9849d463 100644 --- a/src/coverlet.msbuild.tasks/MSBuildLogger.cs +++ b/src/coverlet.msbuild.tasks/MSBuildLogger.cs @@ -4,27 +4,28 @@ using System; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -using ILogger = Coverlet.Core.Abstractions.ILogger; namespace Coverlet.MSbuild.Tasks { - class MSBuildLogger : ILogger - { - private const string LogPrefix = "[coverlet] "; + class MSBuildLogger : Coverlet.Core.Abstractions.ILogger + { + private const string LogPrefix = "[coverlet] "; - private readonly TaskLoggingHelper _log; + private readonly TaskLoggingHelper _log; - public MSBuildLogger(TaskLoggingHelper log) => _log = log; + public MSBuildLogger(TaskLoggingHelper log) => _log = log; - public void LogVerbose(string message) => _log.LogMessage(MessageImportance.Low, $"{LogPrefix}{message}"); + public void LogVerbose(string message) => _log.LogMessage(MessageImportance.Low, $"{LogPrefix}{message}"); - // We use `MessageImportance.High` because with `MessageImportance.Normal` doesn't show anything - public void LogInformation(string message, bool important = false) => _log.LogMessage(MessageImportance.High, $"{LogPrefix}{message}"); + // We use `MessageImportance.High` because with `MessageImportance.Normal` doesn't show anything + public void LogInformation(string message, bool important = false) => _log.LogMessage(MessageImportance.High, $"{LogPrefix}{message}"); - public void LogWarning(string message) => _log.LogWarning($"{LogPrefix}{message}"); + public void LogWarning(string message) => _log.LogWarning($"{LogPrefix}{message}"); - public void LogError(string message) => _log.LogError($"{LogPrefix}{message}"); + public void LogWarning(Exception exception) => _log.LogWarningFromException(exception, true); - public void LogError(Exception exception) => _log.LogErrorFromException(exception, true); - } + public void LogError(string message) => _log.LogError($"{LogPrefix}{message}"); + + public void LogError(Exception exception) => _log.LogErrorFromException(exception, true); + } } diff --git a/src/coverlet.msbuild.tasks/Properties/AssemblyInfo.cs b/src/coverlet.msbuild.tasks/Properties/AssemblyInfo.cs index 4ff5754c3..f2950e4b8 100644 --- a/src/coverlet.msbuild.tasks/Properties/AssemblyInfo.cs +++ b/src/coverlet.msbuild.tasks/Properties/AssemblyInfo.cs @@ -1,8 +1,9 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; using System.Runtime.CompilerServices; [assembly: AssemblyKeyFile("coverlet.msbuild.tasks.snk")] -[assembly: InternalsVisibleTo("coverlet.core.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] \ No newline at end of file +[assembly: InternalsVisibleTo("coverlet.core.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] +[assembly: InternalsVisibleTo("coverlet.msbuild.tasks.tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010071b1583d63637a225f3f640252fee7130f0f3f2127d75025c1c3ee2d6dfc79a4950919268e0784d7ff54b0eadd8e4762e3e150da422e20e091eb0811d9d84e1779d5b95e349d5428aebb16e82e081bdf805926c5a9eb2094aaed9d36442de024264976a8835c7d6923047cf2f745e8f0ded2332f8980acd390f725224d976ed8")] diff --git a/src/coverlet.msbuild.tasks/ReportWriter.cs b/src/coverlet.msbuild.tasks/ReportWriter.cs index 8b72b9767..2f5404295 100644 --- a/src/coverlet.msbuild.tasks/ReportWriter.cs +++ b/src/coverlet.msbuild.tasks/ReportWriter.cs @@ -7,51 +7,50 @@ namespace Coverlet.MSbuild.Tasks { - internal class ReportWriter + internal class ReportWriter + { + private readonly string _coverletMultiTargetFrameworksCurrentTFM; + private readonly string _directory; + private readonly string _output; + private readonly IReporter _reporter; + private readonly IFileSystem _fileSystem; + private readonly ISourceRootTranslator _sourceRootTranslator; + private readonly CoverageResult _result; + + public ReportWriter(string coverletMultiTargetFrameworksCurrentTFM, string directory, string output, + IReporter reporter, IFileSystem fileSystem, CoverageResult result, ISourceRootTranslator sourceRootTranslator) + => (_coverletMultiTargetFrameworksCurrentTFM, _directory, _output, _reporter, _fileSystem, _result, _sourceRootTranslator) = + (coverletMultiTargetFrameworksCurrentTFM, directory, output, reporter, fileSystem, result, sourceRootTranslator); + + public string WriteReport() { - private readonly string _coverletMultiTargetFrameworksCurrentTFM; - private readonly string _directory; - private readonly string _output; - private readonly IReporter _reporter; - private readonly IFileSystem _fileSystem; - private readonly IConsole _console; - private readonly ISourceRootTranslator _sourceRootTranslator; - private readonly CoverageResult _result; - - public ReportWriter(string coverletMultiTargetFrameworksCurrentTFM, string directory, string output, - IReporter reporter, IFileSystem fileSystem, IConsole console, CoverageResult result, ISourceRootTranslator sourceRootTranslator) - => (_coverletMultiTargetFrameworksCurrentTFM, _directory, _output, _reporter, _fileSystem, _console, _result, _sourceRootTranslator) = - (coverletMultiTargetFrameworksCurrentTFM, directory, output, reporter, fileSystem, console, result, sourceRootTranslator); - - public string WriteReport() - { - string filename = Path.GetFileName(_output); - - string separatorPoint = string.IsNullOrEmpty(_coverletMultiTargetFrameworksCurrentTFM) ? "" : "."; - - if (filename == string.Empty) - { - // empty filename for instance only directory is passed to CoverletOutput c:\reportpath - // c:\reportpath\coverage.reportedextension - filename = $"coverage.{_coverletMultiTargetFrameworksCurrentTFM}{separatorPoint}{_reporter.Extension}"; - } - else if (Path.HasExtension(filename)) - { - // filename with extension for instance c:\reportpath\file.ext - // we keep user specified name - filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}"; - } - else - { - // filename without extension for instance c:\reportpath\file - // c:\reportpath\file.reportedextension - filename = $"{filename}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}.{_reporter.Extension}"; - } - - string report = Path.Combine(_directory, filename); - _console.WriteLine($" Generating report '{report}'"); - _fileSystem.WriteAllText(report, _reporter.Report(_result, _sourceRootTranslator)); - return report; - } + string filename = Path.GetFileName(_output); + + string separatorPoint = string.IsNullOrEmpty(_coverletMultiTargetFrameworksCurrentTFM) ? "" : "."; + + if (filename == string.Empty) + { + // empty filename for instance only directory is passed to CoverletOutput 'c:/reportpath/' + // note: use always '/' and not backslash => 'c:\reportpath\coverage.cobertura.xml' + filename = $"coverage.{_coverletMultiTargetFrameworksCurrentTFM}{separatorPoint}{_reporter.Extension}"; + } + else if (Path.HasExtension(filename)) + { + // filename with extension for instance c:\reportpath\file.ext + // we keep user specified name + filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}"; + } + else + { + // filename without extension for instance c:\reportpath\file + // c:\reportpath\file.reportedextension + filename = $"{filename}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}.{_reporter.Extension}"; + } + + string report = Path.Combine(Path.GetFullPath(_directory), filename); + _fileSystem.WriteAllText(report, _reporter.Report(_result, _sourceRootTranslator)); + + return report; } + } } diff --git a/src/coverlet.msbuild.tasks/coverlet.msbuild.props b/src/coverlet.msbuild.tasks/coverlet.msbuild.props index 9356dbdf7..9403e7702 100644 --- a/src/coverlet.msbuild.tasks/coverlet.msbuild.props +++ b/src/coverlet.msbuild.tasks/coverlet.msbuild.props @@ -19,6 +19,6 @@ - $(MSBuildThisFileDirectory) + $(MSBuildThisFileDirectory)..\tasks\netstandard2.0\ diff --git a/src/coverlet.msbuild.tasks/coverlet.msbuild.targets b/src/coverlet.msbuild.tasks/coverlet.msbuild.targets index ed288de59..e8bbfac20 100644 --- a/src/coverlet.msbuild.tasks/coverlet.msbuild.targets +++ b/src/coverlet.msbuild.tasks/coverlet.msbuild.targets @@ -6,7 +6,7 @@ <_CoverletSdkNETCoreSdkVersion>$(NETCoreSdkVersion) <_CoverletSdkNETCoreSdkVersion Condition="$(_CoverletSdkNETCoreSdkVersion.Contains('-'))">$(_CoverletSdkNETCoreSdkVersion.Split('-')[0]) - <_CoverletSdkMinVersionWithDependencyTarget>3.1.300 + <_CoverletSdkMinVersionWithDependencyTarget>6.0.100 <_CoverletSourceRootTargetName>CoverletGetPathMap <_CoverletSourceRootTargetName Condition="'$([System.Version]::Parse($(_CoverletSdkNETCoreSdkVersion)).CompareTo($([System.Version]::Parse($(_CoverletSdkMinVersionWithDependencyTarget)))))' >= '0' ">InitializeSourceRootMappedPaths @@ -35,7 +35,7 @@ - + - + <_coverletMultiTargetFrameworksCurrentTFM Condition="'$(TargetFrameworks)' != ''" >$(TargetFramework) diff --git a/src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj b/src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj index 80cbb6b21..17332caa6 100644 --- a/src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj +++ b/src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj @@ -1,20 +1,24 @@ - + Library - netstandard2.0 + netstandard2.0 coverlet.msbuild.tasks true $(TargetsForTfmSpecificContentInPackage);PackBuildOutputs build false - true + true + true + false + $(NoWarn);NU5100;NU5129;NU5127 @@ -30,15 +34,17 @@ true Coverlet is a cross platform code coverage library for .NET, with support for line, branch and method coverage. coverage testing unit-test lcov opencover quality + MSBuildIntegration.md + https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md git - + - + @@ -46,21 +52,25 @@ - - - - - + + Always + + + Always + + + true + - + - - - - - + + + + + diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 670a745aa..4001de71b 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -3,5 +3,6 @@ true + $(NoWarn);NU1301;IDE0007;IDE0008 - \ No newline at end of file + diff --git a/test/Directory.Build.targets b/test/Directory.Build.targets index 1aaec2f16..b181fcf29 100644 --- a/test/Directory.Build.targets +++ b/test/Directory.Build.targets @@ -14,8 +14,8 @@ This is required when the coverlet.msbuild imports are made in their src directory (so that msbuild eval works even before they are built) so that they can still find the tooling that will be built by the build. --> - $(RepoRoot)src\coverlet.msbuild.tasks\bin\$(Configuration)\netstandard2.0\ + $(RepoRoot)artifacts\bin\coverlet.msbuild.tasks\$(Configuration.ToLowerInvariant())_netstandard2.0\ - \ No newline at end of file + diff --git a/test/coverlet.collector.tests/AttachmentManagerTests.cs b/test/coverlet.collector.tests/AttachmentManagerTests.cs index 9e021212d..bfa5d5f82 100644 --- a/test/coverlet.collector.tests/AttachmentManagerTests.cs +++ b/test/coverlet.collector.tests/AttachmentManagerTests.cs @@ -4,118 +4,118 @@ using System; using System.ComponentModel; using System.IO; +using Coverlet.Collector.DataCollection; +using Coverlet.Collector.Utilities; +using Coverlet.Collector.Utilities.Interfaces; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; -using Xunit; using Moq; -using Coverlet.Collector.Utilities; -using Coverlet.Collector.Utilities.Interfaces; -using Coverlet.Collector.DataCollection; +using Xunit; namespace Coverlet.Collector.Tests { - public class AttachmentManagerTests + public class AttachmentManagerTests + { + private AttachmentManager _attachmentManager; + private readonly Mock _mockDataCollectionSink; + private readonly DataCollectionContext _dataCollectionContext; + private readonly TestPlatformLogger _testPlatformLogger; + private readonly TestPlatformEqtTrace _eqtTrace; + private readonly Mock _mockFileHelper; + private readonly Mock _mockDirectoryHelper; + private readonly Mock _mockCountDownEvent; + private readonly Mock _mockDataCollectionLogger; + + public AttachmentManagerTests() + { + _mockDataCollectionSink = new Mock(); + _mockDataCollectionLogger = new Mock(); + var testcase = new TestCase { Id = Guid.NewGuid() }; + _dataCollectionContext = new DataCollectionContext(testcase); + _testPlatformLogger = new TestPlatformLogger(_mockDataCollectionLogger.Object, _dataCollectionContext); + _eqtTrace = new TestPlatformEqtTrace(); + _mockFileHelper = new Mock(); + _mockDirectoryHelper = new Mock(); + _mockCountDownEvent = new Mock(); + + _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, + _eqtTrace, @"E:\temp", _mockFileHelper.Object, _mockDirectoryHelper.Object, _mockCountDownEvent.Object); + } + + [Fact] + public void SendCoverageReportShouldSaveReportToFile() + { + string coverageReport = "" + + "" + + "" + + "" + + ""; + + _attachmentManager.SendCoverageReport(coverageReport, "report.cobertura.xml"); + _mockFileHelper.Verify(x => x.WriteAllText(It.Is(y => y.Contains(@"report.cobertura.xml")), coverageReport), Times.Once); + } + + [Fact] + public void SendCoverageReportShouldThrowExceptionWhenFailedToSaveReportToFile() + { + _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, + _eqtTrace, @"E:\temp", _mockFileHelper.Object, _mockDirectoryHelper.Object, _mockCountDownEvent.Object); + + string coverageReport = "" + + "" + + "" + + "" + + ""; + + string message = Assert.Throws(() => _attachmentManager.SendCoverageReport(coverageReport, null)).Message; + Assert.Contains("CoverletCoverageDataCollector: Failed to save coverage report", message); + } + + [Fact] + public void SendCoverageReportShouldSendAttachmentToTestPlatform() + { + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, + _eqtTrace, directory.ToString(), new FileHelper(), _mockDirectoryHelper.Object, _mockCountDownEvent.Object); + + string coverageReport = "" + + "" + + "" + + "" + + ""; + + _attachmentManager.SendCoverageReport(coverageReport, "report.cobertura.xml"); + + _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny())); + + directory.Delete(true); + } + + [Fact] + public void OnDisposeAttachmentManagerShouldCleanUpReportDirectory() + { + var mockDirectoryHelper = new Mock(); + mockDirectoryHelper.Setup(x => x.Exists(It.Is(y => y.Contains(@"E:\temp")))).Returns(true); + using (var attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, _eqtTrace, @"E:\temp", _mockFileHelper.Object, mockDirectoryHelper.Object, _mockCountDownEvent.Object)) + { + _mockDataCollectionSink.Raise(x => x.SendFileCompleted += null, new AsyncCompletedEventArgs(null, false, null)); + } + + mockDirectoryHelper.Verify(x => x.Delete(It.Is(y => y.Contains(@"E:\temp")), true), Times.Once); + } + + [Fact] + public void OnDisposeAttachmentManagerShouldThrowCoverletDataCollectorExceptionIfUnableToCleanUpReportDirectory() { - private AttachmentManager _attachmentManager; - private readonly Mock _mockDataCollectionSink; - private readonly DataCollectionContext _dataCollectionContext; - private readonly TestPlatformLogger _testPlatformLogger; - private readonly TestPlatformEqtTrace _eqtTrace; - private readonly Mock _mockFileHelper; - private readonly Mock _mockDirectoryHelper; - private readonly Mock _mockCountDownEvent; - private readonly Mock _mockDataCollectionLogger; - - public AttachmentManagerTests() - { - _mockDataCollectionSink = new Mock(); - _mockDataCollectionLogger = new Mock(); - var testcase = new TestCase { Id = Guid.NewGuid() }; - _dataCollectionContext = new DataCollectionContext(testcase); - _testPlatformLogger = new TestPlatformLogger(_mockDataCollectionLogger.Object, _dataCollectionContext); - _eqtTrace = new TestPlatformEqtTrace(); - _mockFileHelper = new Mock(); - _mockDirectoryHelper = new Mock(); - _mockCountDownEvent = new Mock(); - - _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, - _eqtTrace, @"E:\temp", _mockFileHelper.Object, _mockDirectoryHelper.Object, _mockCountDownEvent.Object); - } - - [Fact] - public void SendCoverageReportShouldSaveReportToFile() - { - string coverageReport = "" - + "" - + "" - + "" - + ""; - - _attachmentManager.SendCoverageReport(coverageReport, "report.cobertura.xml"); - _mockFileHelper.Verify(x => x.WriteAllText(It.Is(y => y.Contains(@"report.cobertura.xml")), coverageReport), Times.Once); - } - - [Fact] - public void SendCoverageReportShouldThrowExceptionWhenFailedToSaveReportToFile() - { - _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, - _eqtTrace, @"E:\temp", _mockFileHelper.Object, _mockDirectoryHelper.Object, _mockCountDownEvent.Object); - - string coverageReport = "" - + "" - + "" - + "" - + ""; - - string message = Assert.Throws(() => _attachmentManager.SendCoverageReport(coverageReport, null)).Message; - Assert.Contains("CoverletCoverageDataCollector: Failed to save coverage report", message); - } - - [Fact] - public void SendCoverageReportShouldSendAttachmentToTestPlatform() - { - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); - _attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, - _eqtTrace, directory.ToString(), new FileHelper(), _mockDirectoryHelper.Object, _mockCountDownEvent.Object); - - string coverageReport = "" - + "" - + "" - + "" - + ""; - - _attachmentManager.SendCoverageReport(coverageReport, "report.cobertura.xml"); - - _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny())); - - directory.Delete(true); - } - - [Fact] - public void OnDisposeAttachmentManagerShouldCleanUpReportDirectory() - { - var mockDirectoryHelper = new Mock(); - mockDirectoryHelper.Setup(x => x.Exists(It.Is(y => y.Contains(@"E:\temp")))).Returns(true); - using (var attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, _eqtTrace, @"E:\temp", _mockFileHelper.Object, mockDirectoryHelper.Object, _mockCountDownEvent.Object)) - { - _mockDataCollectionSink.Raise(x => x.SendFileCompleted += null, new AsyncCompletedEventArgs(null, false, null)); - } - - mockDirectoryHelper.Verify(x => x.Delete(It.Is(y => y.Contains(@"E:\temp")), true), Times.Once); - } - - [Fact] - public void OnDisposeAttachmentManagerShouldThrowCoverletDataCollectorExceptionIfUnableToCleanUpReportDirectory() - { - var mockDirectoryHelper = new Mock(); - mockDirectoryHelper.Setup(x => x.Exists(It.Is(y => y.Contains(@"E:\temp")))).Returns(true); - mockDirectoryHelper.Setup(x => x.Delete(It.Is(y => y.Contains(@"E:\temp")), true)).Throws(new FileNotFoundException()); - using (var attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, _eqtTrace, @"E:\temp", _mockFileHelper.Object, mockDirectoryHelper.Object, _mockCountDownEvent.Object)) - { - _mockDataCollectionSink.Raise(x => x.SendFileCompleted += null, new AsyncCompletedEventArgs(null, false, null)); - } - _mockDataCollectionLogger.Verify(x => x.LogWarning(_dataCollectionContext, - It.Is(y => y.Contains("CoverletDataCollectorException: CoverletCoverageDataCollector: Failed to cleanup report directory"))), Times.AtLeastOnce); - } + var mockDirectoryHelper = new Mock(); + mockDirectoryHelper.Setup(x => x.Exists(It.Is(y => y.Contains(@"E:\temp")))).Returns(true); + mockDirectoryHelper.Setup(x => x.Delete(It.Is(y => y.Contains(@"E:\temp")), true)).Throws(new FileNotFoundException()); + using (var attachmentManager = new AttachmentManager(_mockDataCollectionSink.Object, _dataCollectionContext, _testPlatformLogger, _eqtTrace, @"E:\temp", _mockFileHelper.Object, mockDirectoryHelper.Object, _mockCountDownEvent.Object)) + { + _mockDataCollectionSink.Raise(x => x.SendFileCompleted += null, new AsyncCompletedEventArgs(null, false, null)); + } + _mockDataCollectionLogger.Verify(x => x.LogWarning(_dataCollectionContext, + It.Is(y => y.Contains("CoverletDataCollectorException: CoverletCoverageDataCollector: Failed to cleanup report directory"))), Times.AtLeastOnce); } + } } diff --git a/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs b/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs index 6bb1af73b..1bf60d8a0 100644 --- a/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs +++ b/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs @@ -6,277 +6,277 @@ using System.IO; using System.Linq; using System.Xml; -using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; -using Moq; -using Microsoft.VisualStudio.TestPlatform.ObjectModel; -using Coverlet.Core; -using Coverlet.Collector.Utilities.Interfaces; -using Coverlet.Collector.Utilities; -using Xunit; using Coverlet.Collector.DataCollection; -using Coverlet.Core.Reporters; +using Coverlet.Collector.Utilities; +using Coverlet.Collector.Utilities.Interfaces; +using Coverlet.Core; using Coverlet.Core.Abstractions; using Coverlet.Core.Helpers; +using Coverlet.Core.Reporters; using Coverlet.Core.Symbols; using Microsoft.Extensions.DependencyInjection; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; +using Moq; +using Xunit; namespace Coverlet.Collector.Tests { - public class CoverletCoverageDataCollectorTests + public class CoverletCoverageDataCollectorTests + { + private readonly DataCollectionEnvironmentContext _context; + private CoverletCoverageCollector _coverletCoverageDataCollector; + private readonly DataCollectionContext _dataCollectionContext; + private readonly Mock _mockDataCollectionEvents; + private readonly Mock _mockDataCollectionSink; + private readonly Mock _mockCoverageWrapper; + private readonly Mock _mockCountDownEventFactory; + private XmlElement _configurationElement; + private readonly Mock _mockLogger; + private readonly Mock _mockAssemblyAdapter; + + public CoverletCoverageDataCollectorTests() + { + _mockDataCollectionEvents = new Mock(); + _mockDataCollectionSink = new Mock(); + _mockLogger = new Mock(); + _configurationElement = null; + + var testcase = new TestCase { Id = Guid.NewGuid() }; + _dataCollectionContext = new DataCollectionContext(testcase); + _context = new DataCollectionEnvironmentContext(_dataCollectionContext); + _mockCoverageWrapper = new Mock(); + _mockCountDownEventFactory = new Mock(); + _mockCountDownEventFactory.Setup(def => def.Create(It.IsAny(), It.IsAny())).Returns(new Mock().Object); + _mockAssemblyAdapter = new Mock(); + _mockAssemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("abc"); + } + + [Fact] + public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings() + { + Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => + { + IServiceCollection serviceCollection = new ServiceCollection(); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); + serviceCollection.AddTransient(_ => fileSystem.Object); + + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); + serviceCollection.AddSingleton(); + return serviceCollection; + }; + _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); + _coverletCoverageDataCollector.Initialize( + _configurationElement, + _mockDataCollectionEvents.Object, + _mockDataCollectionSink.Object, + _mockLogger.Object, + _context); + IDictionary sessionStartProperties = new Dictionary(); + + sessionStartProperties.Add("TestSources", new List { "abc.dll" }); + + _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); + + _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); + } + + [Fact] + public void OnSessionStartShouldPrepareModulesForCoverage() + { + Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => + { + IServiceCollection serviceCollection = new ServiceCollection(); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); + serviceCollection.AddTransient(_ => fileSystem.Object); + + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); + serviceCollection.AddSingleton(); + return serviceCollection; + }; + _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); + _coverletCoverageDataCollector.Initialize( + _configurationElement, + _mockDataCollectionEvents.Object, + _mockDataCollectionSink.Object, + null, + _context); + IDictionary sessionStartProperties = new Dictionary(); + IInstrumentationHelper instrumentationHelper = + new InstrumentationHelper(new Mock().Object, + new Mock().Object, + new Mock().Object, + new Mock().Object, + new Mock().Object); + + var parameters = new CoverageParameters + { + IncludeFilters = null, + IncludeDirectories = null, + ExcludedSourceFiles = null, + ExcludeAttributes = null, + IncludeTestAssembly = true, + SingleHit = true, + MergeWith = "abc.json", + UseSourceLink = true + }; + + var coverage = new Coverage("abc.dll", parameters, It.IsAny(), instrumentationHelper, new Mock().Object, new Mock().Object, new Mock().Object); + + sessionStartProperties.Add("TestSources", new List { "abc.dll" }); + _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(coverage); + + _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); + + _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is(y => y.TestModule.Contains("abc.dll")), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); + _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny()), Times.Once); + } + + [Fact] + public void OnSessionEndShouldSendGetCoverageReportToTestPlatform() + { + Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => + { + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); + serviceCollection.AddSingleton(); + return serviceCollection; + }; + _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); + _coverletCoverageDataCollector.Initialize( + _configurationElement, + _mockDataCollectionEvents.Object, + _mockDataCollectionSink.Object, + _mockLogger.Object, + _context); + + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + + IDictionary sessionStartProperties = new Dictionary(); + sessionStartProperties.Add("TestSources", new List { Path.Combine(directory.FullName, Path.GetFileName(module)) }); + + _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); + _mockDataCollectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); + + _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny()), Times.Once); + + directory.Delete(true); + } + + [Theory] + [InlineData("noValidFormat", 0)] + [InlineData("json,cobertura", 2)] + [InlineData("json,cobertura,lcov", 3)] + public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount) + { + Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => + { + IServiceCollection serviceCollection = new ServiceCollection(); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "Test"); + serviceCollection.AddTransient(_ => fileSystem.Object); + + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); + serviceCollection.AddSingleton(); + return serviceCollection; + }; + _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); + + IList reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList(); + var mockDataCollectionSink = new Mock(); + mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny())).Callback(fti => + { + reporters.Remove(reporters.First(x => + Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension)) + ); + }); + + var doc = new XmlDocument(); + XmlElement root = doc.CreateElement("Configuration"); + XmlElement element = doc.CreateElement("Format"); + element.AppendChild(doc.CreateTextNode(formats)); + root.AppendChild(element); + + _configurationElement = root; + + _coverletCoverageDataCollector.Initialize( + _configurationElement, + _mockDataCollectionEvents.Object, + mockDataCollectionSink.Object, + _mockLogger.Object, + _context); + + var sessionStartProperties = new Dictionary { { "TestSources", new List { "Test" } } }; + + _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); + _mockDataCollectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); + + mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny()), Times.Exactly(sendReportsCount)); + Assert.Empty(reporters); + } + + [Fact] + public void OnSessionStartShouldLogWarningIfInstrumentationFailed() { - private readonly DataCollectionEnvironmentContext _context; - private CoverletCoverageCollector _coverletCoverageDataCollector; - private readonly DataCollectionContext _dataCollectionContext; - private readonly Mock _mockDataCollectionEvents; - private readonly Mock _mockDataCollectionSink; - private readonly Mock _mockCoverageWrapper; - private readonly Mock _mockCountDownEventFactory; - private XmlElement _configurationElement; - private readonly Mock _mockLogger; - private readonly Mock _mockAssemblyAdapter; - - public CoverletCoverageDataCollectorTests() - { - _mockDataCollectionEvents = new Mock(); - _mockDataCollectionSink = new Mock(); - _mockLogger = new Mock(); - _configurationElement = null; - - var testcase = new TestCase { Id = Guid.NewGuid() }; - _dataCollectionContext = new DataCollectionContext(testcase); - _context = new DataCollectionEnvironmentContext(_dataCollectionContext); - _mockCoverageWrapper = new Mock(); - _mockCountDownEventFactory = new Mock(); - _mockCountDownEventFactory.Setup(def => def.Create(It.IsAny(), It.IsAny())).Returns(new Mock().Object); - _mockAssemblyAdapter = new Mock(); - _mockAssemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("abc"); - } - - [Fact] - public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings() - { - Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => - { - IServiceCollection serviceCollection = new ServiceCollection(); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); - serviceCollection.AddTransient(_ => fileSystem.Object); - - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); - serviceCollection.AddSingleton(); - return serviceCollection; - }; - _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); - _coverletCoverageDataCollector.Initialize( - _configurationElement, - _mockDataCollectionEvents.Object, - _mockDataCollectionSink.Object, - _mockLogger.Object, - _context); - IDictionary sessionStartProperties = new Dictionary(); - - sessionStartProperties.Add("TestSources", new List { "abc.dll" }); - - _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); - - _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); - } - - [Fact] - public void OnSessionStartShouldPrepareModulesForCoverage() - { - Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => - { - IServiceCollection serviceCollection = new ServiceCollection(); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); - serviceCollection.AddTransient(_ => fileSystem.Object); - - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); - serviceCollection.AddSingleton(); - return serviceCollection; - }; - _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); - _coverletCoverageDataCollector.Initialize( - _configurationElement, - _mockDataCollectionEvents.Object, - _mockDataCollectionSink.Object, - null, - _context); - IDictionary sessionStartProperties = new Dictionary(); - IInstrumentationHelper instrumentationHelper = - new InstrumentationHelper(new Mock().Object, - new Mock().Object, - new Mock().Object, - new Mock().Object, - new Mock().Object); - - var parameters = new CoverageParameters - { - IncludeFilters = null, - IncludeDirectories = null, - ExcludedSourceFiles = null, - ExcludeAttributes = null, - IncludeTestAssembly = true, - SingleHit = true, - MergeWith = "abc.json", - UseSourceLink = true - }; - - var coverage = new Coverage("abc.dll", parameters, It.IsAny(), instrumentationHelper, new Mock().Object, new Mock().Object, new Mock().Object); - - sessionStartProperties.Add("TestSources", new List { "abc.dll" }); - _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(coverage); - - _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); - - _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is(y => y.TestModule.Contains("abc.dll")), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); - _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny()), Times.Once); - } - - [Fact] - public void OnSessionEndShouldSendGetCoverageReportToTestPlatform() - { - Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => - { - IServiceCollection serviceCollection = new ServiceCollection(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); - serviceCollection.AddSingleton(); - return serviceCollection; - }; - _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); - _coverletCoverageDataCollector.Initialize( - _configurationElement, - _mockDataCollectionEvents.Object, - _mockDataCollectionSink.Object, - _mockLogger.Object, - _context); - - string module = GetType().Assembly.Location; - string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); - - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); - - File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); - File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); - - IDictionary sessionStartProperties = new Dictionary(); - sessionStartProperties.Add("TestSources", new List { Path.Combine(directory.FullName, Path.GetFileName(module)) }); - - _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); - _mockDataCollectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); - - _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny()), Times.Once); - - directory.Delete(true); - } - - [Theory] - [InlineData("noValidFormat", 0)] - [InlineData("json,cobertura", 2)] - [InlineData("json,cobertura,lcov", 3)] - public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount) - { - Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => - { - IServiceCollection serviceCollection = new ServiceCollection(); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "Test"); - serviceCollection.AddTransient(_ => fileSystem.Object); - - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); - serviceCollection.AddSingleton(); - return serviceCollection; - }; - _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); - - IList reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList(); - var mockDataCollectionSink = new Mock(); - mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny())).Callback(fti => - { - reporters.Remove(reporters.First(x => - Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension)) - ); - }); - - var doc = new XmlDocument(); - XmlElement root = doc.CreateElement("Configuration"); - XmlElement element = doc.CreateElement("Format"); - element.AppendChild(doc.CreateTextNode(formats)); - root.AppendChild(element); - - _configurationElement = root; - - _coverletCoverageDataCollector.Initialize( - _configurationElement, - _mockDataCollectionEvents.Object, - mockDataCollectionSink.Object, - _mockLogger.Object, - _context); - - var sessionStartProperties = new Dictionary { { "TestSources", new List { "Test" } } }; - - _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); - _mockDataCollectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); - - mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny()), Times.Exactly(sendReportsCount)); - Assert.Empty(reporters); - } - - [Fact] - public void OnSessionStartShouldLogWarningIfInstrumentationFailed() - { - Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => - { - IServiceCollection serviceCollection = new ServiceCollection(); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); - serviceCollection.AddTransient(_ => fileSystem.Object); - - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); - serviceCollection.AddSingleton(); - return serviceCollection; - }; - _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); - _coverletCoverageDataCollector.Initialize( - _configurationElement, - _mockDataCollectionEvents.Object, - _mockDataCollectionSink.Object, - _mockLogger.Object, - _context); - IDictionary sessionStartProperties = new Dictionary(); - - sessionStartProperties.Add("TestSources", new List { "abc.dll" }); - - _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny())).Throws(new FileNotFoundException()); - - _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); - - _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext, - It.Is(y => y.Contains("CoverletDataCollectorException")))); - } + Func serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => + { + IServiceCollection serviceCollection = new ServiceCollection(); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string testLib) => testLib == "abc.dll"); + serviceCollection.AddTransient(_ => fileSystem.Object); + + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new CoverletLogger(eqtTrace, logger)); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), _mockAssemblyAdapter.Object)); + serviceCollection.AddSingleton(); + return serviceCollection; + }; + _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); + _coverletCoverageDataCollector.Initialize( + _configurationElement, + _mockDataCollectionEvents.Object, + _mockDataCollectionSink.Object, + _mockLogger.Object, + _context); + IDictionary sessionStartProperties = new Dictionary(); + + sessionStartProperties.Add("TestSources", new List { "abc.dll" }); + + _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny())).Throws(new FileNotFoundException()); + + _mockDataCollectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); + + _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext, + It.Is(y => y.Contains("CoverletDataCollectorException")))); } + } } diff --git a/test/coverlet.collector.tests/CoverletSettingsParserTests.cs b/test/coverlet.collector.tests/CoverletSettingsParserTests.cs index 191bdb232..006c83813 100644 --- a/test/coverlet.collector.tests/CoverletSettingsParserTests.cs +++ b/test/coverlet.collector.tests/CoverletSettingsParserTests.cs @@ -10,196 +10,196 @@ namespace Coverlet.Collector.Tests { - public class CoverletSettingsParserTests + public class CoverletSettingsParserTests + { + private readonly CoverletSettingsParser _coverletSettingsParser; + + public CoverletSettingsParserTests() + { + _coverletSettingsParser = new CoverletSettingsParser(new TestPlatformEqtTrace()); + } + + [Fact] + public void ParseShouldThrowCoverletDataCollectorExceptionIfTestModulesIsNull() + { + string message = Assert.Throws(() => _coverletSettingsParser.Parse(null, null)).Message; + + Assert.Equal("CoverletCoverageDataCollector: No test modules found", message); + } + + [Fact] + public void ParseShouldThrowCoverletDataCollectorExceptionIfTestModulesIsEmpty() + { + string message = Assert.Throws(() => _coverletSettingsParser.Parse(null, Enumerable.Empty())).Message; + + Assert.Equal("CoverletCoverageDataCollector: No test modules found", message); + } + + [Fact] + public void ParseShouldSelectFirstTestModuleFromTestModulesList() + { + var testModules = new List { "module1.dll", "module2.dll", "module3.dll" }; + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(null, testModules); + + Assert.Equal("module1.dll", coverletSettings.TestModule); + } + + [Theory] + [InlineData("[*]*,[coverlet]*", "[coverlet.*.tests?]*,[coverlet.*.tests.*]*", @"E:\temp,/var/tmp", "module1.cs,module2.cs", "Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute,System.ObsoleteAttribute", "DoesNotReturnAttribute,ThrowsAttribute")] + [InlineData("[*]*,,[coverlet]*", "[coverlet.*.tests?]*,,[coverlet.*.tests.*]*", @"E:\temp,,/var/tmp", "module1.cs,,module2.cs", "Obsolete,,GeneratedCodeAttribute,,CompilerGeneratedAttribute,,System.ObsoleteAttribute", "DoesNotReturnAttribute,,ThrowsAttribute")] + [InlineData("[*]*, ,[coverlet]*", "[coverlet.*.tests?]*, ,[coverlet.*.tests.*]*", @"E:\temp, ,/var/tmp", "module1.cs, ,module2.cs", "Obsolete, ,GeneratedCodeAttribute, ,CompilerGeneratedAttribute, ,System.ObsoleteAttribute", "DoesNotReturnAttribute, ,ThrowsAttribute")] + [InlineData("[*]*,\t,[coverlet]*", "[coverlet.*.tests?]*,\t,[coverlet.*.tests.*]*", "E:\\temp,\t,/var/tmp", "module1.cs,\t,module2.cs", "Obsolete,\t,GeneratedCodeAttribute,\t,CompilerGeneratedAttribute,\t,System.ObsoleteAttribute", "DoesNotReturnAttribute,\t,ThrowsAttribute")] + [InlineData("[*]*, [coverlet]*", "[coverlet.*.tests?]*, [coverlet.*.tests.*]*", @"E:\temp, /var/tmp", "module1.cs, module2.cs", "Obsolete, GeneratedCodeAttribute, CompilerGeneratedAttribute, System.ObsoleteAttribute", "DoesNotReturnAttribute, ThrowsAttribute")] + [InlineData("[*]*,\t[coverlet]*", "[coverlet.*.tests?]*,\t[coverlet.*.tests.*]*", "E:\\temp,\t/var/tmp", "module1.cs,\tmodule2.cs", "Obsolete,\tGeneratedCodeAttribute,\tCompilerGeneratedAttribute,\tSystem.ObsoleteAttribute", "DoesNotReturnAttribute,\tThrowsAttribute")] + [InlineData("[*]*, \t[coverlet]*", "[coverlet.*.tests?]*, \t[coverlet.*.tests.*]*", "E:\\temp, \t/var/tmp", "module1.cs, \tmodule2.cs", "Obsolete, \tGeneratedCodeAttribute, \tCompilerGeneratedAttribute, \tSystem.ObsoleteAttribute", "DoesNotReturnAttribute, \tThrowsAttribute")] + [InlineData("[*]*,\r\n[coverlet]*", "[coverlet.*.tests?]*,\r\n[coverlet.*.tests.*]*", "E:\\temp,\r\n/var/tmp", "module1.cs,\r\nmodule2.cs", "Obsolete,\r\nGeneratedCodeAttribute,\r\nCompilerGeneratedAttribute,\r\nSystem.ObsoleteAttribute", "DoesNotReturnAttribute,\r\nThrowsAttribute")] + [InlineData("[*]*, \r\n [coverlet]*", "[coverlet.*.tests?]*, \r\n [coverlet.*.tests.*]*", "E:\\temp, \r\n /var/tmp", "module1.cs, \r\n module2.cs", "Obsolete, \r\n GeneratedCodeAttribute, \r\n CompilerGeneratedAttribute, \r\n System.ObsoleteAttribute", "DoesNotReturnAttribute, \r\n ThrowsAttribute")] + [InlineData("[*]*,\t\r\n\t[coverlet]*", "[coverlet.*.tests?]*,\t\r\n\t[coverlet.*.tests.*]*", "E:\\temp,\t\r\n\t/var/tmp", "module1.cs,\t\r\n\tmodule2.cs", "Obsolete,\t\r\n\tGeneratedCodeAttribute,\t\r\n\tCompilerGeneratedAttribute,\t\r\n\tSystem.ObsoleteAttribute", "DoesNotReturnAttribute,\t\r\n\tThrowsAttribute")] + [InlineData("[*]*, \t \r\n \t [coverlet]*", "[coverlet.*.tests?]*, \t \r\n \t [coverlet.*.tests.*]*", "E:\\temp, \t \r\n \t /var/tmp", "module1.cs, \t \r\n \t module2.cs", "Obsolete, \t \r\n \t GeneratedCodeAttribute, \t \r\n \t CompilerGeneratedAttribute, \t \r\n \t System.ObsoleteAttribute", "DoesNotReturnAttribute, \t \r\n \t ThrowsAttribute")] + [InlineData(" [*]* , [coverlet]* ", " [coverlet.*.tests?]* , [coverlet.*.tests.*]* ", " E:\\temp , /var/tmp ", " module1.cs , module2.cs ", " Obsolete , GeneratedCodeAttribute , CompilerGeneratedAttribute , System.ObsoleteAttribute ", "DoesNotReturnAttribute , ThrowsAttribute")] + public void ParseShouldCorrectlyParseConfigurationElement(string includeFilters, + string excludeFilters, + string includeDirectories, + string excludeSourceFiles, + string excludeAttributes, + string doesNotReturnAttributes) + { + var testModules = new List { "abc.dll" }; + var doc = new XmlDocument(); + XmlElement configElement = doc.CreateElement("Configuration"); + CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeFiltersElementName, includeFilters); + CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeFiltersElementName, excludeFilters); + CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeDirectoriesElementName, includeDirectories); + CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeSourceFilesElementName, excludeSourceFiles); + CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeAttributesElementName, excludeAttributes); + CreateCoverletNodes(doc, configElement, CoverletConstants.MergeWithElementName, "/path/to/result.json"); + CreateCoverletNodes(doc, configElement, CoverletConstants.UseSourceLinkElementName, "false"); + CreateCoverletNodes(doc, configElement, CoverletConstants.SingleHitElementName, "true"); + CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeTestAssemblyElementName, "true"); + CreateCoverletNodes(doc, configElement, CoverletConstants.SkipAutoProps, "true"); + CreateCoverletNodes(doc, configElement, CoverletConstants.DeterministicReport, "true"); + CreateCoverletNodes(doc, configElement, CoverletConstants.DoesNotReturnAttributesElementName, doesNotReturnAttributes); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal("abc.dll", coverletSettings.TestModule); + Assert.Equal("[*]*", coverletSettings.IncludeFilters[0]); + Assert.Equal("[coverlet]*", coverletSettings.IncludeFilters[1]); + Assert.Equal(@"E:\temp", coverletSettings.IncludeDirectories[0]); + Assert.Equal("/var/tmp", coverletSettings.IncludeDirectories[1]); + Assert.Equal("module1.cs", coverletSettings.ExcludeSourceFiles[0]); + Assert.Equal("module2.cs", coverletSettings.ExcludeSourceFiles[1]); + Assert.Equal("Obsolete", coverletSettings.ExcludeAttributes[0]); + Assert.Equal("GeneratedCodeAttribute", coverletSettings.ExcludeAttributes[1]); + Assert.Equal("CompilerGeneratedAttribute", coverletSettings.ExcludeAttributes[2]); + Assert.Equal("/path/to/result.json", coverletSettings.MergeWith); + Assert.Equal("[coverlet.*]*", coverletSettings.ExcludeFilters[0]); + Assert.Equal("[coverlet.*.tests?]*", coverletSettings.ExcludeFilters[1]); + Assert.Equal("[coverlet.*.tests.*]*", coverletSettings.ExcludeFilters[2]); + Assert.Equal("DoesNotReturnAttribute", coverletSettings.DoesNotReturnAttributes[0]); + Assert.Equal("ThrowsAttribute", coverletSettings.DoesNotReturnAttributes[1]); + + Assert.False(coverletSettings.UseSourceLink); + Assert.True(coverletSettings.SingleHit); + Assert.True(coverletSettings.IncludeTestAssembly); + Assert.True(coverletSettings.SkipAutoProps); + Assert.True(coverletSettings.DeterministicReport); + } + + [Fact] + public void ParseShouldCorrectlyParseConfigurationElementWithNullInnerText() + { + var testModules = new List { "abc.dll" }; + var doc = new XmlDocument(); + XmlElement configElement = doc.CreateElement("Configuration"); + CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.IncludeFiltersElementName); + CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeFiltersElementName); + CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.IncludeDirectoriesElementName); + CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeSourceFilesElementName); + CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeAttributesElementName); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal("abc.dll", coverletSettings.TestModule); + Assert.Empty(coverletSettings.IncludeFilters); + Assert.Empty(coverletSettings.IncludeDirectories); + Assert.Empty(coverletSettings.ExcludeSourceFiles); + Assert.Empty(coverletSettings.ExcludeAttributes); + Assert.Single(coverletSettings.ExcludeFilters, "[coverlet.*]*"); + } + + [Fact] + public void ParseShouldCorrectlyParseConfigurationElementWithNullElements() + { + var testModules = new List { "abc.dll" }; + var doc = new XmlDocument(); + XmlElement configElement = doc.CreateElement("Configuration"); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal("abc.dll", coverletSettings.TestModule); + Assert.Null(coverletSettings.IncludeFilters); + Assert.Null(coverletSettings.IncludeDirectories); + Assert.Null(coverletSettings.ExcludeSourceFiles); + Assert.Null(coverletSettings.ExcludeAttributes); + Assert.Single(coverletSettings.ExcludeFilters, "[coverlet.*]*"); + } + + [Theory] + [InlineData(" , json", 1, new[] { "json" })] + [InlineData(" , json, ", 1, new[] { "json" })] + [InlineData("json,cobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json,\r\ncobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json, \r\n cobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json,\tcobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json, \t cobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json,\t\r\n\tcobertura", 2, new[] { "json", "cobertura" })] + [InlineData("json, \t \r\n \tcobertura", 2, new[] { "json", "cobertura" })] + [InlineData(" , json,, cobertura ", 2, new[] { "json", "cobertura" })] + [InlineData(" , json, , cobertura ", 2, new[] { "json", "cobertura" })] + [InlineData(",json,\t,\r\n,cobertura", 2, new[] { "json", "cobertura" })] + public void ParseShouldCorrectlyParseMultipleFormats(string formats, int formatsCount, string[] expectedReportFormats) + { + var testModules = new List { "abc.dll" }; + var doc = new XmlDocument(); + XmlElement configElement = doc.CreateElement("Configuration"); + CreateCoverletNodes(doc, configElement, CoverletConstants.ReportFormatElementName, formats); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal(expectedReportFormats, coverletSettings.ReportFormats); + Assert.Equal(formatsCount, coverletSettings.ReportFormats.Length); + } + + [Theory] + [InlineData(null)] + [InlineData("")] + public void ParseShouldUseDefaultFormatWhenNoFormatSpecified(string formats) + { + var testModules = new List { "abc.dll" }; + string defaultFormat = CoverletConstants.DefaultReportFormat; + var doc = new XmlDocument(); + XmlElement configElement = doc.CreateElement("Configuration"); + CreateCoverletNodes(doc, configElement, CoverletConstants.ReportFormatElementName, formats); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal(defaultFormat, coverletSettings.ReportFormats[0]); + } + + private static void CreateCoverletNodes(XmlDocument doc, XmlElement configElement, string nodeSetting, string nodeValue) + { + XmlNode node = doc.CreateNode("element", nodeSetting, string.Empty); + node.InnerText = nodeValue; + configElement.AppendChild(node); + } + + private static void CreateCoverletNullInnerTextNodes(XmlDocument doc, XmlElement configElement, string nodeSetting) { - private readonly CoverletSettingsParser _coverletSettingsParser; - - public CoverletSettingsParserTests() - { - _coverletSettingsParser = new CoverletSettingsParser(new TestPlatformEqtTrace()); - } - - [Fact] - public void ParseShouldThrowCoverletDataCollectorExceptionIfTestModulesIsNull() - { - string message = Assert.Throws(() => _coverletSettingsParser.Parse(null, null)).Message; - - Assert.Equal("CoverletCoverageDataCollector: No test modules found", message); - } - - [Fact] - public void ParseShouldThrowCoverletDataCollectorExceptionIfTestModulesIsEmpty() - { - string message = Assert.Throws(() => _coverletSettingsParser.Parse(null, Enumerable.Empty())).Message; - - Assert.Equal("CoverletCoverageDataCollector: No test modules found", message); - } - - [Fact] - public void ParseShouldSelectFirstTestModuleFromTestModulesList() - { - var testModules = new List { "module1.dll", "module2.dll", "module3.dll" }; - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(null, testModules); - - Assert.Equal("module1.dll", coverletSettings.TestModule); - } - - [Theory] - [InlineData("[*]*,[coverlet]*", "[coverlet.*.tests?]*,[coverlet.*.tests.*]*", @"E:\temp,/var/tmp", "module1.cs,module2.cs", "Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute", "DoesNotReturnAttribute,ThrowsAttribute")] - [InlineData("[*]*,,[coverlet]*", "[coverlet.*.tests?]*,,[coverlet.*.tests.*]*", @"E:\temp,,/var/tmp", "module1.cs,,module2.cs", "Obsolete,,GeneratedCodeAttribute,,CompilerGeneratedAttribute", "DoesNotReturnAttribute,,ThrowsAttribute")] - [InlineData("[*]*, ,[coverlet]*", "[coverlet.*.tests?]*, ,[coverlet.*.tests.*]*", @"E:\temp, ,/var/tmp", "module1.cs, ,module2.cs", "Obsolete, ,GeneratedCodeAttribute, ,CompilerGeneratedAttribute", "DoesNotReturnAttribute, ,ThrowsAttribute")] - [InlineData("[*]*,\t,[coverlet]*", "[coverlet.*.tests?]*,\t,[coverlet.*.tests.*]*", "E:\\temp,\t,/var/tmp", "module1.cs,\t,module2.cs", "Obsolete,\t,GeneratedCodeAttribute,\t,CompilerGeneratedAttribute", "DoesNotReturnAttribute,\t,ThrowsAttribute")] - [InlineData("[*]*, [coverlet]*", "[coverlet.*.tests?]*, [coverlet.*.tests.*]*", @"E:\temp, /var/tmp", "module1.cs, module2.cs", "Obsolete, GeneratedCodeAttribute, CompilerGeneratedAttribute", "DoesNotReturnAttribute, ThrowsAttribute")] - [InlineData("[*]*,\t[coverlet]*", "[coverlet.*.tests?]*,\t[coverlet.*.tests.*]*", "E:\\temp,\t/var/tmp", "module1.cs,\tmodule2.cs", "Obsolete,\tGeneratedCodeAttribute,\tCompilerGeneratedAttribute", "DoesNotReturnAttribute,\tThrowsAttribute")] - [InlineData("[*]*, \t[coverlet]*", "[coverlet.*.tests?]*, \t[coverlet.*.tests.*]*", "E:\\temp, \t/var/tmp", "module1.cs, \tmodule2.cs", "Obsolete, \tGeneratedCodeAttribute, \tCompilerGeneratedAttribute", "DoesNotReturnAttribute, \tThrowsAttribute")] - [InlineData("[*]*,\r\n[coverlet]*", "[coverlet.*.tests?]*,\r\n[coverlet.*.tests.*]*", "E:\\temp,\r\n/var/tmp", "module1.cs,\r\nmodule2.cs", "Obsolete,\r\nGeneratedCodeAttribute,\r\nCompilerGeneratedAttribute", "DoesNotReturnAttribute,\r\nThrowsAttribute")] - [InlineData("[*]*, \r\n [coverlet]*", "[coverlet.*.tests?]*, \r\n [coverlet.*.tests.*]*", "E:\\temp, \r\n /var/tmp", "module1.cs, \r\n module2.cs", "Obsolete, \r\n GeneratedCodeAttribute, \r\n CompilerGeneratedAttribute", "DoesNotReturnAttribute, \r\n ThrowsAttribute")] - [InlineData("[*]*,\t\r\n\t[coverlet]*", "[coverlet.*.tests?]*,\t\r\n\t[coverlet.*.tests.*]*", "E:\\temp,\t\r\n\t/var/tmp", "module1.cs,\t\r\n\tmodule2.cs", "Obsolete,\t\r\n\tGeneratedCodeAttribute,\t\r\n\tCompilerGeneratedAttribute", "DoesNotReturnAttribute,\t\r\n\tThrowsAttribute")] - [InlineData("[*]*, \t \r\n \t [coverlet]*", "[coverlet.*.tests?]*, \t \r\n \t [coverlet.*.tests.*]*", "E:\\temp, \t \r\n \t /var/tmp", "module1.cs, \t \r\n \t module2.cs", "Obsolete, \t \r\n \t GeneratedCodeAttribute, \t \r\n \t CompilerGeneratedAttribute", "DoesNotReturnAttribute, \t \r\n \t ThrowsAttribute")] - [InlineData(" [*]* , [coverlet]* ", " [coverlet.*.tests?]* , [coverlet.*.tests.*]* ", " E:\\temp , /var/tmp ", " module1.cs , module2.cs ", " Obsolete , GeneratedCodeAttribute , CompilerGeneratedAttribute ", "DoesNotReturnAttribute , ThrowsAttribute")] - public void ParseShouldCorrectlyParseConfigurationElement(string includeFilters, - string excludeFilters, - string includeDirectories, - string excludeSourceFiles, - string excludeAttributes, - string doesNotReturnAttributes) - { - var testModules = new List { "abc.dll" }; - var doc = new XmlDocument(); - XmlElement configElement = doc.CreateElement("Configuration"); - CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeFiltersElementName, includeFilters); - CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeFiltersElementName, excludeFilters); - CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeDirectoriesElementName, includeDirectories); - CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeSourceFilesElementName, excludeSourceFiles); - CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeAttributesElementName, excludeAttributes); - CreateCoverletNodes(doc, configElement, CoverletConstants.MergeWithElementName, "/path/to/result.json"); - CreateCoverletNodes(doc, configElement, CoverletConstants.UseSourceLinkElementName, "false"); - CreateCoverletNodes(doc, configElement, CoverletConstants.SingleHitElementName, "true"); - CreateCoverletNodes(doc, configElement, CoverletConstants.IncludeTestAssemblyElementName, "true"); - CreateCoverletNodes(doc, configElement, CoverletConstants.SkipAutoProps, "true"); - CreateCoverletNodes(doc, configElement, CoverletConstants.DeterministicReport, "true"); - CreateCoverletNodes(doc, configElement, CoverletConstants.DoesNotReturnAttributesElementName, doesNotReturnAttributes); - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); - - Assert.Equal("abc.dll", coverletSettings.TestModule); - Assert.Equal("[*]*", coverletSettings.IncludeFilters[0]); - Assert.Equal("[coverlet]*", coverletSettings.IncludeFilters[1]); - Assert.Equal(@"E:\temp", coverletSettings.IncludeDirectories[0]); - Assert.Equal("/var/tmp", coverletSettings.IncludeDirectories[1]); - Assert.Equal("module1.cs", coverletSettings.ExcludeSourceFiles[0]); - Assert.Equal("module2.cs", coverletSettings.ExcludeSourceFiles[1]); - Assert.Equal("Obsolete", coverletSettings.ExcludeAttributes[0]); - Assert.Equal("GeneratedCodeAttribute", coverletSettings.ExcludeAttributes[1]); - Assert.Equal("CompilerGeneratedAttribute", coverletSettings.ExcludeAttributes[2]); - Assert.Equal("/path/to/result.json", coverletSettings.MergeWith); - Assert.Equal("[coverlet.*]*", coverletSettings.ExcludeFilters[0]); - Assert.Equal("[coverlet.*.tests?]*", coverletSettings.ExcludeFilters[1]); - Assert.Equal("[coverlet.*.tests.*]*", coverletSettings.ExcludeFilters[2]); - Assert.Equal("DoesNotReturnAttribute", coverletSettings.DoesNotReturnAttributes[0]); - Assert.Equal("ThrowsAttribute", coverletSettings.DoesNotReturnAttributes[1]); - - Assert.False(coverletSettings.UseSourceLink); - Assert.True(coverletSettings.SingleHit); - Assert.True(coverletSettings.IncludeTestAssembly); - Assert.True(coverletSettings.SkipAutoProps); - Assert.True(coverletSettings.DeterministicReport); - } - - [Fact] - public void ParseShouldCorrectlyParseConfigurationElementWithNullInnerText() - { - var testModules = new List { "abc.dll" }; - var doc = new XmlDocument(); - XmlElement configElement = doc.CreateElement("Configuration"); - CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.IncludeFiltersElementName); - CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeFiltersElementName); - CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.IncludeDirectoriesElementName); - CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeSourceFilesElementName); - CreateCoverletNullInnerTextNodes(doc, configElement, CoverletConstants.ExcludeAttributesElementName); - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); - - Assert.Equal("abc.dll", coverletSettings.TestModule); - Assert.Empty(coverletSettings.IncludeFilters); - Assert.Empty(coverletSettings.IncludeDirectories); - Assert.Empty(coverletSettings.ExcludeSourceFiles); - Assert.Empty(coverletSettings.ExcludeAttributes); - Assert.Single(coverletSettings.ExcludeFilters, "[coverlet.*]*"); - } - - [Fact] - public void ParseShouldCorrectlyParseConfigurationElementWithNullElements() - { - var testModules = new List { "abc.dll" }; - var doc = new XmlDocument(); - XmlElement configElement = doc.CreateElement("Configuration"); - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); - - Assert.Equal("abc.dll", coverletSettings.TestModule); - Assert.Null(coverletSettings.IncludeFilters); - Assert.Null(coverletSettings.IncludeDirectories); - Assert.Null(coverletSettings.ExcludeSourceFiles); - Assert.Null(coverletSettings.ExcludeAttributes); - Assert.Single(coverletSettings.ExcludeFilters, "[coverlet.*]*"); - } - - [Theory] - [InlineData(" , json", 1, new[] { "json" })] - [InlineData(" , json, ", 1, new[] { "json" })] - [InlineData("json,cobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json,\r\ncobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json, \r\n cobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json,\tcobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json, \t cobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json,\t\r\n\tcobertura", 2, new[] { "json", "cobertura" })] - [InlineData("json, \t \r\n \tcobertura", 2, new[] { "json", "cobertura" })] - [InlineData(" , json,, cobertura ", 2, new[] { "json", "cobertura" })] - [InlineData(" , json, , cobertura ", 2, new[] { "json", "cobertura" })] - [InlineData(",json,\t,\r\n,cobertura", 2, new[] { "json", "cobertura" })] - public void ParseShouldCorrectlyParseMultipleFormats(string formats, int formatsCount, string[] expectedReportFormats) - { - var testModules = new List { "abc.dll" }; - var doc = new XmlDocument(); - XmlElement configElement = doc.CreateElement("Configuration"); - CreateCoverletNodes(doc, configElement, CoverletConstants.ReportFormatElementName, formats); - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); - - Assert.Equal(expectedReportFormats, coverletSettings.ReportFormats); - Assert.Equal(formatsCount, coverletSettings.ReportFormats.Length); - } - - [Theory] - [InlineData(null)] - [InlineData("")] - public void ParseShouldUseDefaultFormatWhenNoFormatSpecified(string formats) - { - var testModules = new List { "abc.dll" }; - string defaultFormat = CoverletConstants.DefaultReportFormat; - var doc = new XmlDocument(); - XmlElement configElement = doc.CreateElement("Configuration"); - CreateCoverletNodes(doc, configElement, CoverletConstants.ReportFormatElementName, formats); - - CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); - - Assert.Equal(defaultFormat, coverletSettings.ReportFormats[0]); - } - - private static void CreateCoverletNodes(XmlDocument doc, XmlElement configElement, string nodeSetting, string nodeValue) - { - XmlNode node = doc.CreateNode("element", nodeSetting, string.Empty); - node.InnerText = nodeValue; - configElement.AppendChild(node); - } - - private static void CreateCoverletNullInnerTextNodes(XmlDocument doc, XmlElement configElement, string nodeSetting) - { - XmlNode node = doc.CreateNode("element", nodeSetting, string.Empty); - node.InnerText = null; - configElement.AppendChild(node); - } + XmlNode node = doc.CreateNode("element", nodeSetting, string.Empty); + node.InnerText = null; + configElement.AppendChild(node); } + } } diff --git a/test/coverlet.collector.tests/coverlet.collector.tests.csproj b/test/coverlet.collector.tests/coverlet.collector.tests.csproj index fa828394a..3c84c24d9 100644 --- a/test/coverlet.collector.tests/coverlet.collector.tests.csproj +++ b/test/coverlet.collector.tests/coverlet.collector.tests.csproj @@ -2,22 +2,23 @@ - net6.0 + net8.0 false + all runtime; build; native; contentfiles; analyzers + - diff --git a/test/coverlet.core.performancetest/coverlet.core.performancetest.csproj b/test/coverlet.core.performancetest/coverlet.core.performancetest.csproj index 41f8d5bd3..d41d5b545 100644 --- a/test/coverlet.core.performancetest/coverlet.core.performancetest.csproj +++ b/test/coverlet.core.performancetest/coverlet.core.performancetest.csproj @@ -2,14 +2,18 @@ - net6.0 + net8.0 false - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/coverlet.core.tests.samples.netstandard/coverlet.core.tests.samples.netstandard.csproj b/test/coverlet.core.tests.samples.netstandard/coverlet.core.tests.samples.netstandard.csproj index 783e0d0c3..769e790bb 100644 --- a/test/coverlet.core.tests.samples.netstandard/coverlet.core.tests.samples.netstandard.csproj +++ b/test/coverlet.core.tests.samples.netstandard/coverlet.core.tests.samples.netstandard.csproj @@ -3,10 +3,12 @@ netstandard2.0 false false + false - + + diff --git a/test/coverlet.core.tests/Coverage/CoverageSummaryTests.cs b/test/coverlet.core.tests/Coverage/CoverageSummaryTests.cs index 1a04e2021..3fb3f0c39 100644 --- a/test/coverlet.core.tests/Coverage/CoverageSummaryTests.cs +++ b/test/coverlet.core.tests/Coverage/CoverageSummaryTests.cs @@ -6,259 +6,259 @@ namespace Coverlet.Core.Tests { - public class CoverageSummaryTests + public class CoverageSummaryTests + { + private Modules _averageCalculationSingleModule; + private Modules _averageCalculationMultiModule; + private Modules _moduleArithmeticPrecision; + + public CoverageSummaryTests() { - private Modules _averageCalculationSingleModule; - private Modules _averageCalculationMultiModule; - private Modules _moduleArithmeticPrecision; - - public CoverageSummaryTests() - { - SetupDataSingleModule(); - SetupDataMultipleModule(); - SetupDataForArithmeticPrecision(); - } - - private void SetupDataForArithmeticPrecision() - { - var lines = new Lines(); - lines.Add(1, 1); - for (int i = 2; i <= 6; i++) - { - lines.Add(i, 0); - } - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); - for (int i = 2; i <= 6; i++) - { - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 1, Path = 1, Ordinal = (uint)i }); - } - - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes(); - classes.Add("Coverlet.Core.Tests.CoverageSummaryTests", methods); - - var documents = new Documents(); - documents.Add("doc.cs", classes); - - _moduleArithmeticPrecision = new Modules(); - _moduleArithmeticPrecision.Add("module", documents); - } - - private void SetupDataSingleModule() - { - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 }); - - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes(); - classes.Add("Coverlet.Core.Tests.CoverageSummaryTests", methods); - - var documents = new Documents(); - documents.Add("doc.cs", classes); - - _averageCalculationSingleModule = new Modules(); - _averageCalculationSingleModule.Add("module", documents); - } - - private void SetupDataMultipleModule() - { - var lines = new Lines + SetupDataSingleModule(); + SetupDataMultipleModule(); + SetupDataForArithmeticPrecision(); + } + + private void SetupDataForArithmeticPrecision() + { + var lines = new Lines(); + lines.Add(1, 1); + for (int i = 2; i <= 6; i++) + { + lines.Add(i, 0); + } + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); + for (int i = 2; i <= 6; i++) + { + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 1, Path = 1, Ordinal = (uint)i }); + } + + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Coverlet.Core.Tests.CoverageSummaryTests", methods); + + var documents = new Documents(); + documents.Add("doc.cs", classes); + + _moduleArithmeticPrecision = new Modules(); + _moduleArithmeticPrecision.Add("module", documents); + } + + private void SetupDataSingleModule() + { + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 }); + + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Coverlet.Core.Tests.CoverageSummaryTests", methods); + + var documents = new Documents(); + documents.Add("doc.cs", classes); + + _averageCalculationSingleModule = new Modules(); + _averageCalculationSingleModule.Add("module", documents); + } + + private void SetupDataMultipleModule() + { + var lines = new Lines { { 1, 1 }, // covered { 2, 0 }, // not covered { 3, 0 } // not covered }; - var branches = new Branches + var branches = new Branches { new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }, // covered new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 }, // covered new BranchInfo { Line = 1, Hits = 0, Offset = 1, Path = 1, Ordinal = 2 } // not covered }; - var methods = new Methods(); - string[] methodString = { + var methods = new Methods(); + string[] methodString = { "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()", // covered - "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestAditionalCalculateSummary()" // not covered + "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestAdditionalCalculateSummary()" // not covered }; - methods.Add(methodString[0], new Method()); - methods[methodString[0]].Lines = lines; - methods[methodString[0]].Branches = branches; + methods.Add(methodString[0], new Method()); + methods[methodString[0]].Lines = lines; + methods[methodString[0]].Branches = branches; - methods.Add(methodString[1], new Method()); - methods[methodString[1]].Lines = new Lines + methods.Add(methodString[1], new Method()); + methods[methodString[1]].Lines = new Lines { { 1, 0 } // not covered }; - var classes = new Classes + var classes = new Classes { { "Coverlet.Core.Tests.CoverageSummaryTests", methods } }; - var documents = new Documents + var documents = new Documents { { "doc.cs", classes } }; - _averageCalculationMultiModule = new Modules + _averageCalculationMultiModule = new Modules { { "module", _averageCalculationSingleModule["module"] }, - { "aditionalModule", documents } + { "additionalModule", documents } }; - } - - [Fact] - public void TestCalculateLineCoverage_NoModules() - { - var summary = new CoverageSummary(); - var modules = new Modules(); - - Assert.Equal(0, summary.CalculateLineCoverage(modules).Percent); - Assert.Equal(0, summary.CalculateLineCoverage(modules).AverageModulePercent); - Assert.Equal(0, summary.CalculateBranchCoverage(modules).Percent); - Assert.Equal(0, summary.CalculateBranchCoverage(modules).AverageModulePercent); - Assert.Equal(0, summary.CalculateMethodCoverage(modules).Percent); - Assert.Equal(0, summary.CalculateMethodCoverage(modules).AverageModulePercent); - } - - [Fact] - public void TestCalculateLineCoverage_SingleModule() - { - var summary = new CoverageSummary(); - - System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); - System.Collections.Generic.KeyValuePair document = module.Value.First(); - System.Collections.Generic.KeyValuePair @class = document.Value.First(); - System.Collections.Generic.KeyValuePair method = @class.Value.First(); - - Assert.Equal(50, summary.CalculateLineCoverage(_averageCalculationSingleModule).AverageModulePercent); - Assert.Equal(50, summary.CalculateLineCoverage(module.Value).Percent); - Assert.Equal(50, summary.CalculateLineCoverage(document.Value).Percent); - Assert.Equal(50, summary.CalculateLineCoverage(@class.Value).Percent); - Assert.Equal(50, summary.CalculateLineCoverage(method.Value.Lines).Percent); - } - - [Fact] - public void TestCalculateLineCoverage_MultiModule() - { - var summary = new CoverageSummary(); - Documents documentsFirstModule = _averageCalculationMultiModule["module"]; - Documents documentsSecondModule = _averageCalculationMultiModule["aditionalModule"]; - - Assert.Equal(37.5, summary.CalculateLineCoverage(_averageCalculationMultiModule).AverageModulePercent); - Assert.Equal(50, summary.CalculateLineCoverage(documentsFirstModule.First().Value).Percent); - - Assert.Equal(33.33, summary.CalculateLineCoverage(documentsSecondModule.First().Value.First().Value.ElementAt(0).Value.Lines).Percent); // covered 1 of 3 - Assert.Equal(0, summary.CalculateLineCoverage(documentsSecondModule.First().Value.First().Value.ElementAt(1).Value.Lines).Percent); // covered 0 of 1 - Assert.Equal(25, summary.CalculateLineCoverage(documentsSecondModule.First().Value).Percent); // covered 1 of 4 lines - } - - [Fact] - public void TestCalculateBranchCoverage_SingleModule() - { - var summary = new CoverageSummary(); - - System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); - System.Collections.Generic.KeyValuePair document = module.Value.First(); - System.Collections.Generic.KeyValuePair @class = document.Value.First(); - System.Collections.Generic.KeyValuePair method = @class.Value.First(); - - Assert.Equal(100, summary.CalculateBranchCoverage(_averageCalculationSingleModule).AverageModulePercent); - Assert.Equal(100, summary.CalculateBranchCoverage(module.Value).Percent); - Assert.Equal(100, summary.CalculateBranchCoverage(document.Value).Percent); - Assert.Equal(100, summary.CalculateBranchCoverage(@class.Value).Percent); - Assert.Equal(100, summary.CalculateBranchCoverage(method.Value.Branches).Percent); - } - - [Fact] - public void TestCalculateBranchCoverage_MultiModule() - { - var summary = new CoverageSummary(); - Documents documentsFirstModule = _averageCalculationMultiModule["module"]; - Documents documentsSecondModule = _averageCalculationMultiModule["aditionalModule"]; - - Assert.Equal(83.33, summary.CalculateBranchCoverage(_averageCalculationMultiModule).AverageModulePercent); - Assert.Equal(100, summary.CalculateBranchCoverage(documentsFirstModule.First().Value).Percent); - Assert.Equal(66.66, summary.CalculateBranchCoverage(documentsSecondModule.First().Value).Percent); - } - - [Fact] - public void TestCalculateMethodCoverage_SingleModule() - { - var summary = new CoverageSummary(); - - System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); - System.Collections.Generic.KeyValuePair document = module.Value.First(); - System.Collections.Generic.KeyValuePair @class = document.Value.First(); - System.Collections.Generic.KeyValuePair method = @class.Value.First(); - - Assert.Equal(100, summary.CalculateMethodCoverage(_averageCalculationSingleModule).AverageModulePercent); - Assert.Equal(100, summary.CalculateMethodCoverage(module.Value).Percent); - Assert.Equal(100, summary.CalculateMethodCoverage(document.Value).Percent); - Assert.Equal(100, summary.CalculateMethodCoverage(@class.Value).Percent); - Assert.Equal(100, summary.CalculateMethodCoverage(method.Value.Lines).Percent); - } - - [Fact] - public void TestCalculateMethodCoverage_MultiModule() - { - var summary = new CoverageSummary(); - Documents documentsFirstModule = _averageCalculationMultiModule["module"]; - Documents documentsSecondModule = _averageCalculationMultiModule["aditionalModule"]; - - Assert.Equal(75, summary.CalculateMethodCoverage(_averageCalculationMultiModule).AverageModulePercent); - Assert.Equal(100, summary.CalculateMethodCoverage(documentsFirstModule.First().Value).Percent); - Assert.Equal(50, summary.CalculateMethodCoverage(documentsSecondModule.First().Value).Percent); - } - - [Fact] - public void TestCalculateLineCoveragePercentage_ArithmeticPrecisionCheck() - { - var summary = new CoverageSummary(); - - System.Collections.Generic.KeyValuePair module = _moduleArithmeticPrecision.First(); - System.Collections.Generic.KeyValuePair document = module.Value.First(); - System.Collections.Generic.KeyValuePair @class = document.Value.First(); - System.Collections.Generic.KeyValuePair method = @class.Value.First(); - - Assert.Equal(16.66, summary.CalculateLineCoverage(_moduleArithmeticPrecision).AverageModulePercent); - Assert.Equal(16.66, summary.CalculateLineCoverage(module.Value).Percent); - Assert.Equal(16.66, summary.CalculateLineCoverage(document.Value).Percent); - Assert.Equal(16.66, summary.CalculateLineCoverage(@class.Value).Percent); - Assert.Equal(16.66, summary.CalculateLineCoverage(method.Value.Lines).Percent); - } - - [Fact] - public void TestCalculateBranchCoveragePercentage_ArithmeticPrecisionCheck() - { - var summary = new CoverageSummary(); - - System.Collections.Generic.KeyValuePair module = _moduleArithmeticPrecision.First(); - System.Collections.Generic.KeyValuePair document = module.Value.First(); - System.Collections.Generic.KeyValuePair @class = document.Value.First(); - System.Collections.Generic.KeyValuePair method = @class.Value.First(); - - Assert.Equal(16.66, summary.CalculateBranchCoverage(_moduleArithmeticPrecision).AverageModulePercent); - Assert.Equal(16.66, summary.CalculateBranchCoverage(module.Value).Percent); - Assert.Equal(16.66, summary.CalculateBranchCoverage(document.Value).Percent); - Assert.Equal(16.66, summary.CalculateBranchCoverage(@class.Value).Percent); - Assert.Equal(16.66, summary.CalculateBranchCoverage(method.Value.Branches).Percent); - } } + + [Fact] + public void TestCalculateLineCoverage_NoModules() + { + var summary = new CoverageSummary(); + var modules = new Modules(); + + Assert.Equal(0, summary.CalculateLineCoverage(modules).Percent); + Assert.Equal(0, summary.CalculateLineCoverage(modules).AverageModulePercent); + Assert.Equal(0, summary.CalculateBranchCoverage(modules).Percent); + Assert.Equal(0, summary.CalculateBranchCoverage(modules).AverageModulePercent); + Assert.Equal(0, summary.CalculateMethodCoverage(modules).Percent); + Assert.Equal(0, summary.CalculateMethodCoverage(modules).AverageModulePercent); + } + + [Fact] + public void TestCalculateLineCoverage_SingleModule() + { + var summary = new CoverageSummary(); + + System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); + System.Collections.Generic.KeyValuePair document = module.Value.First(); + System.Collections.Generic.KeyValuePair @class = document.Value.First(); + System.Collections.Generic.KeyValuePair method = @class.Value.First(); + + Assert.Equal(50, summary.CalculateLineCoverage(_averageCalculationSingleModule).AverageModulePercent); + Assert.Equal(50, summary.CalculateLineCoverage(module.Value).Percent); + Assert.Equal(50, summary.CalculateLineCoverage(document.Value).Percent); + Assert.Equal(50, summary.CalculateLineCoverage(@class.Value).Percent); + Assert.Equal(50, summary.CalculateLineCoverage(method.Value.Lines).Percent); + } + + [Fact] + public void TestCalculateLineCoverage_MultiModule() + { + var summary = new CoverageSummary(); + Documents documentsFirstModule = _averageCalculationMultiModule["module"]; + Documents documentsSecondModule = _averageCalculationMultiModule["additionalModule"]; + + Assert.Equal(37.5, summary.CalculateLineCoverage(_averageCalculationMultiModule).AverageModulePercent); + Assert.Equal(50, summary.CalculateLineCoverage(documentsFirstModule.First().Value).Percent); + + Assert.Equal(33.33, summary.CalculateLineCoverage(documentsSecondModule.First().Value.First().Value.ElementAt(0).Value.Lines).Percent); // covered 1 of 3 + Assert.Equal(0, summary.CalculateLineCoverage(documentsSecondModule.First().Value.First().Value.ElementAt(1).Value.Lines).Percent); // covered 0 of 1 + Assert.Equal(25, summary.CalculateLineCoverage(documentsSecondModule.First().Value).Percent); // covered 1 of 4 lines + } + + [Fact] + public void TestCalculateBranchCoverage_SingleModule() + { + var summary = new CoverageSummary(); + + System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); + System.Collections.Generic.KeyValuePair document = module.Value.First(); + System.Collections.Generic.KeyValuePair @class = document.Value.First(); + System.Collections.Generic.KeyValuePair method = @class.Value.First(); + + Assert.Equal(100, summary.CalculateBranchCoverage(_averageCalculationSingleModule).AverageModulePercent); + Assert.Equal(100, summary.CalculateBranchCoverage(module.Value).Percent); + Assert.Equal(100, summary.CalculateBranchCoverage(document.Value).Percent); + Assert.Equal(100, summary.CalculateBranchCoverage(@class.Value).Percent); + Assert.Equal(100, summary.CalculateBranchCoverage(method.Value.Branches).Percent); + } + + [Fact] + public void TestCalculateBranchCoverage_MultiModule() + { + var summary = new CoverageSummary(); + Documents documentsFirstModule = _averageCalculationMultiModule["module"]; + Documents documentsSecondModule = _averageCalculationMultiModule["additionalModule"]; + + Assert.Equal(83.33, summary.CalculateBranchCoverage(_averageCalculationMultiModule).AverageModulePercent); + Assert.Equal(100, summary.CalculateBranchCoverage(documentsFirstModule.First().Value).Percent); + Assert.Equal(66.66, summary.CalculateBranchCoverage(documentsSecondModule.First().Value).Percent); + } + + [Fact] + public void TestCalculateMethodCoverage_SingleModule() + { + var summary = new CoverageSummary(); + + System.Collections.Generic.KeyValuePair module = _averageCalculationSingleModule.First(); + System.Collections.Generic.KeyValuePair document = module.Value.First(); + System.Collections.Generic.KeyValuePair @class = document.Value.First(); + System.Collections.Generic.KeyValuePair method = @class.Value.First(); + + Assert.Equal(100, summary.CalculateMethodCoverage(_averageCalculationSingleModule).AverageModulePercent); + Assert.Equal(100, summary.CalculateMethodCoverage(module.Value).Percent); + Assert.Equal(100, summary.CalculateMethodCoverage(document.Value).Percent); + Assert.Equal(100, summary.CalculateMethodCoverage(@class.Value).Percent); + Assert.Equal(100, summary.CalculateMethodCoverage(method.Value.Lines).Percent); + } + + [Fact] + public void TestCalculateMethodCoverage_MultiModule() + { + var summary = new CoverageSummary(); + Documents documentsFirstModule = _averageCalculationMultiModule["module"]; + Documents documentsSecondModule = _averageCalculationMultiModule["additionalModule"]; + + Assert.Equal(75, summary.CalculateMethodCoverage(_averageCalculationMultiModule).AverageModulePercent); + Assert.Equal(100, summary.CalculateMethodCoverage(documentsFirstModule.First().Value).Percent); + Assert.Equal(50, summary.CalculateMethodCoverage(documentsSecondModule.First().Value).Percent); + } + + [Fact] + public void TestCalculateLineCoveragePercentage_ArithmeticPrecisionCheck() + { + var summary = new CoverageSummary(); + + System.Collections.Generic.KeyValuePair module = _moduleArithmeticPrecision.First(); + System.Collections.Generic.KeyValuePair document = module.Value.First(); + System.Collections.Generic.KeyValuePair @class = document.Value.First(); + System.Collections.Generic.KeyValuePair method = @class.Value.First(); + + Assert.Equal(16.66, summary.CalculateLineCoverage(_moduleArithmeticPrecision).AverageModulePercent); + Assert.Equal(16.66, summary.CalculateLineCoverage(module.Value).Percent); + Assert.Equal(16.66, summary.CalculateLineCoverage(document.Value).Percent); + Assert.Equal(16.66, summary.CalculateLineCoverage(@class.Value).Percent); + Assert.Equal(16.66, summary.CalculateLineCoverage(method.Value.Lines).Percent); + } + + [Fact] + public void TestCalculateBranchCoveragePercentage_ArithmeticPrecisionCheck() + { + var summary = new CoverageSummary(); + + System.Collections.Generic.KeyValuePair module = _moduleArithmeticPrecision.First(); + System.Collections.Generic.KeyValuePair document = module.Value.First(); + System.Collections.Generic.KeyValuePair @class = document.Value.First(); + System.Collections.Generic.KeyValuePair method = @class.Value.First(); + + Assert.Equal(16.66, summary.CalculateBranchCoverage(_moduleArithmeticPrecision).AverageModulePercent); + Assert.Equal(16.66, summary.CalculateBranchCoverage(module.Value).Percent); + Assert.Equal(16.66, summary.CalculateBranchCoverage(document.Value).Percent); + Assert.Equal(16.66, summary.CalculateBranchCoverage(@class.Value).Percent); + Assert.Equal(16.66, summary.CalculateBranchCoverage(method.Value.Branches).Percent); + } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwait.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwait.cs index 8d0b70ec2..43c0d6794 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwait.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwait.cs @@ -6,214 +6,209 @@ using System.Threading; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void AsyncAwait() { - [Fact] - public void AsyncAwait() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.SyncExecution(); - - int res = ((Task)instance.AsyncExecution(true)).ConfigureAwait(false).GetAwaiter().GetResult(); - res = ((Task)instance.AsyncExecution(1)).ConfigureAwait(false).GetAwaiter().GetResult(); - res = ((Task)instance.AsyncExecution(2)).ConfigureAwait(false).GetAwaiter().GetResult(); - res = ((Task)instance.AsyncExecution(3)).ConfigureAwait(false).GetAwaiter().GetResult(); - res = ((Task)instance.ContinuationCalled()).ConfigureAwait(false).GetAwaiter().GetResult(); - res = ((Task)instance.ConfigureAwait()).ConfigureAwait(false).GetAwaiter().GetResult(); - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncAwait.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - // AsyncExecution(bool) - (10, 1), (11, 1), (12, 1), (14, 1), (16, 1), (17, 0), (18, 0), (19, 0), (21, 1), (22, 1), - // Async - (25, 9), (26, 9), (27, 9), (28, 9), - // SyncExecution - (31, 1), (32, 1), (33, 1), - // Sync - (36, 1), (37, 1), (38, 1), - // AsyncExecution(int) - (41, 3), (42, 3), (43, 3), (46, 1), (47, 1), (48, 1), (51, 1), - (52, 1), (53, 1), (56, 1), (57, 1), (58, 1), (59, 1), - (62, 0), (63, 0), (64, 0), (65, 0), (68, 0), (70, 3), (71, 3), - // ContinuationNotCalled - (74, 0), (75, 0), (76, 0), (77, 0), (78, 0), - // ContinuationCalled -> line 83 should be 1 hit some issue with Continuation state machine - (81, 1), (82, 1), (83, 2), (84, 1), (85, 1), - // ConfigureAwait - (89, 1), (90, 1) - ) - .AssertBranchesCovered(BuildConfiguration.Debug, (16, 0, 0), (16, 1, 1), (43, 0, 3), (43, 1, 1), (43, 2, 1), (43, 3, 1), (43, 4, 0)) - // Real branch should be 2, we should try to remove compiler generated branch in method ContinuationNotCalled/ContinuationCalled - // for Continuation state machine - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void AsyncAwait_Issue_669_1() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + instance.SyncExecution(); + + int res = await (Task)instance.AsyncExecution(true); + res = await (Task)instance.AsyncExecution(1); + res = await (Task)instance.AsyncExecution(2); + res = await (Task)instance.AsyncExecution(3); + res = await (Task)instance.ContinuationCalled(); + res = await (Task)instance.ConfigureAwait(); + + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncAwait.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + // AsyncExecution(bool) + (10, 1), (11, 1), (12, 1), (14, 1), (16, 1), (17, 0), (18, 0), (19, 0), (21, 1), (22, 1), + // Async + (25, 9), (26, 9), (27, 9), (28, 9), + // SyncExecution + (31, 1), (32, 1), (33, 1), + // Sync + (36, 1), (37, 1), (38, 1), + // AsyncExecution(int) + (41, 3), (42, 3), (43, 3), (46, 1), (47, 1), (48, 1), (51, 1), + (52, 1), (53, 1), (56, 1), (57, 1), (58, 1), (59, 1), + (62, 0), (63, 0), (64, 0), (65, 0), (68, 0), (70, 3), (71, 3), + // ContinuationNotCalled + (74, 0), (75, 0), (76, 0), (77, 0), (78, 0), + // ContinuationCalled -> line 83 should be 1 hit some issue with Continuation state machine + (81, 1), (82, 1), (83, 2), (84, 1), (85, 1), + // ConfigureAwait + (89, 1), (90, 1) + ) + .AssertBranchesCovered(BuildConfiguration.Debug, (16, 0, 0), (16, 1, 1), (43, 0, 3), (43, 1, 1), (43, 2, 1), (43, 3, 1), (43, 4, 0)) + // Real branch should be 2, we should try to remove compiler generated branch in method ContinuationNotCalled/ContinuationCalled + // for Continuation state machine + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void AsyncAwait_Issue_669_1() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.Test()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncAwait.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - (97, 1), (98, 1), (99, 1), (101, 1), (102, 1), (103, 1), - (110, 1), (111, 1), (112, 1), (113, 1), - (116, 1), (117, 1), (118, 1), (119, 1)); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void AsyncAwait_Issue_669_2() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.Test(); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncAwait.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + (97, 1), (98, 1), (99, 1), (101, 1), (102, 1), (103, 1), + (110, 1), (111, 1), (112, 1), (113, 1), + (116, 1), (117, 1), (118, 1), (119, 1)); + } + finally + { + File.Delete(path); + } + } + + [Fact(Skip = "Unhandled exception: System.InvalidOperationException: Sequence contains more than one matching element, InstrumenterHelper.cs:line 138 ")] + public void AsyncAwait_Issue_669_2() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((ValueTask)instance.SendRequest()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0], - assemblyLocation: Assembly.GetExecutingAssembly().Location); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncAwait.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (7, 1), (10, 1), (11, 1), (12, 1), (13, 1), (15, 1)) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void AsyncAwait_Issue_1177() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (ValueTask)instance.SendRequest(); + }, + persistPrepareResultToFile: pathSerialize[0], + assemblyLocation: Assembly.GetExecutingAssembly().Location); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncAwait.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (7, 1), (10, 1), (11, 1), (12, 1), (13, 1), (15, 1)) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void AsyncAwait_Issue_1177() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.Test()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); - document.AssertLinesCovered(BuildConfiguration.Debug, (133, 1), (134, 1), (135, 1), (136, 1), (137, 1)); - Assert.DoesNotContain(document.Branches, x => x.Key.Line == 134); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void AsyncAwait_Issue_1233() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.Test(); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); + document.AssertLinesCovered(BuildConfiguration.Debug, (133, 1), (134, 1), (135, 1), (136, 1), (137, 1)); + Assert.DoesNotContain(document.Branches, x => x.Key.Line == 134); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void AsyncAwait_Issue_1233() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.Test()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); - document.AssertLinesCovered(BuildConfiguration.Debug, (150, 1)); - Assert.DoesNotContain(document.Branches, x => x.Key.Line == 150); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void AsyncAwait_Issue_1275() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.Test(); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); + document.AssertLinesCovered(BuildConfiguration.Debug, (150, 1)); + Assert.DoesNotContain(document.Branches, x => x.Key.Line == 150); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void AsyncAwait_Issue_1275() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - var cts = new CancellationTokenSource(); - ((Task)instance.Execute(cts.Token)).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); - document.AssertLinesCoveredFromTo(BuildConfiguration.Debug, 170, 176); - document.AssertBranchesCovered(BuildConfiguration.Debug, (171, 0, 1), (171, 1, 1)); - Assert.DoesNotContain(document.Branches, x => x.Key.Line == 176); - } - finally - { - File.Delete(path); - } - } + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + var cts = new CancellationTokenSource(); + await (Task)instance.Execute(cts.Token); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + Core.Instrumentation.Document document = TestInstrumentationHelper.GetCoverageResult(path).Document("Instrumentation.AsyncAwait.cs"); + document.AssertLinesCoveredFromTo(BuildConfiguration.Debug, 170, 176); + document.AssertBranchesCovered(BuildConfiguration.Debug, (171, 0, 1), (171, 1, 1)); + Assert.DoesNotContain(document.Branches, x => x.Key.Line == 176); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwaitValueTask.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwaitValueTask.cs index dc7ebddfc..37d16e6f6 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwaitValueTask.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncAwaitValueTask.cs @@ -4,66 +4,67 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void AsyncAwaitWithValueTask() { - [Fact] - public void AsyncAwaitWithValueTask() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => - { - instance.SyncExecution(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + instance.SyncExecution(); - int res = await ((ValueTask)instance.AsyncExecution(true)).ConfigureAwait(false); - res = await ((ValueTask)instance.AsyncExecution(1)).ConfigureAwait(false); - res = await ((ValueTask)instance.AsyncExecution(2)).ConfigureAwait(false); - res = await ((ValueTask)instance.AsyncExecution(3)).ConfigureAwait(false); - res = await ((ValueTask)instance.ConfigureAwait()).ConfigureAwait(false); - res = ((Task)instance.WrappingValueTaskAsTask()).ConfigureAwait(false).GetAwaiter().GetResult(); - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + int res = await (ValueTask)instance.AsyncExecution(true); + res = await (ValueTask)instance.AsyncExecution(1); + res = await (ValueTask)instance.AsyncExecution(2); + res = await (ValueTask)instance.AsyncExecution(3); + res = await (ValueTask)instance.ConfigureAwait(); + res = await (Task)instance.WrappingValueTaskAsTask(); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncAwaitValueTask.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - // AsyncExecution(bool) - (12, 1), (13, 1), (15, 1), (16, 1), (18, 1), (19, 1), (21, 1), (23, 1), (24, 0), (25, 0), (26, 0), (28, 1), (29, 1), - // Async - (32, 10), (33, 10), (34, 10), (35, 10), (36, 10), - // AsyncExecution(int) - (39, 3), (40, 3), (42, 3), (43, 3), (45, 3), (46, 3), - (49, 1), (50, 1), (51, 1), (54, 1), (55, 1), (56, 1), (59, 1), (60, 1), (62, 1), - (65, 0), (66, 0), (67, 0), (68, 0), (71, 0), - // SyncExecution - (77, 1), (78, 1), (79, 1), - // Sync - (82, 1), (83, 1), (84, 1), - // ConfigureAwait - (87, 1), (88, 1), (90, 1), (91, 1), (93, 1), (94, 1), (95, 1), - // WrappingValueTaskAsTask - (98, 1), (99, 1), (101, 1), (102, 1), (104, 1), (106, 1), (107, 1) - ) - .AssertBranchesCovered(BuildConfiguration.Debug, - // AsyncExecution(bool) if statement - (23, 0, 0), (23, 1, 1), - // AsyncExecution(int) switch statement - (46, 0, 3), (46, 1, 1), (46, 2, 1), (46, 3, 1), (46, 4, 0) - ) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncAwaitValueTask.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + // AsyncExecution(bool) + (12, 1), (13, 1), (15, 1), (16, 1), (18, 1), (19, 1), (21, 1), (23, 1), (24, 0), (25, 0), (26, 0), (28, 1), (29, 1), + // Async + (32, 10), (33, 10), (34, 10), (35, 10), (36, 10), + // AsyncExecution(int) + (39, 3), (40, 3), (42, 3), (43, 3), (45, 3), (46, 3), + (49, 1), (50, 1), (51, 1), (54, 1), (55, 1), (56, 1), (59, 1), (60, 1), (62, 1), + (65, 0), (66, 0), (67, 0), (68, 0), (71, 0), + // SyncExecution + (77, 1), (78, 1), (79, 1), + // Sync + (82, 1), (83, 1), (84, 1), + // ConfigureAwait + (87, 1), (88, 1), (90, 1), (91, 1), (93, 1), (94, 1), (95, 1), + // WrappingValueTaskAsTask + (98, 1), (99, 1), (101, 1), (102, 1), (104, 1), (106, 1), (107, 1) + ) + .AssertBranchesCovered(BuildConfiguration.Debug, + // AsyncExecution(bool) if statement + (23, 0, 0), (23, 1, 1), + // AsyncExecution(int) switch statement + (46, 0, 3), (46, 1, 1), (46, 2, 1), (46, 3, 1), (46, 4, 0) + ) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncForeach.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncForeach.cs index 77450d19b..edfa4fe8b 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncForeach.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncForeach.cs @@ -5,66 +5,66 @@ using System.Linq; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void AsyncForeach() { - [Fact] - public void AsyncForeach() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - int res = ((ValueTask)instance.SumWithATwist(AsyncEnumerable.Range(1, 5))).GetAwaiter().GetResult(); - res += ((ValueTask)instance.Sum(AsyncEnumerable.Range(1, 3))).GetAwaiter().GetResult(); - res += ((ValueTask)instance.SumEmpty()).GetAwaiter().GetResult(); - ((ValueTask)instance.GenericAsyncForeach(AsyncEnumerable.Range(1, 3))).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + int res = await (ValueTask)instance.SumWithATwist(AsyncEnumerable.Range(1, 5)); + res += await (ValueTask)instance.Sum(AsyncEnumerable.Range(1, 3)); + res += await (ValueTask)instance.SumEmpty(); + await (ValueTask)instance.GenericAsyncForeach(AsyncEnumerable.Range(1, 3)); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncForeach.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - // SumWithATwist(IAsyncEnumerable) - // Apparently due to entering and exiting the async state machine, line 17 - // (the top of an "await foreach" loop) is reached three times *plus* twice - // per loop iteration. So, in this case, with five loop iterations, we end - // up with 3 + 5 * 2 = 13 hits. - (14, 1), (15, 1), (17, 13), (18, 5), (19, 5), (20, 5), (21, 5), (22, 5), - (24, 0), (25, 0), (26, 0), (27, 5), (29, 1), (30, 1), - // Sum(IAsyncEnumerable) - (34, 1), (35, 1), (37, 9), (38, 3), (39, 3), (40, 3), (42, 1), (43, 1), - // SumEmpty() - (47, 1), (48, 1), (50, 3), (51, 0), (52, 0), (53, 0), (55, 1), (56, 1), - // GenericAsyncForeach - (59,1), (60, 9), (61, 3), (62, 3), (63, 3), (64, 1) - ) - .AssertBranchesCovered(BuildConfiguration.Debug, - // SumWithATwist(IAsyncEnumerable) - (17, 2, 1), (17, 3, 5), (19, 0, 5), (19, 1, 0), - // Sum(IAsyncEnumerable) - (37, 0, 1), (37, 1, 3), - // SumEmpty() - // If we never entered the loop, that's a branch not taken, which is - // what we want to see. - (50, 0, 1), (50, 1, 0), - (60, 0, 1), (60, 1, 3) - ) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 5); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncForeach.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + // SumWithATwist(IAsyncEnumerable) + // Apparently due to entering and exiting the async state machine, line 17 + // (the top of an "await foreach" loop) is reached three times *plus* twice + // per loop iteration. So, in this case, with five loop iterations, we end + // up with 3 + 5 * 2 = 13 hits. + (14, 1), (15, 1), (17, 13), (18, 5), (19, 5), (20, 5), (21, 5), (22, 5), + (24, 0), (25, 0), (26, 0), (27, 5), (29, 1), (30, 1), + // Sum(IAsyncEnumerable) + (34, 1), (35, 1), (37, 9), (38, 3), (39, 3), (40, 3), (42, 1), (43, 1), + // SumEmpty() + (47, 1), (48, 1), (50, 3), (51, 0), (52, 0), (53, 0), (55, 1), (56, 1), + // GenericAsyncForeach + (59, 1), (60, 9), (61, 3), (62, 3), (63, 3), (64, 1) + ) + .AssertBranchesCovered(BuildConfiguration.Debug, + // SumWithATwist(IAsyncEnumerable) + (17, 2, 1), (17, 3, 5), (19, 0, 5), (19, 1, 0), + // Sum(IAsyncEnumerable) + (37, 0, 1), (37, 1, 3), + // SumEmpty() + // If we never entered the loop, that's a branch not taken, which is + // what we want to see. + (50, 0, 1), (50, 1, 0), + (60, 0, 1), (60, 1, 3) + ) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 5); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncIterator.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncIterator.cs index a14157c42..03312468c 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AsyncIterator.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AsyncIterator.cs @@ -4,49 +4,49 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void AsyncIterator() { - [Fact] - public void AsyncIterator() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - int res = ((Task)instance.Issue1104_Repro()).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + int res = await (Task)instance.Issue1104_Repro(); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AsyncIterator.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - // Issue1104_Repro() - (14, 1), (15, 1), (17, 203), (18, 100), (19, 100), (20, 100), (22, 1), (23, 1), - // CreateSequenceAsync() - (26, 1), (27, 202), (28, 100), (29, 100), (30, 100), (31, 100), (32, 1) - ) - .AssertBranchesCovered(BuildConfiguration.Debug, - // Issue1104_Repro(), - (17, 0, 1), (17, 1, 100), - // CreateSequenceAsync() - (27, 0, 1), (27, 1, 100) - ) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AsyncIterator.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + // Issue1104_Repro() + (14, 1), (15, 1), (17, 203), (18, 100), (19, 100), (20, 100), (22, 1), (23, 1), + // CreateSequenceAsync() + (26, 1), (27, 202), (28, 100), (29, 100), (30, 100), (31, 100), (32, 1) + ) + .AssertBranchesCovered(BuildConfiguration.Debug, + // Issue1104_Repro(), + (17, 0, 1), (17, 1, 100), + // CreateSequenceAsync() + (27, 0, 1), (27, 1, 100) + ) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 2); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AutoProps.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AutoProps.cs index 134a61bad..6c7c56ab7 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AutoProps.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AutoProps.cs @@ -4,148 +4,191 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Theory] + [InlineData(true)] + [InlineData(false)] + public void SkipAutoProps(bool skipAutoProps) { - [Theory] - [InlineData(true)] - [InlineData(false)] - public void SkipAutoProps(bool skipAutoProps) + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] parameters) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] parameters) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.AutoPropsNonInit = 10; - instance.AutoPropsInit = 20; - int readValue = instance.AutoPropsNonInit; - readValue = instance.AutoPropsInit; + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.AutoPropsNonInit = 10; + instance.AutoPropsInit = 20; + int readValue = instance.AutoPropsNonInit; + readValue = instance.AutoPropsInit; + return Task.CompletedTask; + }, + persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); + + return 0; + }, new string[] { path, skipAutoProps.ToString() }); + + if (skipAutoProps) + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 12, 13) + .AssertNonInstrumentedLines(BuildConfiguration.Release, 12, 13) + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 9, 11) + .AssertLinesCovered(BuildConfiguration.Debug, (7, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (10, 1)); + } + else + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 7, 13) + .AssertLinesCoveredFromTo(BuildConfiguration.Release, 10, 10) + .AssertLinesCoveredFromTo(BuildConfiguration.Release, 12, 13); + } + } + finally + { + File.Delete(path); + } + } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void SkipAutoPropsInRecords(bool skipAutoProps) + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] parameters) => + { + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.RecordAutoPropsNonInit = string.Empty; + instance.RecordAutoPropsInit = string.Empty; + string readValue = instance.RecordAutoPropsInit; + readValue = instance.RecordAutoPropsNonInit; return Task.CompletedTask; - }, - persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); + }, + persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); - return 0; - }, new string[] { path, skipAutoProps.ToString() }); + return 0; + }, new string[] { path, skipAutoProps.ToString() }); - if (skipAutoProps) - { - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AutoProps.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 12, 13) - .AssertNonInstrumentedLines(BuildConfiguration.Release, 12, 13) - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 9, 11) - .AssertLinesCovered(BuildConfiguration.Debug, (7, 1)) - .AssertLinesCovered(BuildConfiguration.Release, (10, 1)); - } - else - { - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AutoProps.cs") - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 7, 13) - .AssertLinesCoveredFromTo(BuildConfiguration.Release, 10, 10) - .AssertLinesCoveredFromTo(BuildConfiguration.Release, 12, 13); - } - } - finally - { - File.Delete(path); - } + if (skipAutoProps) + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 23, 24) + .AssertNonInstrumentedLines(BuildConfiguration.Release, 23, 24) + .AssertLinesCovered(BuildConfiguration.Debug, (18, 1), (20, 1), (21, 1), (22, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (21, 1)); + } + else + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 18, 24) + .AssertLinesCoveredFromTo(BuildConfiguration.Release, 21, 21) + .AssertLinesCoveredFromTo(BuildConfiguration.Release, 23, 24); } + } + finally + { + File.Delete(path); + } + } - [Theory] - [InlineData(true)] - [InlineData(false)] - public void SkipAutoPropsInRecords(bool skipAutoProps) + [Theory] + [InlineData(true)] + [InlineData(false)] + public void SkipRecordWithProperties(bool skipAutoProps) + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] parameters) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] parameters) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.RecordAutoPropsNonInit = string.Empty; - instance.RecordAutoPropsInit = string.Empty; - string readValue = instance.RecordAutoPropsInit; - readValue = instance.RecordAutoPropsNonInit; - return Task.CompletedTask; - }, - persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + return Task.CompletedTask; + }, + persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); - return 0; - }, new string[] { path, skipAutoProps.ToString() }); + return 0; + }, new string[] { path, skipAutoProps.ToString() }); - if (skipAutoProps) - { - TestInstrumentationHelper.GetCoverageResult(path).GenerateReport(show: true) - .Document("Instrumentation.AutoProps.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 23, 24) - .AssertNonInstrumentedLines(BuildConfiguration.Release, 23, 24) - .AssertLinesCovered(BuildConfiguration.Debug, (18, 1), (20, 1), (21, 1), (22, 1)) - .AssertLinesCovered(BuildConfiguration.Release, (21, 1)); - } - else - { - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AutoProps.cs") - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 18, 24) - .AssertLinesCoveredFromTo(BuildConfiguration.Release, 21, 21) - .AssertLinesCoveredFromTo(BuildConfiguration.Release, 23, 24); - } - } - finally - { - File.Delete(path); - } + if (skipAutoProps) + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 29, 29) + .AssertNonInstrumentedLines(BuildConfiguration.Release, 29, 29) + .AssertLinesCovered(BuildConfiguration.Debug, (32, 1), (33, 1), (34, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (33, 1)); + } + else + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (29, 1), (31, 1), (32, 1), (33, 1), (34, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (29, 1), (31, 1), (33, 1)); } + } + finally + { + File.Delete(path); + } + } - [Theory] - [InlineData(true)] - [InlineData(false)] - public void SkipRecordWithProperties(bool skipAutoProps) + [Theory] + [InlineData(true)] + [InlineData(false)] + public void SkipInheritingRecordsWithProperties(bool skipAutoProps) + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] parameters) => { - string path = Path.GetTempFileName(); - try + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => { - FunctionExecutor.Run(async (string[] parameters) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - return Task.CompletedTask; - }, - persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); + return Task.CompletedTask; + }, + persistPrepareResultToFile: parameters[0], skipAutoProps: bool.Parse(parameters[1])); - return 0; - }, new string[] { path, skipAutoProps.ToString() }); + return 0; + }, new string[] { path, skipAutoProps.ToString() }); - if (skipAutoProps) - { - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AutoProps.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 29, 29) - .AssertNonInstrumentedLines(BuildConfiguration.Release, 29, 29) - .AssertLinesCovered(BuildConfiguration.Debug, (32, 1), (33, 1), (34, 1)) - .AssertLinesCovered(BuildConfiguration.Release, (33, 1)); + if (skipAutoProps) + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 39, 39) + .AssertNonInstrumentedLines(BuildConfiguration.Release, 39, 39) + .AssertLinesCovered(BuildConfiguration.Debug, (41, 1), (44, 1), (45, 1), (46, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (45, 1)); - } - else - { - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AutoProps.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (29, 3), (31, 1), (32, 1), (33, 1), (34, 1)) - .AssertLinesCovered(BuildConfiguration.Release, (29, 3), (31, 1), (33, 1)); - } - } - finally - { - File.Delete(path); - } } + else + { + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AutoProps.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (39, 1), (41, 1), (44, 1), (45, 1), (46, 1)) + .AssertLinesCovered(BuildConfiguration.Release, (39, 1), (41, 1), (45, 1)); + } + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.AwaitUsing.cs b/test/coverlet.core.tests/Coverage/CoverageTests.AwaitUsing.cs index 82bab4694..75d7b2acd 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.AwaitUsing.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.AwaitUsing.cs @@ -4,50 +4,53 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void AwaitUsing() { - [Fact] - public void AwaitUsing() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((ValueTask)instance.HasAwaitUsing()).GetAwaiter().GetResult(); - ((Task)instance.Issue914_Repro()).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (ValueTask)instance.HasAwaitUsing(); + await (Task)instance.Issue914_Repro(); + await (Task)instance.Issue1490_Repro(); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.AwaitUsing.cs") - .AssertLinesCovered(BuildConfiguration.Debug, - // HasAwaitUsing() - (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), - // Issue914_Repro() - (21, 1), (22, 1), (23, 1), (24, 1), - // Issue914_Repro_Example1() - (28, 1), (29, 1), (30, 1), - // Issue914_Repro_Example2() - (34, 1), (35, 1), (36, 1), (37, 1), - // MyTransaction.DisposeAsync() - (43, 2), (44, 2), (45, 2) - ) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.AwaitUsing.cs") + .AssertLinesCovered(BuildConfiguration.Debug, + // HasAwaitUsing() + (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), + // Issue914_Repro() + (21, 1), (22, 1), (23, 1), (24, 1), + // Issue914_Repro_Example1() + (28, 1), (29, 1), (30, 1), + // Issue914_Repro_Example2() + (34, 1), (35, 1), (36, 1), (37, 1), + // Issue1490_Repro() + (40, 1), (41, 1), (42, 1), (43, 1), + // MyTransaction.DisposeAsync() + (48, 3), (49, 3), (50, 3) + ) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.CatchBlock.cs b/test/coverlet.core.tests/Coverage/CoverageTests.CatchBlock.cs index fc6e1cb13..38fce17bc 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.CatchBlock.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.CatchBlock.cs @@ -4,77 +4,77 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void CatchBlock_Issue465() { - [Fact] - public void CatchBlock_Issue465() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Test(); - instance.Test_Catch(); - ((Task)instance.TestAsync()).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch()).ConfigureAwait(false).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + instance.Test(); + instance.Test_Catch(); + await (Task)instance.TestAsync(); + await (Task)instance.TestAsync_Catch(); - instance.Test(true); - instance.Test_Catch(true); - ((Task)instance.TestAsync(true)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch(true)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test(true); + instance.Test_Catch(true); + await (Task)instance.TestAsync(true); + await (Task)instance.TestAsync_Catch(true); - instance.Test(false); - instance.Test_Catch(false); - ((Task)instance.TestAsync(false)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch(false)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test(false); + instance.Test_Catch(false); + await (Task)instance.TestAsync(false); + await (Task)instance.TestAsync_Catch(false); - instance.Test_WithTypedCatch(); - instance.Test_Catch_WithTypedCatch(); - ((Task)instance.TestAsync_WithTypedCatch()).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch_WithTypedCatch()).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test_WithTypedCatch(); + instance.Test_Catch_WithTypedCatch(); + await (Task)instance.TestAsync_WithTypedCatch(); + await (Task)instance.TestAsync_Catch_WithTypedCatch(); - instance.Test_WithTypedCatch(true); - instance.Test_Catch_WithTypedCatch(true); - ((Task)instance.TestAsync_WithTypedCatch(true)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch_WithTypedCatch(true)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test_WithTypedCatch(true); + instance.Test_Catch_WithTypedCatch(true); + await (Task)instance.TestAsync_WithTypedCatch(true); + await (Task)instance.TestAsync_Catch_WithTypedCatch(true); - instance.Test_WithTypedCatch(false); - instance.Test_Catch_WithTypedCatch(false); - ((Task)instance.TestAsync_WithTypedCatch(false)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch_WithTypedCatch(false)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test_WithTypedCatch(false); + instance.Test_Catch_WithTypedCatch(false); + await (Task)instance.TestAsync_WithTypedCatch(false); + await (Task)instance.TestAsync_Catch_WithTypedCatch(false); - instance.Test_WithNestedCatch(true); - instance.Test_Catch_WithNestedCatch(true); - ((Task)instance.TestAsync_WithNestedCatch(true)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch_WithNestedCatch(true)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test_WithNestedCatch(true); + instance.Test_Catch_WithNestedCatch(true); + await (Task)instance.TestAsync_WithNestedCatch(true); + await (Task)instance.TestAsync_Catch_WithNestedCatch(true); - instance.Test_WithNestedCatch(false); - instance.Test_Catch_WithNestedCatch(false); - ((Task)instance.TestAsync_WithNestedCatch(false)).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.TestAsync_Catch_WithNestedCatch(false)).ConfigureAwait(false).GetAwaiter().GetResult(); + instance.Test_WithNestedCatch(false); + instance.Test_Catch_WithNestedCatch(false); + await (Task)instance.TestAsync_WithNestedCatch(false); + await (Task)instance.TestAsync_Catch_WithNestedCatch(false); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - CoverageResult res = TestInstrumentationHelper.GetCoverageResult(path); - res.Document("Instrumentation.CatchBlock.cs") - .AssertLinesCoveredAllBut(BuildConfiguration.Debug, 45, 59, 113, 127, 137, 138, 139, 153, 154, 155, 156, 175, 189, 199, 200, 201, 222, 223, 224, 225, 252, 266, 335, 349) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 6) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Release, 6); - } - finally - { - File.Delete(path); - } - } + CoverageResult res = TestInstrumentationHelper.GetCoverageResult(path); + res.Document("Instrumentation.CatchBlock.cs") + .AssertLinesCoveredAllBut(BuildConfiguration.Debug, 45, 59, 113, 127, 137, 138, 139, 153, 154, 155, 156, 175, 189, 199, 200, 201, 222, 223, 224, 225, 252, 266, 335, 349) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 6) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Release, 6); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.DoesNotReturn.cs b/test/coverlet.core.tests/Coverage/CoverageTests.DoesNotReturn.cs index e5950232a..a0c391d75 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.DoesNotReturn.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.DoesNotReturn.cs @@ -5,299 +5,296 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + + [Fact] + public void NoBranches_DoesNotReturnAttribute_InstrumentsCorrect() { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => + { + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.NoBranches(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + + return 0; + + }, new string[] { path }); - [Fact] - public void NoBranches_DoesNotReturnAttribute_InstrumentsCorrect() + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 12, 13, 14) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 15, 16); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void If_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.NoBranches(); } + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.If(); } catch (Exception) { } return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + }, persistPrepareResultToFile: pathSerialize[0]); - return 0; + return 0; - }, new string[] { path }); + }, new string[] { path }); - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 12, 13, 14) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 15, 16); - } - finally - { - File.Delete(path); - } - } + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 19, 20, 22, 23, 24, 25, 29, 30, 26, 27); + } + finally + { + File.Delete(path); + } + } - [Fact(Skip = "Hang due to System.Console.ReadKey()")] - public void If_DoesNotReturnAttribute_InstrumentsCorrect() - { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.If(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 19, 20, 22, 23, 24, 25, 29, 30) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 26, 27); - } - finally - { - File.Delete(path); - } - } - - [Fact(Skip = "Hang due to System.Console.ReadKey()")] - public void Switch_DoesNotReturnAttribute_InstrumentsCorrect() + [Fact] + public void Switch_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.Switch(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 33, 34, 36, 39, 40, 44, 45, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 68, 69) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 41, 42); - } - finally - { - File.Delete(path); - } - } - - [Fact(Skip = "Hang due to System.Console.ReadKey()")] - public void Subtle_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.Switch(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 33, 34, 36, 39, 40, 44, 45, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 68, 69, 41, 42); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Subtle_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.Subtle(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 72, 73, 75, 78, 82, 83, 86, 87, 91, 92, 95, 101, 102, 103) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 79, 80, 88, 96, 98, 99); - } - finally - { - File.Delete(path); - } - } - - [Fact(Skip = "Hang due to System.Console.ReadKey()")] - public void UnreachableBranch_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.Subtle(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 72, 73, 75, 78, 82, 83, 86, 87, 91, 92, 95, 101, 102, 103, 79, 80, 88, 96, 98, 99); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void UnreachableBranch_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.UnreachableBranch(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 106, 107, 108) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 110, 111, 112, 113, 114); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void CallsGenericMethodDoesNotReturn_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.UnreachableBranch(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 106, 107, 108, 110, 111, 112, 113, 114); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void CallsGenericMethodDoesNotReturn_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.CallsGenericMethodDoesNotReturn(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 118, 119, 124, 125, 126) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 127, 128); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void CallsGenericClassDoesNotReturn_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.CallsGenericMethodDoesNotReturn(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 118, 119, 124, 125, 126) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 127, 128); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void CallsGenericClassDoesNotReturn_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.CallsGenericClassDoesNotReturn(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 134, 135, 140, 141, 142) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 143, 144); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void WithLeave_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.CallsGenericClassDoesNotReturn(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 134, 135, 140, 141, 142) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 143, 144); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void WithLeave_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.WithLeave(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 147, 149, 150, 151, 152, 153, 154, 155, 156, 159, 161, 166, 167, 168) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 163, 164); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void FiltersAndFinallies_DoesNotReturnAttribute_InstrumentsCorrect() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.WithLeave(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 147, 149, 150, 151, 152, 153, 154, 155, 156, 159, 161, 166, 167, 168) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 163, 164); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void FiltersAndFinally_DoesNotReturnAttribute_InstrumentsCorrect() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - try { instance.FiltersAndFinallies(); } - catch (Exception) { } - return Task.CompletedTask; - - }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.DoesNotReturn.cs") - .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 171, 173, 174, 175, 179, 180, 181, 182, 185, 186, 187, 188, 192, 193, 194) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 176, 177, 183, 184, 189, 190, 195, 196, 197); - } - finally - { - File.Delete(path); - } - } + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + try { instance.FiltersAndFinally(); } + catch (Exception) { } + return Task.CompletedTask; + + }, persistPrepareResultToFile: pathSerialize[0], doesNotReturnAttributes: _ => new string[] { "DoesNotReturnAttribute" }); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.DoesNotReturn.cs") + .AssertInstrumentLines(BuildConfiguration.Debug, 7, 8, 171, 173, 174, 175, 179, 180, 181, 182, 185, 186, 187, 188, 192, 193, 194) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 176, 177, 183, 184, 189, 190, 195, 196, 197); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs b/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs index ed8906a5f..c745f12d4 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs @@ -9,300 +9,378 @@ using Coverlet.Core.Helpers; using Coverlet.Core.Samples.Tests; using Coverlet.Core.Symbols; +using Coverlet.Tests.Utils; +using Coverlet.Tests.Xunit.Extensions; using Moq; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + + [ConditionalFact] + [SkipOnOS(OS.MacOS, "Windows path format only - Simplified output paths issue")] + [SkipOnOS(OS.Linux, "Windows path format only - Simplified output paths issue")] + public void TestCoverageSkipModule__AssemblyMarkedAsExcludeFromCodeCoverage() { - [Fact] - public void TestCoverageSkipModule__AssemblyMarkedAsExcludeFromCodeCoverage() + var partialMockFileSystem = new Mock(); + partialMockFileSystem.CallBase = true; + partialMockFileSystem.Setup(fs => fs.NewFileStream(It.IsAny(), It.IsAny(), It.IsAny())).Returns((string path, FileMode mode, FileAccess access) => + { + return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); + }); + var loggerMock = new Mock(); + + string excludedbyattributeDll = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), "coverlet.tests.projectsample.excludedbyattribute.dll").First(); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(excludedbyattributeDll, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var parameters = new CoverageParameters + { + IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, + IncludeDirectories = Array.Empty(), + ExcludeFilters = Array.Empty(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = true, + SingleHit = false, + MergeWith = string.Empty, + UseSourceLink = false + }; + + // test skip module include test assembly feature + var coverage = new Coverage(excludedbyattributeDll, parameters, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, + new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); + CoveragePrepareResult result = coverage.PrepareModules(); + Assert.Empty(result.Results); + loggerMock.Verify(l => l.LogVerbose(It.IsAny())); + } + + [Fact] + public void ExcludeFromCodeCoverage_CompilerGeneratedMethodsAndTypes() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - var partialMockFileSystem = new Mock(); - partialMockFileSystem.CallBase = true; - partialMockFileSystem.Setup(fs => fs.NewFileStream(It.IsAny(), It.IsAny(), It.IsAny())).Returns((string path, FileMode mode, FileAccess access) => - { - return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); - }); - var loggerMock = new Mock(); - - string excludedbyattributeDll = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), "coverlet.tests.projectsample.excludedbyattribute.dll").First(); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(excludedbyattributeDll, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - var parameters = new CoverageParameters - { - IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, - IncludeDirectories = Array.Empty(), - ExcludeFilters = Array.Empty(), - ExcludedSourceFiles = Array.Empty(), - ExcludeAttributes = Array.Empty(), - IncludeTestAssembly = true, - SingleHit = false, - MergeWith = string.Empty, - UseSourceLink = false - }; - - // test skip module include test assembly feature - var coverage = new Coverage(excludedbyattributeDll, parameters, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, - new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); - CoveragePrepareResult result = coverage.PrepareModules(); - Assert.Empty(result.Results); - loggerMock.Verify(l => l.LogVerbose(It.IsAny())); - } - - [Fact] - public void ExcludeFromCodeCoverage_CompilerGeneratedMethodsAndTypes() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.Test("test"); + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + Core.Instrumentation.Document document = result.Document("Instrumentation.ExcludeFromCoverage.cs"); + + int[] coveredLines = document.Lines.Where(x => + x.Value.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr" || + x.Value.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/")) + .Select(x => x.Value.Number).ToArray(); + + int[] notCoveredLines = document.Lines.Where(x => + x.Value.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2" || + x.Value.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/")) + .Select(x => x.Value.Number).ToArray(); + + document.AssertLinesCovered(BuildConfiguration.Debug, coveredLines); + document.AssertLinesNotCovered(BuildConfiguration.Debug, notCoveredLines); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverage_CompilerGeneratedMethodsAndTypes_NestedMembers() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.Test("test")).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - Core.Instrumentation.Document document = result.Document("Instrumentation.ExcludeFromCoverage.cs"); - - // Invoking method "Test" of class "MethodsWithExcludeFromCodeCoverageAttr" we expect to cover 100% lines for MethodsWithExcludeFromCodeCoverageAttr - Assert.DoesNotContain(document.Lines, l => - (l.Value.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr" || - // Compiler generated - l.Value.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/")) && - l.Value.Hits == 0); - // and 0% for MethodsWithExcludeFromCodeCoverageAttr2 - Assert.DoesNotContain(document.Lines, l => - (l.Value.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2" || - // Compiler generated - l.Value.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/")) && - l.Value.Hits == 1); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverage_CompilerGeneratedMethodsAndTypes_NestedMembers() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.Test(); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path) + .GenerateReport(show: true); + + result.Document("Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (14, 1), (15, 1), (16, 1)) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 9, 11); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverageCompilerGeneratedMethodsAndTypes_Issue670() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Test(); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (14, 1), (15, 1), (16, 1)) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 9, 11); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverageCompilerGeneratedMethodsAndTypes_Issue670() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.Test("test"); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.ExcludeFromCoverage.Issue670.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (8, 1), (9, 1), (10, 1), (11, 1)) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 15, 53); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverageNextedTypes() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Test("test"); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.ExcludeFromCoverage.Issue670.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (8, 1), (9, 1), (10, 1), (11, 1)) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 15, 53); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverageNextedTypes() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + Assert.Equal(42, instance.Run()); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .GenerateReport(show: true) + .Document("Instrumentation.ExcludeFromCoverage.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (148, 1)) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 153, 163); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverage_Issue809() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - Assert.Equal(42, instance.Run()); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .GenerateReport(show:true) - .Document("Instrumentation.ExcludeFromCoverage.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (145, 1)) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 146, 160); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverage_Issue809() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + Assert.True(await (Task)instance.EditTask(null, 10)); + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFromCoverage.Issue809.cs") + + // public async Task EditTask(Tasks_Issue809 tasks, int val) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 153, 162) + // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 167, 170) -> Shoud be not covered, issue with lambda + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 167, 197) + + // public List GetAllTasks() + // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 263, 266) -> Shoud be not covered, issue with lambda + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 263, 264); + // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 269, 275) -> Shoud be not covered, issue with lambda + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverageAutoGeneratedGetSet() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - Assert.True(((Task)instance.EditTask(null, 10)).GetAwaiter().GetResult()); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFromCoverage.Issue809.cs") - - // public async Task EditTask(Tasks_Issue809 tasks, int val) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 153, 162) - // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 167, 170) -> Shoud be not covered, issue with lambda - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 167, 197) - - // public List GetAllTasks() - // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 263, 266) -> Shoud be not covered, issue with lambda - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 263, 264); - // .AssertNonInstrumentedLines(BuildConfiguration.Debug, 269, 275) -> Shoud be not covered, issue with lambda - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverageAutoGeneratedGetSet() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.SetId(10); + Assert.Equal(10, instance.Id); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFromCoverage.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 170) + .AssertLinesCovered(BuildConfiguration.Debug, 172); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverageAutoGeneratedGet() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.SetId(10); - Assert.Equal(10, instance.Id); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFromCoverage.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 167) - .AssertLinesCovered(BuildConfiguration.Debug, 169); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverageAutoGeneratedGet() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.SetId(10); + Assert.Equal(10, instance.Id); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFromCoverage.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 180) + .AssertLinesCovered(BuildConfiguration.Debug, 181, 184); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void ExcludeFromCodeCoverage_Issue1302() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.SetId(10); - Assert.Equal(10, instance.Id); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFromCoverage.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 177) - .AssertLinesCovered(BuildConfiguration.Debug, 178, 181); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void ExcludeFromCodeCoverage_Issue1302() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.Run(); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFromCoverage.Issue1302.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 10, 13); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void MethodsWithExcludeFromCodeCoverageAttr() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => + { + CoveragePrepareResult coveragePrepareResult = + await TestInstrumentationHelper.Run(async instance => + { + instance.TestLambda(string.Empty); + instance.TestLambda(string.Empty, 1); + foreach (dynamic _ in instance.TestYield("abc")) ; + foreach (dynamic _ in instance.TestYield("abc", 1)) ; + instance.TestLocalFunction(string.Empty); + instance.TestLocalFunction(string.Empty, 1); + await (Task)instance.TestAsyncAwait(); + await (Task)instance.TestAsyncAwait(1); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .GenerateReport(show: true) + .Document("Instrumentation.ExcludeFromCoverage.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 15, 16, 28, 29, 30, 31, 45, 56, 58, 59, 60, 61) + .AssertLinesCovered(BuildConfiguration.Debug, 21, 22, 36, 37, 38, 39, 50, 66, 69, 70, 71); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void MethodsWithExcludeFromCodeCoverageAttr2() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Run(); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFromCoverage.Issue1302.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 10, 13); - } - finally - { - File.Delete(path); - } - } + CoveragePrepareResult coveragePrepareResult = + await TestInstrumentationHelper.Run(async instance => + { + instance.TestLambda(string.Empty); + instance.TestLambda(string.Empty, 1); + foreach (dynamic _ in instance.TestYield("abc")) ; + foreach (dynamic _ in instance.TestYield("abc", 1)) ; + instance.TestLocalFunction(string.Empty); + instance.TestLocalFunction(string.Empty, 1); + await (Task)instance.TestAsyncAwait(); + await (Task)instance.TestAsyncAwait(1); + }, + persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .GenerateReport(show: true) + .Document("Instrumentation.ExcludeFromCoverage.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 92, 93, 107, 108, 109, 110, 121, 137, 140, 141, 142) + .AssertLinesCovered(BuildConfiguration.Debug, 85, 86, 98, 99, 100, 101, 115, 126, 129, 130, 131); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.Filters.cs b/test/coverlet.core.tests/Coverage/CoverageTests.Filters.cs index e86e61a3f..02370b37c 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.Filters.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.Filters.cs @@ -6,127 +6,128 @@ using System.Reflection; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void ExcludeFilteredNestedAutogeneratedTypes() { - [Fact] - public void ExcludeFilteredNestedAutogeneratedTypes() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Run(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.Run(); - PropertyInfo stateProp = null; - foreach (Type type in ((Type)instance.GetType()).Assembly.GetTypes()) - { - if (typeof(Issue_689).FullName == type.FullName) - { - Assert.Equal(0, (stateProp = type.GetProperty("State")).GetValue(null)); - break; - } - } + PropertyInfo stateProp = null; + foreach (Type type in ((Type)instance.GetType()).Assembly.GetTypes()) + { + if (typeof(Issue_689).FullName == type.FullName) + { + Assert.Equal(0, (stateProp = type.GetProperty("State")).GetValue(null)); + break; + } + } - foreach (Type type in ((Type)instance.GetType()).Assembly.GetTypes()) - { - if (typeof(EventSource_Issue_689).FullName == type.FullName) - { - type.GetMethod("RaiseEvent").Invoke(null, null); - break; - } - } + foreach (Type type in ((Type)instance.GetType()).Assembly.GetTypes()) + { + if (typeof(EventSource_Issue_689).FullName == type.FullName) + { + type.GetMethod("RaiseEvent").Invoke(null, null); + break; + } + } - Assert.Equal(2, stateProp.GetValue(null)); + Assert.Equal(2, stateProp.GetValue(null)); - return Task.CompletedTask; - }, - includeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterNestedAutogeneratedTypes", $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*Issue_689" }, - excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*NestedToFilterOut", $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*Uncoverlet" }, - persistPrepareResultToFile: pathSerialize[0]); + return Task.CompletedTask; + }, + includeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterNestedAutogeneratedTypes", $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*Issue_689" }, + excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*NestedToFilterOut", $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*Uncoverlet" }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFilter.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (12, 1), (13, 1), (14, 1)) - .AssertLinesCovered(BuildConfiguration.Debug, (27, 1), (28, 1), (29, 1), (30, 1), (31, 1)) - .AssertLinesCovered(BuildConfiguration.Debug, (39, 2), (40, 2), (41, 2), (43, 5)) - .AssertLinesCovered(BuildConfiguration.Debug, (50, 1), (51, 1), (52, 1)) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 17, 21) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 33, 36); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFilter.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (12, 1), (13, 1), (14, 1)) + .AssertLinesCovered(BuildConfiguration.Debug, (27, 1), (28, 1), (29, 1), (30, 1), (31, 1)) + .AssertLinesCovered(BuildConfiguration.Debug, (39, 2), (40, 2), (41, 2), (43, 5)) + .AssertLinesCovered(BuildConfiguration.Debug, (50, 1), (51, 1), (52, 1)) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 17, 21) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 33, 36); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void ExcludeFilteredTypes() + [Fact] + public void ExcludeFilteredTypes() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - Assert.Equal(42, instance.Run()); - return Task.CompletedTask; - }, - excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterOuterTypes" }, - persistPrepareResultToFile: pathSerialize[0]); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + Assert.Equal(42, instance.Run()); + return Task.CompletedTask; + }, + excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterOuterTypes" }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFilter.cs") - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 1, 62) - .AssertLinesCovered(BuildConfiguration.Debug, (66, 1), (68, 1)); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFilter.cs") + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 1, 62) + .AssertLinesCovered(BuildConfiguration.Debug, (66, 1), (68, 1)); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void ExcludeFilteredNestedTypes() + [Fact] + public void ExcludeFilteredNestedTypes() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - Assert.Equal(42, instance.Run()); - return Task.CompletedTask; - }, - excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterClass2" }, - persistPrepareResultToFile: pathSerialize[0]); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + Assert.Equal(42, instance.Run()); + return Task.CompletedTask; + }, + excludeFilter: moduleFileName => new string[] { $"[{Path.GetFileNameWithoutExtension(moduleFileName)}*]*ExcludeFilterClass2" }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.ExcludeFilter.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (73, 1)) - .AssertNonInstrumentedLines(BuildConfiguration.Debug, 75, 93); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.ExcludeFilter.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (73, 1)) + .AssertNonInstrumentedLines(BuildConfiguration.Debug, 75, 93); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.GenericAsyncIterator.cs b/test/coverlet.core.tests/Coverage/CoverageTests.GenericAsyncIterator.cs index 8aa18b285..fd3803a00 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.GenericAsyncIterator.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.GenericAsyncIterator.cs @@ -5,38 +5,37 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void GenericAsyncIterator() { - [Fact] - public void GenericAsyncIterator() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run>(instance => - { - List res = ((Task>)instance.Issue1383()).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run>(async instance => + { + List res = await (Task>)instance.Issue1383(); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); - - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.GenericAsyncIterator.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (13, 1), (14, 1), (20, 1), (21, 1), (22, 1)) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.GenericAsyncIterator.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (13, 1), (14, 1), (20, 1), (21, 1), (22, 1)) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.IntegerOverflow.cs b/test/coverlet.core.tests/Coverage/CoverageTests.IntegerOverflow.cs index 5e206fa34..a13af2e94 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.IntegerOverflow.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.IntegerOverflow.cs @@ -4,65 +4,66 @@ using System.IO; using Coverlet.Core.Abstractions; using Coverlet.Core.Instrumentation; +using Coverlet.Tests.Utils; using Moq; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void CoverageResult_NegativeLineCoverage_TranslatedToMaxValueOfInt32() { - [Fact] - public void CoverageResult_NegativeLineCoverage_TranslatedToMaxValueOfInt32() - { - var instrumenterResult = new InstrumenterResult - { - HitsFilePath = "HitsFilePath", - SourceLink = "SourceLink", - ModulePath = "ModulePath" - }; + var instrumenterResult = new InstrumenterResult + { + HitsFilePath = "HitsFilePath", + SourceLink = "SourceLink", + ModulePath = "ModulePath" + }; - instrumenterResult.HitCandidates.Add(new HitCandidate(false, 0, 1, 1)); + instrumenterResult.HitCandidates.Add(new HitCandidate(false, 0, 1, 1)); - var document = new Document - { - Index = 0, - Path = "Path0" - }; + var document = new Document + { + Index = 0, + Path = "Path0" + }; - document.Lines.Add(1, new Line - { - Class = "Class0", - Hits = 0, - Method = "Method0", - Number = 1 - }); + document.Lines.Add(1, new Line + { + Class = "Class0", + Hits = 0, + Method = "Method0", + Number = 1 + }); - instrumenterResult.Documents.Add("document", document); + instrumenterResult.Documents.Add("document", document); - var coveragePrepareResult = new CoveragePrepareResult - { - UseSourceLink = true, - Results = new[] {instrumenterResult}, - Parameters = new CoverageParameters() - }; + var coveragePrepareResult = new CoveragePrepareResult + { + UseSourceLink = true, + Results = new[] { instrumenterResult }, + Parameters = new CoverageParameters() + }; - Stream memoryStream = new MemoryStream(); - var binaryWriter = new BinaryWriter(memoryStream); - binaryWriter.Write(1); - binaryWriter.Write(-1); - memoryStream.Position = 0; + Stream memoryStream = new MemoryStream(); + var binaryWriter = new BinaryWriter(memoryStream); + binaryWriter.Write(1); + binaryWriter.Write(-1); + memoryStream.Position = 0; - var fileSystemMock = new Mock(); - fileSystemMock.Setup(x => x.Exists(It.IsAny())).Returns(true); - fileSystemMock.Setup(x => x.NewFileStream(It.IsAny(), FileMode.Open, FileAccess.Read)) - .Returns(memoryStream); + var fileSystemMock = new Mock(); + fileSystemMock.Setup(x => x.Exists(It.IsAny())).Returns(true); + fileSystemMock.Setup(x => x.NewFileStream(It.IsAny(), FileMode.Open, FileAccess.Read)) + .Returns(memoryStream); - var coverage = new Coverage(coveragePrepareResult, new Mock().Object, new Mock().Object, - fileSystemMock.Object, new Mock().Object); + var coverage = new Coverage(coveragePrepareResult, new Mock().Object, new Mock().Object, + fileSystemMock.Object, new Mock().Object); - CoverageResult coverageResult = coverage.GetCoverageResult(); - coverageResult.Document("document").AssertLinesCovered(BuildConfiguration.Debug, (1, int.MaxValue)); + CoverageResult coverageResult = coverage.GetCoverageResult(); + coverageResult.Document("document").AssertLinesCovered(BuildConfiguration.Debug, (1, int.MaxValue)); - } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.Lambda.cs b/test/coverlet.core.tests/Coverage/CoverageTests.Lambda.cs index 24a87a681..40742147f 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.Lambda.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.Lambda.cs @@ -4,139 +4,166 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + [Fact] + public void Lambda_Issue343() { - [Fact] - public void Lambda_Issue343() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.InvokeAnonymous_Test(); - ((Task)instance.InvokeAnonymousAsync_Test()).ConfigureAwait(false).GetAwaiter().GetResult(); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + instance.InvokeAnonymous_Test(); + await (Task)instance.InvokeAnonymousAsync_Test(); + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.Lambda.cs") + .AssertLinesCoveredAllBut(BuildConfiguration.Debug, 24, 52) + .AssertBranchesCovered(BuildConfiguration.Debug, + // Expected branches + (23, 0, 0), + (23, 1, 1), + (51, 0, 0), + (51, 1, 1) + ); + } + finally + { + File.Delete(path); + } + } - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.Lambda.cs") - .AssertLinesCoveredAllBut(BuildConfiguration.Debug, 24, 52) - .AssertBranchesCovered(BuildConfiguration.Debug, - // Expected branches - (23, 0, 0), - (23, 1, 1), - (51, 0, 0), - (51, 1, 1) - ); - } - finally - { - File.Delete(path); - } - } + [Fact] + public void AsyncAwait_Issue_730() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => + { + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.Invoke(); + }, + persistPrepareResultToFile: pathSerialize[0]); - [Fact] - public void AsyncAwait_Issue_730() + return 0; + }, new string[] { path }); + + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.Lambda.cs") + .AssertLinesCovered(BuildConfiguration.Debug, (73, 1), (74, 1), (75, 101), (76, 1), (77, 1)) + .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Lambda_Issue760() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.Invoke()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(async instance => + { + await (Task)instance.If(); + await (Task)instance.Foreach(); + }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.Lambda.cs") - .AssertLinesCovered(BuildConfiguration.Debug, (73, 1), (74, 1), (75, 101), (76, 1), (77, 1)) - .ExpectedTotalNumberOfBranches(BuildConfiguration.Debug, 0); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.Lambda.cs") + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 83, 92) + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 95, 104); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void Lambda_Issue760() + [Fact] + public void Issue_1056() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - ((Task)instance.If()).ConfigureAwait(false).GetAwaiter().GetResult(); - ((Task)instance.Foreach()).ConfigureAwait(false).GetAwaiter().GetResult(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.T1(); + return Task.CompletedTask; + }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.Lambda.cs") - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 83, 92) - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 95, 104); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.Lambda.cs") + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 110, 119) + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 122, 124) + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 127, 129) + .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 131, 131) + .AssertLinesCovered(BuildConfiguration.Debug, (110, 1), (111, 2), (112, 2), (113, 2), (114, 2), (115, 2), (116, 2), (117, 2), (118, 2), (119, 1), + (122, 2), (123, 2), (124, 2), + (127, 2), (128, 2), (129, 2), + (131, 4)); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void Issue_1056() + [Fact] + public void Issue_1447() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.T1(); - return Task.CompletedTask; - }, - persistPrepareResultToFile: pathSerialize[0]); + instance.Query1(); + instance.Query2(); + return Task.CompletedTask; + }, + persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.Lambda.cs") - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 110, 119) - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 122, 124) - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 127, 129) - .AssertLinesCoveredFromTo(BuildConfiguration.Debug, 131, 131) - .AssertLinesCovered(BuildConfiguration.Debug, (110, 1), (111, 2), (112, 2), (113, 2), (114, 2), (115, 2), (116, 2), (117, 2), (118, 2), (119, 1), - (122, 2), (123, 2), (124, 2), - (127, 2), (128, 2), (129, 2), - (131, 4)); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path).GenerateReport(show: true) + .Document("Instrumentation.Lambda.cs") + .AssertLinesCovered((138, 1), (143, 1)) + .ExpectedTotalNumberOfBranches(0); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.SelectionStatements.cs b/test/coverlet.core.tests/Coverage/CoverageTests.SelectionStatements.cs index 3e551daf7..676f2ce69 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.SelectionStatements.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.SelectionStatements.cs @@ -4,151 +4,152 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Tmds.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests : ExternalProcessExecutionTest + public partial class CoverageTests : ExternalProcessExecutionTest + { + [Fact] + public void SelectionStatements_If() { - [Fact] - public void SelectionStatements_If() + // We need to pass file name to remote process where it save instrumentation result + // Similar to msbuild input/output + string path = Path.GetTempFileName(); + try + { + // Lambda will run in a custom process to avoid issue with statics and file locking + FunctionExecutor.Run(async (string[] pathSerialize) => { - // We need to pass file name to remote process where it save instrumentation result - // Similar to msbuild input/output - string path = Path.GetTempFileName(); - try - { - // Lambda will run in a custom process to avoid issue with statics and file locking - FunctionExecutor.Run(async (string[] pathSerialize) => - { - // Run load and call a delegate passing class as dynamic to simplify method call - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - // We call method to trigger coverage hits - instance.If(true); + // Run load and call a delegate passing class as dynamic to simplify method call + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + // We call method to trigger coverage hits + instance.If(true); - // For now we have only async Run helper - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); + // For now we have only async Run helper + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); - // we return 0 if we return something different assert fail - return 0; - }, new string[] { path }); + // we return 0 if we return something different assert fail + return 0; + }, new string[] { path }); - // We retrive and load CoveragePrepareResult and run coverage calculation - // Similar to msbuild coverage result task - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + // We retrieve and load CoveragePrepareResult and run coverage calculation + // Similar to msbuild coverage result task + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - // Generate html report to check - // TestInstrumentationHelper.GenerateHtmlReport(result); + // Generate html report to check + // TestInstrumentationHelper.GenerateHtmlReport(result); - // Asserts on doc/lines/branches - result.Document("Instrumentation.SelectionStatements.cs") - // (line, hits) - .AssertLinesCovered((11, 1), (15, 0)) - // (line,ordinal,hits) - .AssertBranchesCovered((9, 0, 1), (9, 1, 0)); - } - finally - { - // Cleanup tmp file - File.Delete(path); - } - } + // Asserts on doc/lines/branches + result.Document("Instrumentation.SelectionStatements.cs") + // (line, hits) + .AssertLinesCovered((11, 1), (15, 0)) + // (line,ordinal,hits) + .AssertBranchesCovered((9, 0, 1), (9, 1, 0)); + } + finally + { + // Cleanup tmp file + File.Delete(path); + } + } - [Fact] - public void SelectionStatements_Switch() + [Fact] + public void SelectionStatements_Switch() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.Switch(1); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.Switch(1); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - result.Document("Instrumentation.SelectionStatements.cs") - .AssertLinesCovered(BuildConfiguration.Release, (24, 1), (26, 0), (28, 0)) - .AssertBranchesCovered(BuildConfiguration.Release, (24, 1, 1)) - .AssertLinesCovered(BuildConfiguration.Debug, (20, 1), (21, 1), (24, 1), (30, 1)) - .AssertBranchesCovered(BuildConfiguration.Debug, (21, 0, 0), (21, 1, 1), (21, 2, 0), (21, 3, 0)); - } - finally - { - File.Delete(path); - } - } + result.Document("Instrumentation.SelectionStatements.cs") + .AssertLinesCovered(BuildConfiguration.Release, (24, 1), (26, 0), (28, 0)) + .AssertBranchesCovered(BuildConfiguration.Release, (24, 1, 1)) + .AssertLinesCovered(BuildConfiguration.Debug, (20, 1), (21, 1), (24, 1), (30, 1)) + .AssertBranchesCovered(BuildConfiguration.Debug, (21, 0, 0), (21, 1, 1), (21, 2, 0), (21, 3, 0)); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void SelectionStatements_Switch_CSharp8_OneBranch() + [Fact] + public void SelectionStatements_Switch_CSharp8_OneBranch() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - instance.SwitchCsharp8(int.MaxValue); - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.SwitchCsharp8(int.MaxValue); + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.SelectionStatements.cs") - .AssertLinesCovered(BuildConfiguration.Debug, 33, 34, 35, 36, 40) - .AssertLinesNotCovered(BuildConfiguration.Debug, 37, 38, 39) - .AssertBranchesCovered(BuildConfiguration.Debug, (34, 0, 1), (34, 1, 0), (34, 2, 0), (34, 3, 0), (34, 4, 0), (34, 5, 0)) - .ExpectedTotalNumberOfBranches(3); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.SelectionStatements.cs") + .AssertLinesCovered(BuildConfiguration.Debug, 33, 34, 35, 36, 40) + .AssertLinesNotCovered(BuildConfiguration.Debug, 37, 38, 39) + .AssertBranchesCovered(BuildConfiguration.Debug, (34, 0, 1), (34, 1, 0), (34, 2, 0), (34, 3, 0), (34, 4, 0), (34, 5, 0)) + .ExpectedTotalNumberOfBranches(3); + } + finally + { + File.Delete(path); + } + } - [Fact] - public void SelectionStatements_Switch_CSharp8_AllBranches() + [Fact] + public void SelectionStatements_Switch_CSharp8_AllBranches() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + instance.SwitchCsharp8(int.MaxValue); + instance.SwitchCsharp8(uint.MaxValue); + instance.SwitchCsharp8(short.MaxValue); + try { - instance.SwitchCsharp8(int.MaxValue); - instance.SwitchCsharp8(uint.MaxValue); - instance.SwitchCsharp8(short.MaxValue); - try - { - instance.SwitchCsharp8(""); - } - catch { } - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); + instance.SwitchCsharp8(""); + } + catch { } + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); - TestInstrumentationHelper.GetCoverageResult(path) - .Document("Instrumentation.SelectionStatements.cs") - .AssertLinesCovered(BuildConfiguration.Debug, 33, 34, 35, 36, 37, 38, 39, 40) - .AssertBranchesCovered(BuildConfiguration.Debug, (34, 0, 1), (34, 1, 3), (34, 2, 1), (34, 3, 2), (34, 4, 1), (34, 5, 1)) - .ExpectedTotalNumberOfBranches(3); - } - finally - { - File.Delete(path); - } - } + TestInstrumentationHelper.GetCoverageResult(path) + .Document("Instrumentation.SelectionStatements.cs") + .AssertLinesCovered(BuildConfiguration.Debug, 33, 34, 35, 36, 37, 38, 39, 40) + .AssertBranchesCovered(BuildConfiguration.Debug, (34, 0, 1), (34, 1, 3), (34, 2, 1), (34, 3, 2), (34, 4, 1), (34, 5, 1)) + .ExpectedTotalNumberOfBranches(3); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.Yield.cs b/test/coverlet.core.tests/Coverage/CoverageTests.Yield.cs index e491d9003..69481bbfc 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.Yield.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.Yield.cs @@ -4,163 +4,164 @@ using System.IO; using System.Threading.Tasks; using Coverlet.Core.Samples.Tests; +using Coverlet.Tests.Utils; using Tmds.Utils; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests : ExternalProcessExecutionTest + public partial class CoverageTests : ExternalProcessExecutionTest + { + [Fact] + public void Yield_Single() { - [Fact] - public void Yield_Single() + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - foreach (dynamic _ in instance.One()) ; - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.Yield.cs") - .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__0::MoveNext()") - .AssertLinesCovered((9, 1)) - .ExpectedTotalNumberOfBranches(0); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void Yield_Two() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + foreach (dynamic _ in instance.One()) ; + + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.Yield.cs") + .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__0::MoveNext()") + .AssertLinesCovered((9, 1)) + .ExpectedTotalNumberOfBranches(0); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Yield_Two() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - foreach (dynamic _ in instance.Two()) ; - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.Yield.cs") - .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__1::MoveNext()") - .AssertLinesCovered((14, 1), (15, 1)) - .ExpectedTotalNumberOfBranches(0); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void Yield_SingleWithSwitch() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + foreach (dynamic _ in instance.Two()) ; + + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.Yield.cs") + .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__1::MoveNext()") + .AssertLinesCovered((14, 1), (15, 1)) + .ExpectedTotalNumberOfBranches(0); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Yield_SingleWithSwitch() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - foreach (dynamic _ in instance.OneWithSwitch(2)) ; - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - - return 0; - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.Yield.cs") - .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__2::MoveNext()") - .AssertLinesCovered(BuildConfiguration.Debug, (21, 1), (30, 1), (31, 1), (37, 1)) - .ExpectedTotalNumberOfBranches(1); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void Yield_Three() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + foreach (dynamic _ in instance.OneWithSwitch(2)) ; + + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + + return 0; + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.Yield.cs") + .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__2::MoveNext()") + .AssertLinesCovered(BuildConfiguration.Debug, (21, 1), (30, 1), (31, 1), (37, 1)) + .ExpectedTotalNumberOfBranches(1); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Yield_Three() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - foreach (dynamic _ in instance.Three()) ; - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.Yield.cs") - .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__3::MoveNext()") - .AssertLinesCovered((42, 1), (43, 1), (44, 1)) - .ExpectedTotalNumberOfBranches(0); - } - finally - { - File.Delete(path); - } - } - - [Fact] - public void Yield_Enumerable() + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + foreach (dynamic _ in instance.Three()) ; + + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.Yield.cs") + .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__3::MoveNext()") + .AssertLinesCovered((42, 1), (43, 1), (44, 1)) + .ExpectedTotalNumberOfBranches(0); + } + finally + { + File.Delete(path); + } + } + + [Fact] + public void Yield_Enumerable() + { + string path = Path.GetTempFileName(); + try + { + FunctionExecutor.Run(async (string[] pathSerialize) => { - string path = Path.GetTempFileName(); - try - { - FunctionExecutor.Run(async (string[] pathSerialize) => - { - CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => - { - foreach (dynamic _ in instance.Enumerable(new[] { "one", "two", "three", "four" })) ; - - return Task.CompletedTask; - }, persistPrepareResultToFile: pathSerialize[0]); - return 0; - }, new string[] { path }); - - CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); - - result.Document("Instrumentation.Yield.cs") - .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__4::MoveNext()") - .AssertLinesCovered(BuildConfiguration.Debug, (48, 1), (49, 1), (50, 4), (51, 5), (52, 1), (54, 4), (55, 4), (56, 4), (57, 1)) - .ExpectedTotalNumberOfBranches(1); - } - finally - { - File.Delete(path); - } - } + CoveragePrepareResult coveragePrepareResult = await TestInstrumentationHelper.Run(instance => + { + foreach (dynamic _ in instance.Enumerable(new[] { "one", "two", "three", "four" })) ; + + return Task.CompletedTask; + }, persistPrepareResultToFile: pathSerialize[0]); + return 0; + }, new string[] { path }); + + CoverageResult result = TestInstrumentationHelper.GetCoverageResult(path); + + result.Document("Instrumentation.Yield.cs") + .Method("System.Boolean Coverlet.Core.Samples.Tests.Yield/d__4::MoveNext()") + .AssertLinesCovered(BuildConfiguration.Debug, (48, 1), (49, 1), (50, 4), (51, 5), (52, 1), (54, 4), (55, 4), (56, 4), (57, 1)) + .ExpectedTotalNumberOfBranches(1); + } + finally + { + File.Delete(path); + } } + } } diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.cs b/test/coverlet.core.tests/Coverage/CoverageTests.cs index 4f0465fe2..701df8f30 100644 --- a/test/coverlet.core.tests/Coverage/CoverageTests.cs +++ b/test/coverlet.core.tests/Coverage/CoverageTests.cs @@ -2,95 +2,213 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; +using System.Collections; +using System.Collections.Generic; using System.IO; +using System.Linq; using Coverlet.Core.Abstractions; using Coverlet.Core.Helpers; +using Coverlet.Core.Instrumentation; using Coverlet.Core.Symbols; using Moq; +using Newtonsoft.Json; using Xunit; namespace Coverlet.Core.Tests { - public partial class CoverageTests + public partial class CoverageTests + { + private readonly Mock _mockLogger = new(); + + [Fact] + public void TestCoverage() { - private readonly Mock _mockLogger = new(); - - [Fact] - public void TestCoverage() - { - string module = GetType().Assembly.Location; - string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); - - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); - - File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); - File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); - - // TODO: Find a way to mimick hits - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - var parameters = new CoverageParameters - { - IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, - IncludeDirectories = Array.Empty(), - ExcludeFilters = Array.Empty(), - ExcludedSourceFiles = Array.Empty(), - ExcludeAttributes = Array.Empty(), - IncludeTestAssembly = false, - SingleHit = false, - MergeWith = string.Empty, - UseSourceLink = false - }; - - var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); - coverage.PrepareModules(); - - CoverageResult result = coverage.GetCoverageResult(); - - Assert.Empty(result.Modules); - - directory.Delete(true); - } - - [Fact] - public void TestCoverageWithTestAssembly() - { - string module = GetType().Assembly.Location; - string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); - - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); - - File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); - File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - var parameters = new CoverageParameters - { - IncludeFilters = Array.Empty(), - IncludeDirectories = Array.Empty(), - ExcludeFilters = Array.Empty(), - ExcludedSourceFiles = Array.Empty(), - ExcludeAttributes = Array.Empty(), - IncludeTestAssembly = true, - SingleHit = false, - MergeWith = string.Empty, - UseSourceLink = false - }; - - var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), - new SourceRootTranslator(module, _mockLogger.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - coverage.PrepareModules(); - - CoverageResult result = coverage.GetCoverageResult(); - - Assert.NotEmpty(result.Modules); - - directory.Delete(true); - } + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + + // TODO: Find a way to mimick hits + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var parameters = new CoverageParameters + { + IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, + IncludeDirectories = Array.Empty(), + ExcludeFilters = Array.Empty(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = false, + SingleHit = false, + MergeWith = string.Empty, + UseSourceLink = false + }; + + var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); + coverage.PrepareModules(); + + CoverageResult result = coverage.GetCoverageResult(); + + Assert.Empty(result.Modules); + + directory.Delete(true); + } + + [Fact] + public void TestCoverageWithTestAssembly() + { + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var parameters = new CoverageParameters + { + IncludeFilters = Array.Empty(), + IncludeDirectories = Array.Empty(), + ExcludeFilters = Array.Empty(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = true, + SingleHit = false, + MergeWith = string.Empty, + UseSourceLink = false + }; + + var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), + new SourceRootTranslator(module, _mockLogger.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); + coverage.PrepareModules(); + + string result = JsonConvert.SerializeObject(coverage.GetCoverageResult(), Formatting.Indented, new BranchDictionaryConverter()); + + Assert.Contains("coverlet.core.tests.dll", result); + + directory.Delete(true); + } + + [Fact] + public void TestCoverageMergeWithParameter() + { + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + + // TODO: Find a way to mimick hits + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var parameters = new CoverageParameters + { + IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, + IncludeDirectories = Array.Empty(), + ExcludeFilters = Array.Empty(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = false, + SingleHit = false, + MergeWith = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), "MergeWith.coverage.json").First(), + UseSourceLink = false + }; + + var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); + coverage.PrepareModules(); + + string result = JsonConvert.SerializeObject(coverage.GetCoverageResult(), Formatting.Indented, new BranchDictionaryConverter()); + + Assert.Contains("DeepThought.cs", result); + + _mockLogger.Verify(l => l.LogInformation(It.Is(v => v.StartsWith("MergeWith: '") && v.EndsWith("MergeWith.coverage.json'.")), It.IsAny()), Times.Once); + + directory.Delete(true); + } + + [Fact] + public void TestCoverageMergeWithWrongParameter() + { + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + + // TODO: Find a way to mimick hits + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var parameters = new CoverageParameters + { + IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, + IncludeDirectories = Array.Empty(), + ExcludeFilters = Array.Empty(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = false, + SingleHit = false, + MergeWith = "FileDoesNotExist.json", + UseSourceLink = false + }; + + var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); + coverage.PrepareModules(); + + JsonConvert.SerializeObject(coverage.GetCoverageResult()); + + _mockLogger.Verify(l => l.LogInformation(It.Is(v => v.Equals("MergeWith: file 'FileDoesNotExist.json' does not exist.")), It.IsAny()), Times.Once); + + directory.Delete(true); + } + } +} + +public class BranchDictionaryConverter: JsonConverter +{ + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + Type type = value.GetType(); + var keys = (IEnumerable)type.GetProperty("Keys")?.GetValue(value, null); + var values = (IEnumerable)type.GetProperty("Values")?.GetValue(value, null); + IEnumerator valueEnumerator = values.GetEnumerator(); + + writer.WriteStartArray(); + foreach (object key in keys) + { + valueEnumerator.MoveNext(); + + writer.WriteStartArray(); + serializer.Serialize(writer, key); + serializer.Serialize(writer, valueEnumerator.Current); + writer.WriteEndArray(); } + writer.WriteEndArray(); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) + { + throw new NotImplementedException(); + } + + public override bool CanConvert(Type objectType) + { + return typeof(Dictionary).IsAssignableFrom(objectType); + } } diff --git a/test/coverlet.core.tests/Coverage/InstrumenterHelper.Assertions.cs b/test/coverlet.core.tests/Coverage/InstrumenterHelper.Assertions.cs index 24f567312..4c833028f 100644 --- a/test/coverlet.core.tests/Coverage/InstrumenterHelper.Assertions.cs +++ b/test/coverlet.core.tests/Coverage/InstrumenterHelper.Assertions.cs @@ -1,7 +1,6 @@ // Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Coverlet.Core.Instrumentation; using System; using System.Collections.Generic; using System.Diagnostics; @@ -9,453 +8,439 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Text; +using Coverlet.Core.Instrumentation; +using Coverlet.Tests.Utils; using Xunit.Sdk; namespace Coverlet.Core.Tests { - [Flags] - public enum BuildConfiguration - { - Debug = 1, - Release = 2 - } - static class TestInstrumentationAssert + static class TestInstrumentationAssert + { + public static CoverageResult GenerateReport(this CoverageResult coverageResult, [CallerMemberName] string directory = "", bool show = false) { - public static CoverageResult GenerateReport(this CoverageResult coverageResult, [CallerMemberName] string directory = "", bool show = false) - { - if (coverageResult is null) - { - throw new ArgumentNullException(nameof(coverageResult)); - } + if (coverageResult is null) + { + throw new ArgumentNullException(nameof(coverageResult)); + } - TestInstrumentationHelper.GenerateHtmlReport(coverageResult, directory: directory); + TestInstrumentationHelper.GenerateHtmlReport(coverageResult, directory: directory); - if (show && Debugger.IsAttached) - { - Process.Start("cmd", "/C " + Path.GetFullPath(Path.Combine(directory, "index.htm"))); - } + if (show && Debugger.IsAttached) + { + Process.Start("cmd", "/C " + Path.GetFullPath(Path.Combine(directory, "index.htm"))); + } - return coverageResult; - } + return coverageResult; + } - public static bool IsPresent(this CoverageResult coverageResult, string docName) + public static bool IsPresent(this CoverageResult coverageResult, string docName) + { + if (docName is null) + { + throw new ArgumentNullException(nameof(docName)); + } + + foreach (InstrumenterResult instrumenterResult in coverageResult.InstrumentedResults) + { + foreach (KeyValuePair document in instrumenterResult.Documents) { - if (docName is null) - { - throw new ArgumentNullException(nameof(docName)); - } - - foreach (InstrumenterResult instrumenterResult in coverageResult.InstrumentedResults) - { - foreach (KeyValuePair document in instrumenterResult.Documents) - { - if (Path.GetFileName(document.Key) == docName) - { - return true; - } - } - } - - return false; + if (Path.GetFileName(document.Key) == docName) + { + return true; + } } + } - public static Document Document(this CoverageResult coverageResult, string docName) - { - if (docName is null) - { - throw new ArgumentNullException(nameof(docName)); - } - - foreach (InstrumenterResult instrumenterResult in coverageResult.InstrumentedResults) - { - foreach (KeyValuePair document in instrumenterResult.Documents) - { - if (Path.GetFileName(document.Key) == docName) - { - return document.Value; - } - } - } - - throw new XunitException($"Document not found '{docName}'"); - } + return false; + } - public static Document Method(this Document document, string methodName) + public static Document Document(this CoverageResult coverageResult, string docName) + { + if (docName is null) + { + throw new ArgumentNullException(nameof(docName)); + } + + foreach (InstrumenterResult instrumenterResult in coverageResult.InstrumentedResults) + { + foreach (KeyValuePair document in instrumenterResult.Documents) { - var methodDoc = new Document { Path = document.Path, Index = document.Index }; - - if (!document.Lines.Any() && !document.Branches.Any()) - { - return methodDoc; - } - - if (document.Lines.Values.All(l => l.Method != methodName) && document.Branches.Values.All(l => l.Method != methodName)) - { - IEnumerable methods = document.Lines.Values.Select(l => $"'{l.Method}'") - .Concat(document.Branches.Values.Select(b => $"'{b.Method}'")) - .Distinct(); - throw new XunitException($"Method '{methodName}' not found. Methods in document: {string.Join(", ", methods)}"); - } + if (Path.GetFileName(document.Key) == docName) + { + return document.Value; + } + } + } - foreach (KeyValuePair line in document.Lines.Where(l => l.Value.Method == methodName)) - { - methodDoc.Lines[line.Key] = line.Value; - } + throw new XunitException($"Document not found '{docName}'"); + } - foreach (KeyValuePair branch in document.Branches.Where(b => b.Value.Method == methodName)) - { - methodDoc.Branches[branch.Key] = branch.Value; - } + public static Document Method(this Document document, string methodName) + { + var methodDoc = new Document { Path = document.Path, Index = document.Index }; + + if (!document.Lines.Any() && !document.Branches.Any()) + { + return methodDoc; + } + + if (document.Lines.Values.All(l => l.Method != methodName) && document.Branches.Values.All(l => l.Method != methodName)) + { + IEnumerable methods = document.Lines.Values.Select(l => $"'{l.Method}'") + .Concat(document.Branches.Values.Select(b => $"'{b.Method}'")) + .Distinct(); + throw new XunitException($"Method '{methodName}' not found. Methods in document: {string.Join(", ", methods)}"); + } + + foreach (KeyValuePair line in document.Lines.Where(l => l.Value.Method == methodName)) + { + methodDoc.Lines[line.Key] = line.Value; + } + + foreach (KeyValuePair branch in document.Branches.Where(b => b.Value.Method == methodName)) + { + methodDoc.Branches[branch.Key] = branch.Value; + } + + return methodDoc; + } - return methodDoc; - } + public static Document AssertBranchesCovered(this Document document, params (int line, int ordinal, int hits)[] lines) + { + return AssertBranchesCovered(document, BuildConfiguration.Debug | BuildConfiguration.Release, lines); + } - public static Document AssertBranchesCovered(this Document document, params (int line, int ordinal, int hits)[] lines) - { - return AssertBranchesCovered(document, BuildConfiguration.Debug | BuildConfiguration.Release, lines); - } + public static Document ExpectedTotalNumberOfBranches(this Document document, int totalExpectedBranch) + { + return ExpectedTotalNumberOfBranches(document, BuildConfiguration.Debug | BuildConfiguration.Release, totalExpectedBranch); + } - public static Document ExpectedTotalNumberOfBranches(this Document document, int totalExpectedBranch) - { - return ExpectedTotalNumberOfBranches(document, BuildConfiguration.Debug | BuildConfiguration.Release, totalExpectedBranch); - } + public static Document ExpectedTotalNumberOfBranches(this Document document, BuildConfiguration configuration, int totalExpectedBranch) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } - public static Document ExpectedTotalNumberOfBranches(this Document document, BuildConfiguration configuration, int totalExpectedBranch) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + int totalBranch = document.Branches.GroupBy(g => g.Key.Line).Count(); - int totalBranch = document.Branches.GroupBy(g => g.Key.Line).Count(); + if (totalBranch != totalExpectedBranch) + { + throw new XunitException($"Expected total branch is '{totalExpectedBranch}', actual '{totalBranch}'"); + } - if (totalBranch != totalExpectedBranch) - { - throw new XunitException($"Expected total branch is '{totalExpectedBranch}', actual '{totalBranch}'"); - } + return document; + } - return document; - } + public static string ToStringBranches(this Document document) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + var builder = new StringBuilder(); + foreach (KeyValuePair branch in document.Branches) + { + builder.AppendLine($"({branch.Value.Number}, {branch.Value.Ordinal}, {branch.Value.Hits}),"); + } + return builder.ToString(); + } - public static string ToStringBranches(this Document document) + public static Document AssertBranchesCovered(this Document document, BuildConfiguration configuration, params (int line, int ordinal, int hits)[] lines) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); + + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } + + var branchesToCover = new List(lines.Select(b => $"[line {b.line} ordinal {b.ordinal}]")); + foreach (KeyValuePair branch in document.Branches) + { + foreach ((int lineToCheck, int ordinalToCheck, int expectedHits) in lines) { - if (document is null) + if (branch.Value.Number == lineToCheck) + { + if (branch.Value.Ordinal == ordinalToCheck) { - throw new ArgumentNullException(nameof(document)); - } + branchesToCover.Remove($"[line {branch.Value.Number} ordinal {branch.Value.Ordinal}]"); - var builder = new StringBuilder(); - foreach (KeyValuePair branch in document.Branches) - { - builder.AppendLine($"({branch.Value.Number}, {branch.Value.Ordinal}, {branch.Value.Hits}),"); + if (branch.Value.Hits != expectedHits) + { + throw new XunitException($"Unexpected hits expected line: {lineToCheck} ordinal {ordinalToCheck} hits: {expectedHits} actual hits: {branch.Value.Hits}"); + } } - return builder.ToString(); + } } + } - public static Document AssertBranchesCovered(this Document document, BuildConfiguration configuration, params (int line, int ordinal, int hits)[] lines) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } - - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + if (branchesToCover.Count != 0) + { + throw new XunitException($"Not all requested branch found, {branchesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + return document; + } - var branchesToCover = new List(lines.Select(b => $"[line {b.line} ordinal {b.ordinal}]")); - foreach (KeyValuePair branch in document.Branches) - { - foreach ((int lineToCheck, int ordinalToCheck, int expectedHits) in lines) - { - if (branch.Value.Number == lineToCheck) - { - if (branch.Value.Ordinal == ordinalToCheck) - { - branchesToCover.Remove($"[line {branch.Value.Number} ordinal {branch.Value.Ordinal}]"); - - if (branch.Value.Hits != expectedHits) - { - throw new XunitException($"Unexpected hits expected line: {lineToCheck} ordinal {ordinalToCheck} hits: {expectedHits} actual hits: {branch.Value.Hits}"); - } - } - } - } - } + public static Document AssertLinesCovered(this Document document, params (int line, int hits)[] lines) + { + return AssertLinesCovered(document, BuildConfiguration.Debug | BuildConfiguration.Release, lines); + } - if (branchesToCover.Count != 0) + public static Document AssertLinesCoveredAllBut(this Document document, BuildConfiguration configuration, params int[] linesNumber) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); + + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } + + foreach (KeyValuePair line in document.Lines) + { + bool skip = false; + foreach (int number in linesNumber) + { + if (line.Value.Number == number) + { + skip = true; + if (line.Value.Hits > 0) { - throw new XunitException($"Not all requested branch found, {branchesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + throw new XunitException($"Hits not expected for line {line.Value.Number}"); } - - return document; + } } - public static Document AssertLinesCovered(this Document document, params (int line, int hits)[] lines) - { - return AssertLinesCovered(document, BuildConfiguration.Debug | BuildConfiguration.Release, lines); - } + if (skip) + continue; - public static Document AssertLinesCoveredAllBut(this Document document, BuildConfiguration configuration, params int[] linesNumber) + if (line.Value.Hits == 0) { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } - - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); - - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + throw new XunitException($"Hits expected for line: {line.Value.Number}"); + } + } - foreach (KeyValuePair line in document.Lines) - { - bool skip = false; - foreach (int number in linesNumber) - { - if (line.Value.Number == number) - { - skip = true; - if (line.Value.Hits > 0) - { - throw new XunitException($"Hits not expected for line {line.Value.Number}"); - } - } - } - - if (skip) - continue; - - if (line.Value.Hits == 0) - { - throw new XunitException($"Hits expected for line: {line.Value.Number}"); - } - } + return document; + } - return document; - } + public static Document AssertLinesCoveredFromTo(this Document document, int from, int to) + { + return AssertLinesCoveredFromTo(document, BuildConfiguration.Debug | BuildConfiguration.Release, from, to); + } - public static Document AssertLinesCoveredFromTo(this Document document, int from, int to) + public static Document AssertLinesCoveredFromTo(this Document document, BuildConfiguration configuration, int from, int to) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); + + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } + + if (to < from) + { + throw new ArgumentException("to cannot be lower than from"); + } + + var lines = new List(); + foreach (KeyValuePair line in document.Lines) + { + if (line.Value.Number >= from && line.Value.Number <= to && line.Value.Hits > 0) { - return AssertLinesCoveredFromTo(document, BuildConfiguration.Debug | BuildConfiguration.Release, from, to); + lines.Add(line.Value.Number); } + } - public static Document AssertLinesCoveredFromTo(this Document document, BuildConfiguration configuration, int from, int to) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } - - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); - - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } - - if (to < from) - { - throw new ArgumentException("to cannot be lower than from"); - } - - var lines = new List(); - foreach (KeyValuePair line in document.Lines) - { - if (line.Value.Number >= from && line.Value.Number <= to && line.Value.Hits > 0) - { - lines.Add(line.Value.Number); - } - } - - if (!lines.OrderBy(l => l).SequenceEqual(Enumerable.Range(from, to - from + 1))) - { - throw new XunitException($"Unexpected lines covered"); - } + if (!lines.OrderBy(l => l).SequenceEqual(Enumerable.Range(from, to - from + 1))) + { + throw new XunitException($"Unexpected lines covered"); + } - return document; - } + return document; + } - public static Document AssertLinesCovered(this Document document, BuildConfiguration configuration, params (int line, int hits)[] lines) + public static Document AssertLinesCovered(this Document document, BuildConfiguration configuration, params (int line, int hits)[] lines) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); + + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } + + var linesToCover = new List(lines.Select(l => l.line)); + foreach (KeyValuePair line in document.Lines) + { + foreach ((int lineToCheck, int expectedHits) in lines) { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } - - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); - - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } - - var linesToCover = new List(lines.Select(l => l.line)); - foreach (KeyValuePair line in document.Lines) + if (line.Value.Number == lineToCheck) + { + linesToCover.Remove(line.Value.Number); + if (line.Value.Hits != expectedHits) { - foreach ((int lineToCheck, int expectedHits) in lines) - { - if (line.Value.Number == lineToCheck) - { - linesToCover.Remove(line.Value.Number); - if (line.Value.Hits != expectedHits) - { - throw new XunitException($"Unexpected hits expected line: {lineToCheck} hits: {expectedHits} actual hits: {line.Value.Hits}"); - } - } - } + throw new XunitException($"Unexpected hits expected line: {lineToCheck} hits: {expectedHits} actual hits: {line.Value.Hits}"); } - - if (linesToCover.Count != 0) - { - throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); - } - - return document; + } } + } - public static Document AssertLinesCovered(this Document document, BuildConfiguration configuration, params int[] lines) - { - return AssertLinesCoveredInternal(document, configuration, true, lines); - } + if (linesToCover.Count != 0) + { + throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + } - public static Document AssertLinesNotCovered(this Document document, BuildConfiguration configuration, params int[] lines) - { - return AssertLinesCoveredInternal(document, configuration, false, lines); - } - - private static Document AssertLinesCoveredInternal(this Document document, BuildConfiguration configuration, bool covered, params int[] lines) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } + return document; + } - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + public static Document AssertLinesCovered(this Document document, BuildConfiguration configuration, params int[] lines) + { + return AssertLinesCoveredInternal(document, configuration, true, lines); + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + public static Document AssertLinesNotCovered(this Document document, BuildConfiguration configuration, params int[] lines) + { + return AssertLinesCoveredInternal(document, configuration, false, lines); + } - var linesToCover = new List(lines); - foreach (KeyValuePair line in document.Lines) + private static Document AssertLinesCoveredInternal(this Document document, BuildConfiguration configuration, bool covered, params int[] lines) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } + + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); + + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } + + var linesToCover = new List(lines); + foreach (KeyValuePair line in document.Lines) + { + foreach (int lineToCheck in lines) + { + if (line.Value.Number == lineToCheck) + { + if (covered && line.Value.Hits > 0) { - foreach (int lineToCheck in lines) - { - if (line.Value.Number == lineToCheck) - { - if (covered && line.Value.Hits > 0) - { - linesToCover.Remove(line.Value.Number); - } - if (!covered && line.Value.Hits == 0) - { - linesToCover.Remove(line.Value.Number); - } - } - } + linesToCover.Remove(line.Value.Number); } - - if (linesToCover.Count != 0) + if (!covered && line.Value.Hits == 0) { - throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + linesToCover.Remove(line.Value.Number); } - - return document; + } } + } - public static Document AssertNonInstrumentedLines(this Document document, BuildConfiguration configuration, int from, int to) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } + if (linesToCover.Count != 0) + { + throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + } - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + return document; + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + public static Document AssertNonInstrumentedLines(this Document document, BuildConfiguration configuration, int from, int to) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } - int[] lineRange = Enumerable.Range(from, to - from + 1).ToArray(); + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); - return AssertNonInstrumentedLines(document, configuration, lineRange); - } + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } - public static Document AssertNonInstrumentedLines(this Document document, BuildConfiguration configuration, params int[] lines) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } + int[] lineRange = Enumerable.Range(from, to - from + 1).ToArray(); - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + return AssertNonInstrumentedLines(document, configuration, lineRange); + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + public static Document AssertNonInstrumentedLines(this Document document, BuildConfiguration configuration, params int[] lines) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } - IEnumerable unexpectedlyInstrumented = document.Lines.Select(l => l.Value.Number).Intersect(lines); + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); - if (unexpectedlyInstrumented.Any()) - { - throw new XunitException($"Unexpected instrumented lines, '{string.Join(',', unexpectedlyInstrumented)}'"); - } + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } - return document; - } + IEnumerable unexpectedlyInstrumented = document.Lines.Select(l => l.Value.Number).Intersect(lines); - public static Document AssertInstrumentLines(this Document document, BuildConfiguration configuration, params int[] lines) - { - if (document is null) - { - throw new ArgumentNullException(nameof(document)); - } + if (unexpectedlyInstrumented.Any()) + { + throw new XunitException($"Unexpected instrumented lines, '{string.Join(',', unexpectedlyInstrumented)}'"); + } - BuildConfiguration buildConfiguration = GetAssemblyBuildConfiguration(); + return document; + } - if ((buildConfiguration & configuration) != buildConfiguration) - { - return document; - } + public static Document AssertInstrumentLines(this Document document, BuildConfiguration configuration, params int[] lines) + { + if (document is null) + { + throw new ArgumentNullException(nameof(document)); + } - var instrumentedLines = document.Lines.Select(l => l.Value.Number).ToHashSet(); + BuildConfiguration buildConfiguration = TestUtils.GetAssemblyBuildConfiguration(); - IEnumerable missing = lines.Where(l => !instrumentedLines.Contains(l)); + if ((buildConfiguration & configuration) != buildConfiguration) + { + return document; + } - if (missing.Any()) - { - throw new XunitException($"Expected lines to be instrumented, '{string.Join(',', missing)}'"); - } + var instrumentedLines = document.Lines.Select(l => l.Value.Number).ToHashSet(); - return document; - } + IEnumerable missing = lines.Where(l => !instrumentedLines.Contains(l)); - private static BuildConfiguration GetAssemblyBuildConfiguration() - { -#if DEBUG - return BuildConfiguration.Debug; -#endif -#if RELEASE - return BuildConfiguration.Release; -#endif - throw new NotSupportedException($"Build configuration not supported"); - } + if (missing.Any()) + { + throw new XunitException($"Expected lines to be instrumented, '{string.Join(',', missing)}'"); + } + + return document; } + + } } diff --git a/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs b/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs index c2a218592..50617d62f 100644 --- a/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs +++ b/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs @@ -21,316 +21,318 @@ namespace Coverlet.Core.Tests { - static class TestInstrumentationHelper + static class TestInstrumentationHelper + { + private static IServiceProvider s_processWideContainer; + + /// + /// caller sample: TestInstrumentationHelper.GenerateHtmlReport(result, sourceFileFilter: @"+**\Samples\Instrumentation.cs"); + /// TestInstrumentationHelper.GenerateHtmlReport(result); + /// + public static void GenerateHtmlReport(CoverageResult coverageResult, IReporter reporter = null, string sourceFileFilter = "", [CallerMemberName] string directory = "") { - private static IServiceProvider s_processWideContainer; - - /// - /// caller sample: TestInstrumentationHelper.GenerateHtmlReport(result, sourceFileFilter: @"+**\Samples\Instrumentation.cs"); - /// TestInstrumentationHelper.GenerateHtmlReport(result); - /// - public static void GenerateHtmlReport(CoverageResult coverageResult, IReporter reporter = null, string sourceFileFilter = "", [CallerMemberName] string directory = "") - { - var defaultReporter = new JsonReporter(); - reporter ??= new CoberturaReporter(); - DirectoryInfo dir = Directory.CreateDirectory(directory); - dir.Delete(true); - dir.Create(); - string reportFile = Path.Combine(dir.FullName, Path.ChangeExtension("report", defaultReporter.Extension)); - File.WriteAllText(reportFile, defaultReporter.Report(coverageResult, new Mock().Object)); - reportFile = Path.Combine(dir.FullName, Path.ChangeExtension("report", reporter.Extension)); - File.WriteAllText(reportFile, reporter.Report(coverageResult, new Mock().Object)); - // i.e. reportgenerator -reports:"C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\Condition_If\report.cobertura.xml" -targetdir:"C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\Condition_If" -filefilters:+**\Samples\Instrumentation.cs - Assert.True(new Generator().GenerateReport(new ReportConfiguration( - new[] { reportFile }, - dir.FullName, - new string[0], - null, - new string[0], - new string[0], - new string[0], - new string[0], - string.IsNullOrEmpty(sourceFileFilter) ? new string[0] : new[] { sourceFileFilter }, - null, - null))); - } - - public static CoverageResult GetCoverageResult(string filePath) - { - SetTestContainer(); - using var result = new FileStream(filePath, FileMode.Open); - var logger = new Mock(); - logger.Setup(l => l.LogVerbose(It.IsAny())).Callback((string message) => - { - Assert.DoesNotContain("not found for module: ", message); - }); - s_processWideContainer.GetRequiredService().SetLogger(logger.Object); - var coveragePrepareResultLoaded = CoveragePrepareResult.Deserialize(result); - var coverage = new Coverage(coveragePrepareResultLoaded, logger.Object, s_processWideContainer.GetService(), new FileSystem(), new SourceRootTranslator(new Mock().Object, new FileSystem())); - return coverage.GetCoverageResult(); - } - - public static async Task Run(Func callMethod, - Func includeFilter = null, - Func excludeFilter = null, - Func doesNotReturnAttributes = null, - string persistPrepareResultToFile = null, - bool disableRestoreModules = false, - bool skipAutoProps = false, - string assemblyLocation = null) - { - if (persistPrepareResultToFile is null) - { - throw new ArgumentNullException(nameof(persistPrepareResultToFile)); - } - - // Rename test file to avoid locks - string location = typeof(T).Assembly.Location; - string fileName = Path.ChangeExtension($"testgen_{Path.GetFileNameWithoutExtension(Path.GetRandomFileName())}", ".dll"); - string logFile = Path.ChangeExtension(fileName, ".log"); - string newPath = Path.Combine(Path.GetDirectoryName(location), fileName); - - File.Copy(location, newPath); - File.Copy(Path.ChangeExtension(location, ".pdb"), Path.ChangeExtension(newPath, ".pdb")); + var defaultReporter = new JsonReporter(); + reporter ??= new CoberturaReporter(); + DirectoryInfo dir = Directory.CreateDirectory(directory); + dir.Delete(true); + dir.Create(); + string reportFile = Path.Combine(dir.FullName, Path.ChangeExtension("report", defaultReporter.Extension)); + File.WriteAllText(reportFile, defaultReporter.Report(coverageResult, new Mock().Object)); + reportFile = Path.Combine(dir.FullName, Path.ChangeExtension("report", reporter.Extension)); + File.WriteAllText(reportFile, reporter.Report(coverageResult, new Mock().Object)); + // i.e. reportgenerator -reports:"C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\Condition_If\report.cobertura.xml" -targetdir:"C:\git\coverlet\test\coverlet.core.tests\bin\Debug\netcoreapp2.0\Condition_If" -filefilters:+**\Samples\Instrumentation.cs + Assert.True(new Generator().GenerateReport(new ReportConfiguration( + new[] { reportFile }, + dir.FullName, + new string[0], + null, + new string[0], + new string[0], + new string[0], + new string[0], + string.IsNullOrEmpty(sourceFileFilter) ? new string[0] : new[] { sourceFileFilter }, + null, + null))); + } - string sourceRootTranslatorModulePath = assemblyLocation ?? newPath; - SetTestContainer(sourceRootTranslatorModulePath, disableRestoreModules); - - static string[] defaultFilters(string _) => Array.Empty(); + public static CoverageResult GetCoverageResult(string filePath) + { + SetTestContainer(); + using var result = new FileStream(filePath, FileMode.Open); + var logger = new Mock(); + logger.Setup(l => l.LogVerbose(It.IsAny())).Callback((string message) => + { + Assert.DoesNotContain("not found for module: ", message); + }); + s_processWideContainer.GetRequiredService().SetLogger(logger.Object); + var coveragePrepareResultLoaded = CoveragePrepareResult.Deserialize(result); + var coverage = new Coverage(coveragePrepareResultLoaded, logger.Object, s_processWideContainer.GetService(), new FileSystem(), new SourceRootTranslator(new Mock().Object, new FileSystem())); + return coverage.GetCoverageResult(); + } - var parameters = new CoverageParameters - { - IncludeFilters = (includeFilter is null ? defaultFilters(fileName) : includeFilter(fileName)).Concat( - new string[] - { + public static async Task Run(Func callMethod, + Func includeFilter = null, + Func excludeFilter = null, + Func doesNotReturnAttributes = null, + string persistPrepareResultToFile = null, + bool disableRestoreModules = false, + bool skipAutoProps = false, + string assemblyLocation = null) + { + if (persistPrepareResultToFile is null) + { + throw new ArgumentNullException(nameof(persistPrepareResultToFile)); + } + + // Rename test file to avoid locks + string location = typeof(T).Assembly.Location; + string fileName = Path.ChangeExtension($"testgen_{Path.GetFileNameWithoutExtension(Path.GetRandomFileName())}", ".dll"); + string logFile = Path.ChangeExtension(fileName, ".log"); + string newPath = Path.Combine(Path.GetDirectoryName(location), fileName); + + File.Copy(location, newPath); + File.Copy(Path.ChangeExtension(location, ".pdb"), Path.ChangeExtension(newPath, ".pdb")); + + string sourceRootTranslatorModulePath = assemblyLocation ?? newPath; + SetTestContainer(sourceRootTranslatorModulePath, disableRestoreModules); + + static string[] defaultFilters(string _) => Array.Empty(); + + var parameters = new CoverageParameters + { + IncludeFilters = (includeFilter is null ? defaultFilters(fileName) : includeFilter(fileName)).Concat( + new string[] + { $"[{Path.GetFileNameWithoutExtension(fileName)}*]{GetTypeFullName()}*" - }).ToArray(), - IncludeDirectories = Array.Empty(), - ExcludeFilters = (excludeFilter is null ? defaultFilters(fileName) : excludeFilter(fileName)).Concat(new string[] - { + }).ToArray(), + IncludeDirectories = Array.Empty(), + ExcludeFilters = (excludeFilter is null ? defaultFilters(fileName) : excludeFilter(fileName)).Concat(new string[] + { "[xunit.*]*", "[coverlet.*]*" - }).ToArray(), - ExcludedSourceFiles = Array.Empty(), - ExcludeAttributes = Array.Empty(), - IncludeTestAssembly = true, - SingleHit = false, - MergeWith = string.Empty, - UseSourceLink = false, - SkipAutoProps = skipAutoProps, - DoesNotReturnAttributes = doesNotReturnAttributes?.Invoke(fileName) - }; - - // Instrument module - var coverage = new Coverage(newPath, parameters, new Logger(logFile), - s_processWideContainer.GetService(), s_processWideContainer.GetService(), s_processWideContainer.GetService(), s_processWideContainer.GetService()); - CoveragePrepareResult prepareResult = coverage.PrepareModules(); - - Assert.Single(prepareResult.Results); - - // Load new assembly - var asm = Assembly.LoadFile(newPath); - - // Instance type and call method - await callMethod(Activator.CreateInstance(asm.GetType(typeof(T).FullName))); - - // Flush tracker - Type tracker = asm.GetTypes().Single(n => n.FullName.Contains("Coverlet.Core.Instrumentation.Tracker")); - - // For debugging purpouse - // int[] hitsArray = (int[])tracker.GetField("HitsArray").GetValue(null); - // string hitsFilePath = (string)tracker.GetField("HitsFilePath").GetValue(null); - - // Void UnloadModule(System.Object, System.EventArgs) - tracker.GetTypeInfo().GetMethod("UnloadModule").Invoke(null, new object[2] { null, null }); - - // Persist CoveragePrepareResult - using (var fs = new FileStream(persistPrepareResultToFile, FileMode.Open)) - { - await CoveragePrepareResult.Serialize(prepareResult).CopyToAsync(fs); - } - - return prepareResult; - } + }).ToArray(), + ExcludedSourceFiles = Array.Empty(), + ExcludeAttributes = Array.Empty(), + IncludeTestAssembly = true, + SingleHit = false, + MergeWith = string.Empty, + UseSourceLink = false, + SkipAutoProps = skipAutoProps, + DoesNotReturnAttributes = doesNotReturnAttributes?.Invoke(fileName) + }; + + // Instrument module + var coverage = new Coverage(newPath, parameters, new Logger(logFile), + s_processWideContainer.GetService(), s_processWideContainer.GetService(), s_processWideContainer.GetService(), s_processWideContainer.GetService()); + CoveragePrepareResult prepareResult = coverage.PrepareModules(); + + Assert.Single(prepareResult.Results); + + // Load new assembly + var asm = Assembly.LoadFile(newPath); + + // Instance type and call method + await callMethod(Activator.CreateInstance(asm.GetType(typeof(T).FullName))); + + // Flush tracker +#pragma warning disable CA1307 // Specify StringComparison for clarity + Type tracker = asm.GetTypes().Single(n => n.FullName.Contains("Coverlet.Core.Instrumentation.Tracker")); +#pragma warning restore CA1307 // Specify StringComparison for clarity + + // For debugging purpose + // int[] hitsArray = (int[])tracker.GetField("HitsArray").GetValue(null); + // string hitsFilePath = (string)tracker.GetField("HitsFilePath").GetValue(null); + + // Void UnloadModule(System.Object, System.EventArgs) + tracker.GetTypeInfo().GetMethod("UnloadModule").Invoke(null, new object[2] { null, null }); + + // Persist CoveragePrepareResult + using (var fs = new FileStream(persistPrepareResultToFile, FileMode.Open)) + { + await CoveragePrepareResult.Serialize(prepareResult).CopyToAsync(fs); + } + + return prepareResult; + } - private static void SetTestContainer(string testModule = null, bool disableRestoreModules = false) + private static void SetTestContainer(string testModule = null, bool disableRestoreModules = false) + { + LazyInitializer.EnsureInitialized(ref s_processWideContainer, () => + { + var serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new Mock().Object); + + // We need to keep singleton/static semantics + if (disableRestoreModules) { - LazyInitializer.EnsureInitialized(ref s_processWideContainer, () => - { - var serviceCollection = new ServiceCollection(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(); - serviceCollection.AddTransient(_ => new Mock().Object); - - // We need to keep singleton/static semantics - if (disableRestoreModules) - { - serviceCollection.AddSingleton(); - } - else - { - serviceCollection.AddSingleton(); - } - serviceCollection.AddSingleton(serviceProvider => - string.IsNullOrEmpty(testModule) ? - new SourceRootTranslator(serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService()) : - new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); - - serviceCollection.AddSingleton(); - - return serviceCollection.BuildServiceProvider(); - }); + serviceCollection.AddSingleton(); } - - private static string GetTypeFullName() + else { - string name = typeof(T).FullName; - if (typeof(T).IsGenericType && name != null) - { - int index = name.IndexOf('`'); - return index == -1 ? name : name[..index]; - } - return name; + serviceCollection.AddSingleton(); } + serviceCollection.AddSingleton(serviceProvider => + string.IsNullOrEmpty(testModule) ? + new SourceRootTranslator(serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService()) : + new SourceRootTranslator(testModule, serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService(), serviceProvider.GetRequiredService())); + + serviceCollection.AddSingleton(); + + return serviceCollection.BuildServiceProvider(); + }); } - class CustomProcessExitHandler : IProcessExitHandler + private static string GetTypeFullName() { - public void Add(EventHandler handler) - { - // We don't subscribe to process exit, we let parent restore module. - // On msbuild/console/collector code run inside same app domain so statics list of - // files to restore are shared, but on test we run instrumentation on child process - // so there is a race between parent/child on files restore. - // In normal condition Process.Exit try to restore files only in case of - // exception and if in InstrumentationHelper._backupList there are files remained. - } + string name = typeof(T).FullName; + if (typeof(T).IsGenericType && name != null) + { + int index = name.IndexOf('`'); + return index == -1 ? name : name[..index]; + } + return name; + } + } + + class CustomProcessExitHandler : IProcessExitHandler + { + public void Add(EventHandler handler) + { + // We don't subscribe to process exit, we let parent restore module. + // On msbuild/console/collector code run inside same app domain so statics list of + // files to restore are shared, but on test we run instrumentation on child process + // so there is a race between parent/child on files restore. + // In normal condition Process.Exit try to restore files only in case of + // exception and if in InstrumentationHelper._backupList there are files remained. } + } - class CustomRetryHelper : IRetryHelper + class CustomRetryHelper : IRetryHelper + { + public T Do(Func action, Func backoffStrategy, int maxAttemptCount = 3) { - public T Do(Func action, Func backoffStrategy, int maxAttemptCount = 3) + var exceptions = new List(); + for (int attempted = 0; attempted < maxAttemptCount; attempted++) + { + try { - var exceptions = new List(); - for (int attempted = 0; attempted < maxAttemptCount; attempted++) - { - try - { - if (attempted > 0) - { - Thread.Sleep(backoffStrategy()); - } - return action(); - } - catch (Exception ex) - { - if (ex.ToString().Contains("RestoreOriginalModules") || ex.ToString().Contains("RestoreOriginalModule")) - { - // If we're restoring modules mean that process are closing and we cannot override copied test file because is locked so we hide error - // to have a correct process exit value - return default; - } - else - { - exceptions.Add(ex); - } - } - } - throw new AggregateException(exceptions); + if (attempted > 0) + { + Thread.Sleep(backoffStrategy()); + } + return action(); } - - public void Retry(Action action, Func backoffStrategy, int maxAttemptCount = 3) + catch (Exception ex) { - Do(() => - { - action(); - return null; - }, backoffStrategy, maxAttemptCount); + if (ex.ToString().Contains("RestoreOriginalModules") || ex.ToString().Contains("RestoreOriginalModule")) + { + // If we're restoring modules mean that process are closing and we cannot override copied test file because is locked so we hide error + // to have a correct process exit value + return default; + } + else + { + exceptions.Add(ex); + } } + } + throw new AggregateException(exceptions); } - // We log to files for debugging pourpose, we can check if instrumentation is ok - class Logger : ILogger + public void Retry(Action action, Func backoffStrategy, int maxAttemptCount = 3) { - readonly string _logFile; + Do(() => + { + action(); + return null; + }, backoffStrategy, maxAttemptCount); + } + } - public Logger(string logFile) => _logFile = logFile; + // We log to files for debugging pourpose, we can check if instrumentation is ok + class Logger : ILogger + { + readonly string _logFile; - public void LogError(string message) - { - File.AppendAllText(_logFile, message + Environment.NewLine); - } + public Logger(string logFile) => _logFile = logFile; - public void LogError(Exception exception) - { - File.AppendAllText(_logFile, exception.ToString() + Environment.NewLine); - } + public void LogError(string message) + { + File.AppendAllText(_logFile, message + Environment.NewLine); + } - public void LogInformation(string message, bool important = false) - { - File.AppendAllText(_logFile, message + Environment.NewLine); - } + public void LogError(Exception exception) + { + File.AppendAllText(_logFile, exception.ToString() + Environment.NewLine); + } - public void LogVerbose(string message) - { - File.AppendAllText(_logFile, message + Environment.NewLine); - } + public void LogInformation(string message, bool important = false) + { + File.AppendAllText(_logFile, message + Environment.NewLine); + } - public void LogWarning(string message) - { - File.AppendAllText(_logFile, message + Environment.NewLine); - } + public void LogVerbose(string message) + { + File.AppendAllText(_logFile, message + Environment.NewLine); } - class InstrumentationHelperForDebugging : InstrumentationHelper + public void LogWarning(string message) { - public InstrumentationHelperForDebugging(IProcessExitHandler processExitHandler, IRetryHelper retryHelper, IFileSystem fileSystem, ILogger logger, ISourceRootTranslator sourceTranslator) - : base(processExitHandler, retryHelper, fileSystem, logger, sourceTranslator) - { + File.AppendAllText(_logFile, message + Environment.NewLine); + } + } - } + class InstrumentationHelperForDebugging : InstrumentationHelper + { + public InstrumentationHelperForDebugging(IProcessExitHandler processExitHandler, IRetryHelper retryHelper, IFileSystem fileSystem, ILogger logger, ISourceRootTranslator sourceTranslator) + : base(processExitHandler, retryHelper, fileSystem, logger, sourceTranslator) + { - public override void RestoreOriginalModule(string module, string identifier) - { - // DO NOT RESTORE - } + } - public override void RestoreOriginalModules() - { - // DO NOT RESTORE - } + public override void RestoreOriginalModule(string module, string identifier) + { + // DO NOT RESTORE } - public abstract class ExternalProcessExecutionTest + public override void RestoreOriginalModules() { - protected FunctionExecutor FunctionExecutor = new( - o => - { - o.StartInfo.RedirectStandardError = true; - o.OnExit = p => - { - if (p.ExitCode != 0) - { - string message = $"Function exit code failed with exit code: {p.ExitCode}" + Environment.NewLine + - p.StandardError.ReadToEnd(); - throw new Xunit.Sdk.XunitException(message); - } - }; - }); + // DO NOT RESTORE } + } - public static class FunctionExecutorExtensions + public abstract class ExternalProcessExecutionTest + { + protected FunctionExecutor FunctionExecutor = new( + o => { - public static void RunInProcess(this FunctionExecutor executor, Func> func, string[] args) - { - Assert.Equal(0, func(args).Result); - } + o.StartInfo.RedirectStandardError = true; + o.OnExit = p => + { + if (p.ExitCode != 0) + { + string message = $"Function exit code failed with exit code: {p.ExitCode}" + Environment.NewLine + + p.StandardError.ReadToEnd(); + throw new Xunit.Sdk.XunitException(message); + } + }; + }); + } - public static void RunInProcess(this FunctionExecutor executor, Func> func) - { - Assert.Equal(0, func().Result); - } + public static class FunctionExecutorExtensions + { + public static void RunInProcess(this FunctionExecutor executor, Func> func, string[] args) + { + Assert.Equal(0, func(args).Result); + } + + public static void RunInProcess(this FunctionExecutor executor, Func> func) + { + Assert.Equal(0, func().Result); } + } } diff --git a/test/coverlet.core.tests/CoverageResultTests.cs b/test/coverlet.core.tests/CoverageResultTests.cs index fd5450909..4d7ef7db8 100644 --- a/test/coverlet.core.tests/CoverageResultTests.cs +++ b/test/coverlet.core.tests/CoverageResultTests.cs @@ -7,170 +7,170 @@ namespace Coverlet.Core.Tests { - public class CoverageResultTests + public class CoverageResultTests + { + private readonly Modules _modules; + + public CoverageResultTests() { - private readonly Modules _modules; - - public CoverageResultTests() - { - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 1); - lines.Add(3, 1); - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 }); - branches.Add(new BranchInfo { Line = 2, Hits = 0, Offset = 1, Path = 0, Ordinal = 1 }); - - // System.Void Coverlet.Core.Tests.CoverageResultTests::CoverageResultTests - 3/3 100% line 2/3 66.7% branch coverage - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Tests.CoverageResultTests::CoverageResultTests()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - // System.Void Coverlet.Core.Tests.CoverageResultTests::GetThresholdTypesBelowThreshold - 0/2 0% line - methodString = "System.Void Coverlet.Core.Tests.CoverageResultTests::GetThresholdTypesBelowThreshold()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = new Lines() + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 1); + lines.Add(3, 1); + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 }); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 }); + branches.Add(new BranchInfo { Line = 2, Hits = 0, Offset = 1, Path = 0, Ordinal = 1 }); + + // System.Void Coverlet.Core.Tests.CoverageResultTests::CoverageResultTests - 3/3 100% line 2/3 66.7% branch coverage + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Tests.CoverageResultTests::CoverageResultTests()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + // System.Void Coverlet.Core.Tests.CoverageResultTests::GetThresholdTypesBelowThreshold - 0/2 0% line + methodString = "System.Void Coverlet.Core.Tests.CoverageResultTests::GetThresholdTypesBelowThreshold()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = new Lines() { {1, 0}, {2, 0}, }; - var classes = new Classes(); - classes.Add("Coverlet.Core.Tests.CoverageResultTests", methods); - // Methods - 1/2 (50%) - // Lines - 3/5 (60%) - // Branches - 2/3 (66.67%) + var classes = new Classes(); + classes.Add("Coverlet.Core.Tests.CoverageResultTests", methods); + // Methods - 1/2 (50%) + // Lines - 3/5 (60%) + // Branches - 2/3 (66.67%) - var documents = new Documents(); - documents.Add("doc.cs", classes); + var documents = new Documents(); + documents.Add("doc.cs", classes); - _modules = new Modules(); - _modules.Add("module", documents); - } + _modules = new Modules(); + _modules.Add("module", documents); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdLine() - { - var result = new CoverageResult(); - result.Modules = _modules; + [Fact] + public void TestGetThresholdTypesBelowThresholdLine() + { + var result = new CoverageResult(); + result.Modules = _modules; - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 90 }, { ThresholdTypeFlags.Method, 10 }, { ThresholdTypeFlags.Branch, 10 }, }; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(ThresholdTypeFlags.Line, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(ThresholdTypeFlags.Line, resThresholdTypeFlags); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdMethod() - { - var result = new CoverageResult(); - result.Modules = _modules; + [Fact] + public void TestGetThresholdTypesBelowThresholdMethod() + { + var result = new CoverageResult(); + result.Modules = _modules; - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 50 }, { ThresholdTypeFlags.Method, 75 }, { ThresholdTypeFlags.Branch, 10 }, }; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(ThresholdTypeFlags.Method, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(ThresholdTypeFlags.Method, resThresholdTypeFlags); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdBranch() - { - var result = new CoverageResult(); - result.Modules = _modules; + [Fact] + public void TestGetThresholdTypesBelowThresholdBranch() + { + var result = new CoverageResult(); + result.Modules = _modules; - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 50 }, { ThresholdTypeFlags.Method, 50 }, { ThresholdTypeFlags.Branch, 90 }, }; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Total; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Total; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(ThresholdTypeFlags.Branch, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(ThresholdTypeFlags.Branch, resThresholdTypeFlags); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdAllGood() - { - var result = new CoverageResult(); - result.Modules = _modules; + [Fact] + public void TestGetThresholdTypesBelowThresholdAllGood() + { + var result = new CoverageResult(); + result.Modules = _modules; - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 50 }, { ThresholdTypeFlags.Method, 50 }, { ThresholdTypeFlags.Branch, 50 }, }; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Average; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Average; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(ThresholdTypeFlags.None, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(ThresholdTypeFlags.None, resThresholdTypeFlags); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdAllFail() - { - var result = new CoverageResult(); - result.Modules = _modules; + [Fact] + public void TestGetThresholdTypesBelowThresholdAllFail() + { + var result = new CoverageResult(); + result.Modules = _modules; - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 100 }, { ThresholdTypeFlags.Method, 100 }, { ThresholdTypeFlags.Branch, 100 }, }; - ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; + ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); + } - [Fact] - public void TestGetThresholdTypesBelowThresholdWhenNoModuleInstrumented() - { - var result = new CoverageResult(); - result.Modules = new Modules(); + [Fact] + public void TestGetThresholdTypesBelowThresholdWhenNoModuleInstrumented() + { + var result = new CoverageResult(); + result.Modules = new Modules(); - var summary = new CoverageSummary(); - var thresholdTypeFlagValues = new Dictionary() + var summary = new CoverageSummary(); + var thresholdTypeFlagValues = new Dictionary() { { ThresholdTypeFlags.Line, 80 }, { ThresholdTypeFlags.Method, 80 }, { ThresholdTypeFlags.Branch, 80 }, }; - ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; - ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; + ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; - ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); - Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); - } + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); } + } } diff --git a/test/coverlet.core.tests/Helpers/FileSystemTests.cs b/test/coverlet.core.tests/Helpers/FileSystemTests.cs index 10f4aa289..897891e8b 100644 --- a/test/coverlet.core.tests/Helpers/FileSystemTests.cs +++ b/test/coverlet.core.tests/Helpers/FileSystemTests.cs @@ -1,22 +1,22 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Xunit; namespace Coverlet.Core.Helpers.Tests { - public class FileSystemTests + public class FileSystemTests + { + [Theory] + [InlineData(null, null)] + [InlineData("", "")] + [InlineData("filename.cs", "filename.cs")] + [InlineData("filename{T}.cs", "filename{{T}}.cs")] + public void TestEscapeFileName(string fileName, string expected) { - [Theory] - [InlineData(null, null)] - [InlineData("", "")] - [InlineData("filename.cs", "filename.cs")] - [InlineData("filename{T}.cs", "filename{{T}}.cs")] - public void TestEscapeFileName(string fileName, string expected) - { - string actual = FileSystem.EscapeFileName(fileName); + string actual = FileSystem.EscapeFileName(fileName); - Assert.Equal(expected, actual); - } + Assert.Equal(expected, actual); } -} \ No newline at end of file + } +} diff --git a/test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs b/test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs index 8c6917042..fe2d9c7c7 100644 --- a/test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs +++ b/test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs @@ -2,312 +2,347 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; -using System.IO; -using Xunit; + using System.Collections.Generic; +using System.IO; using System.Linq; -using Castle.Core.Internal; -using Moq; using Coverlet.Core.Abstractions; using Coverlet.Core.Enums; +using Moq; +using Xunit; namespace Coverlet.Core.Helpers.Tests { - public class InstrumentationHelperTests + public class InstrumentationHelperTests + { + private readonly InstrumentationHelper _instrumentationHelper = + new(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + [Fact] + public void TestGetDependencies() { - private readonly InstrumentationHelper _instrumentationHelper = - new(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - [Fact] - public void TestGetDependencies() - { - string module = typeof(InstrumentationHelperTests).Assembly.Location; - string[] modules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), false); - Assert.False(Array.Exists(modules, m => m == module)); - } - - [Fact] - public void TestGetDependenciesWithTestAssembly() - { - string module = typeof(InstrumentationHelperTests).Assembly.Location; - string[] modules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), true); - Assert.True(Array.Exists(modules, m => m == module)); - } - - [Fact] - public void EmbeddedPortablePDPHasLocalSource_NoDocumentsExist_ReturnsFalse() - { - var fileSystem = new Mock {CallBase = true}; - fileSystem.Setup(x => x.Exists(It.IsAny())).Returns(false); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAny)); - Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAll)); - } - - [Fact] - public void EmbeddedPortablePDPHasLocalSource_AllDocumentsExist_ReturnsTrue() - { - Assert.True(_instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAny)); - Assert.True(_instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAll)); - } - - [Theory] - [InlineData(AssemblySearchType.MissingAny, false)] - [InlineData(AssemblySearchType.MissingAll, true)] - public void EmbeddedPortablePDPHasLocalSource_FirstDocumentDoesNotExist_ReturnsExpectedValue(object assemblySearchType, bool result) - { - var fileSystem = new Mock { CallBase = true }; - fileSystem.SetupSequence(x => x.Exists(It.IsAny())) - .Returns(false) - .Returns(() => - { - fileSystem.Setup(y => y.Exists(It.IsAny())).Returns(true); - return true; - }); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - Assert.Equal(result, instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, (AssemblySearchType) assemblySearchType)); - } - - [Fact] - public void TestHasPdbOfLocalAssembly() - { - Assert.True(_instrumentationHelper.HasPdb(typeof(InstrumentationHelperTests).Assembly.Location, out bool embeddedPdb)); - Assert.False(embeddedPdb); - } - - [Fact] - public void TestHasPdbOfExternalAssembly() - { - string testAssemblyLocation = GetType().Assembly.Location; - - string externalAssemblyFileName = Path.Combine( - Path.GetDirectoryName(testAssemblyLocation), - "TestAssets", - "75d9f96508d74def860a568f426ea4a4.dll" - ); - - Assert.True(_instrumentationHelper.HasPdb(externalAssemblyFileName, out bool embeddedPdb)); - Assert.False(embeddedPdb); - } - - [Fact] - public void TestBackupOriginalModule() - { - string module = typeof(InstrumentationHelperTests).Assembly.Location; - string identifier = Guid.NewGuid().ToString(); - - _instrumentationHelper.BackupOriginalModule(module, identifier); - - string backupPath = Path.Combine( - Path.GetTempPath(), - Path.GetFileNameWithoutExtension(module) + "_" + identifier + ".dll" - ); - - Assert.True(File.Exists(backupPath)); - } - - [Fact] - public void TestIsValidFilterExpression() - { - Assert.True(_instrumentationHelper.IsValidFilterExpression("[*]*")); - Assert.True(_instrumentationHelper.IsValidFilterExpression("[*]*core")); - Assert.True(_instrumentationHelper.IsValidFilterExpression("[assembly]*")); - Assert.True(_instrumentationHelper.IsValidFilterExpression("[*]type")); - Assert.True(_instrumentationHelper.IsValidFilterExpression("[assembly]type")); - Assert.False(_instrumentationHelper.IsValidFilterExpression("[*]")); - Assert.False(_instrumentationHelper.IsValidFilterExpression("[-]*")); - Assert.False(_instrumentationHelper.IsValidFilterExpression("*")); - Assert.False(_instrumentationHelper.IsValidFilterExpression("][")); - Assert.False(_instrumentationHelper.IsValidFilterExpression(null)); - } - - [Fact] - public void TestDeleteHitsFile() - { - string tempFile = Path.GetTempFileName(); - Assert.True(File.Exists(tempFile)); - - _instrumentationHelper.DeleteHitsFile(tempFile); - Assert.False(File.Exists(tempFile)); - } - - [Fact] - public void TestIsModuleExcludedWithoutFilter() - { - bool result = _instrumentationHelper.IsModuleExcluded("Module.dll", new string[0]); - - Assert.False(result); - } - - [Fact] - public void TestIsModuleIncludedWithoutFilter() - { - bool result = _instrumentationHelper.IsModuleIncluded("Module.dll", new string[0]); - - Assert.True(result); - } - - [Theory] - [InlineData("[Module]mismatch")] - [InlineData("[Mismatch]*")] - public void TestIsModuleExcludedWithSingleMismatchFilter(string filter) - { - bool result = _instrumentationHelper.IsModuleExcluded("Module.dll", new[] { filter }); - - Assert.False(result); - } - - [Fact] - public void TestIsModuleIncludedWithSingleMismatchFilter() - { - bool result = _instrumentationHelper.IsModuleIncluded("Module.dll", new[] { "[Mismatch]*" }); - - Assert.False(result); - } - - [Theory] - [MemberData(nameof(ValidModuleFilterData))] - public void TestIsModuleExcludedAndIncludedWithFilter(string filter) - { - bool result = _instrumentationHelper.IsModuleExcluded("Module.dll", new[] { filter }); - Assert.True(result); - - result = _instrumentationHelper.IsModuleIncluded("Module.dll", new[] { filter }); - Assert.True(result); - } - - [Theory] - [MemberData(nameof(ValidModuleFilterData))] - public void TestIsModuleExcludedAndIncludedWithMatchingAndMismatchingFilter(string filter) - { - string[] filters = new[] { "[Mismatch]*", filter, "[Mismatch]*" }; - - bool result = _instrumentationHelper.IsModuleExcluded("Module.dll", filters); - Assert.True(result); - - result = _instrumentationHelper.IsModuleIncluded("Module.dll", filters); - Assert.True(result); - } - - [Fact] - public void TestIsTypeExcludedWithoutFilter() - { - bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new string[0]); - - Assert.False(result); - } - - [Fact] - public void TestIsTypeExcludedNamespace() - { - bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.Namespace.*" }); - Assert.True(result); - - result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.TypeB", new string[] { "[Module]Namespace.Namespace.*" }); - Assert.True(result); - - result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.*" }); - Assert.True(result); - - result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.WrongNamespace.*" }); - Assert.False(result); - } - - [Fact] - public void TestIsTypeIncludedWithoutFilter() - { - bool result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new string[0]); - - Assert.True(result); - } - - [Theory] - [InlineData("[Module]mismatch")] - [InlineData("[Mismatch]*")] - [InlineData("[Mismatch]a.b.Dto")] - public void TestIsTypeExcludedAndIncludedWithSingleMismatchFilter(string filter) - { - bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new[] { filter }); - Assert.False(result); - - result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new[] { filter }); - Assert.False(result); - } - - [Theory] - [MemberData(nameof(ValidModuleAndNamespaceFilterData))] - public void TestIsTypeExcludedAndIncludedWithFilter(string filter) - { - bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new[] { filter }); - Assert.True(result); - - result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new[] { filter }); - Assert.True(result); - } - - [Theory] - [MemberData(nameof(ValidModuleAndNamespaceFilterData))] - public void TestIsTypeExcludedAndIncludedWithMatchingAndMismatchingFilter(string filter) - { - string[] filters = new[] { "[Mismatch]*", filter, "[Mismatch]*" }; - - bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", filters); - Assert.True(result); - - result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", filters); - Assert.True(result); - } - - [Fact] - public void TestIncludeDirectories() - { - string module = typeof(InstrumentationHelperTests).Assembly.Location; - DirectoryInfo newDir = Directory.CreateDirectory("TestIncludeDirectories"); - newDir.Delete(true); - newDir.Create(); - DirectoryInfo newDir2 = Directory.CreateDirectory("TestIncludeDirectories2"); - newDir2.Delete(true); - newDir2.Create(); - - File.Copy(module, Path.Combine(newDir.FullName, Path.GetFileName(module))); - module = Path.Combine(newDir.FullName, Path.GetFileName(module)); - File.Copy("coverlet.msbuild.tasks.dll", Path.Combine(newDir.FullName, "coverlet.msbuild.tasks.dll")); - File.Copy("coverlet.core.dll", Path.Combine(newDir2.FullName, "coverlet.core.dll")); - - string[] currentDirModules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), false); - Assert.Single(currentDirModules); - Assert.Equal("coverlet.msbuild.tasks.dll", Path.GetFileName(currentDirModules[0])); - - string[] moreThanOneDirectory = _instrumentationHelper - .GetCoverableModules(module, new string[] { newDir2.FullName }, false) - .OrderBy(f => f).ToArray(); - - Assert.Equal(2, moreThanOneDirectory.Length); - Assert.Equal("coverlet.msbuild.tasks.dll", Path.GetFileName(moreThanOneDirectory[0])); - Assert.Equal("coverlet.core.dll", Path.GetFileName(moreThanOneDirectory[1])); - - string[] moreThanOneDirectoryPlusTestAssembly = _instrumentationHelper - .GetCoverableModules(module, new string[] { newDir2.FullName }, true) - .OrderBy(f => f).ToArray(); - - Assert.Equal(3, moreThanOneDirectoryPlusTestAssembly.Length); - Assert.Equal("coverlet.core.tests.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[0])); - Assert.Equal("coverlet.msbuild.tasks.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[1])); - Assert.Equal("coverlet.core.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[2])); - - newDir.Delete(true); - newDir2.Delete(true); - } - - public static IEnumerable ValidModuleFilterData => - new List - { + string module = typeof(InstrumentationHelperTests).Assembly.Location; + string[] modules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), false); + Assert.False(Array.Exists(modules, m => m == module)); + } + + [Fact] + public void TestGetDependenciesWithTestAssembly() + { + string module = typeof(InstrumentationHelperTests).Assembly.Location; + string[] modules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), true); + Assert.True(Array.Exists(modules, m => m == module)); + } + + [Fact] + public void EmbeddedPortablePDPHasLocalSource_NoDocumentsExist_ReturnsFalse() + { + var fileSystem = new Mock { CallBase = true }; + fileSystem.Setup(x => x.Exists(It.IsAny())).Returns(false); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAny)); + Assert.False(instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAll)); + } + + [Fact] + public void EmbeddedPortablePDPHasLocalSource_AllDocumentsExist_ReturnsTrue() + { + Assert.True(_instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAny)); + Assert.True(_instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, AssemblySearchType.MissingAll)); + } + + [Theory] + [InlineData(AssemblySearchType.MissingAny, false)] + [InlineData(AssemblySearchType.MissingAll, true)] + public void EmbeddedPortablePDPHasLocalSource_FirstDocumentDoesNotExist_ReturnsExpectedValue(object assemblySearchType, bool result) + { + var fileSystem = new Mock { CallBase = true }; + fileSystem.SetupSequence(x => x.Exists(It.IsAny())) + .Returns(false) + .Returns(() => + { + fileSystem.Setup(y => y.Exists(It.IsAny())).Returns(true); + return true; + }); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem.Object, new Mock().Object, new SourceRootTranslator(typeof(InstrumentationHelperTests).Assembly.Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + Assert.Equal(result, instrumentationHelper.PortablePdbHasLocalSource(typeof(InstrumentationHelperTests).Assembly.Location, (AssemblySearchType)assemblySearchType)); + } + + [Fact] + public void TestHasPdbOfLocalAssembly() + { + Assert.True(_instrumentationHelper.HasPdb(typeof(InstrumentationHelperTests).Assembly.Location, out bool embeddedPdb)); + Assert.False(embeddedPdb); + } + + [Fact] + public void TestHasPdbOfExternalAssembly() + { + string testAssemblyLocation = GetType().Assembly.Location; + + string externalAssemblyFileName = Path.Combine( + Path.GetDirectoryName(testAssemblyLocation), + "TestAssets", + "75d9f96508d74def860a568f426ea4a4.dll" + ); + + Assert.True(_instrumentationHelper.HasPdb(externalAssemblyFileName, out bool embeddedPdb)); + Assert.False(embeddedPdb); + } + + [Fact] + public void TestBackupOriginalModule() + { + string module = typeof(InstrumentationHelperTests).Assembly.Location; + string identifier = Guid.NewGuid().ToString(); + + _instrumentationHelper.BackupOriginalModule(module, identifier); + + string backupPath = Path.Combine( + Path.GetTempPath(), + Path.GetFileNameWithoutExtension(module) + "_" + identifier + ".dll" + ); + + Assert.True(File.Exists(backupPath)); + } + + [Theory] + [InlineData("[*]*")] + [InlineData("[*]*core")] + [InlineData("[assembly]*")] + [InlineData("[*]type")] + [InlineData("[assembly]type")] + [InlineData("[coverlet.*.tests?]*")] + [InlineData("[*]Coverlet.Core*")] + [InlineData("[coverlet.*]*")] + public void TestIsValidFilterExpression(string pattern) + { + Assert.True(_instrumentationHelper.IsValidFilterExpression(pattern)); + } + + [Theory] + [InlineData("[*]")] + [InlineData("[-]*")] + [InlineData("*")] + [InlineData("][")] + [InlineData(null)] + public void TestInValidFilterExpression(string pattern) + { + Assert.False(_instrumentationHelper.IsValidFilterExpression(pattern)); + } + + [Fact] + public void TestDeleteHitsFile() + { + string tempFile = Path.GetTempFileName(); + Assert.True(File.Exists(tempFile)); + + _instrumentationHelper.DeleteHitsFile(tempFile); + Assert.False(File.Exists(tempFile)); + } + + [Fact] + public void TestSelectModulesWithoutIncludeAndExcludedFilters() + { + string[] modules = new [] {"Module.dll"}; + IEnumerable result = _instrumentationHelper.SelectModules(modules, new string[0], new string[0]); + + Assert.Equal(modules, result); + } + + [Theory] + [InlineData("[Module]mismatch")] + [InlineData("[Mismatch]*")] + public void TestIsModuleExcludedWithSingleMismatchFilter(string filter) + { + string[] modules = new [] {"Module.dll"}; + IEnumerable result = _instrumentationHelper.SelectModules(modules, new string[0], new[] {filter}); + + Assert.Equal(modules, result); + } + + [Fact] + public void TestIsModuleIncludedWithSingleMismatchFilter() + { + string[] modules = new [] {"Module.dll"}; + IEnumerable result = _instrumentationHelper.SelectModules(modules, new[] { "[Mismatch]*" }, new string[0]); + + Assert.Empty(result); + } + + [Theory] + [MemberData(nameof(ValidModuleFilterData))] + public void TestIsModuleExcludedAndIncludedWithFilter(string filter) + { + string[] modules = new [] {"Module.dll"}; + IEnumerable result = _instrumentationHelper.SelectModules(modules, new[] { filter }, new[] { filter }); + + Assert.Empty(result); + } + + [Theory] + [MemberData(nameof(ValidModuleFilterData))] + public void TestIsModuleExcludedAndIncludedWithMatchingAndMismatchingFilter(string filter) + { + string[] modules = new[] {"Module.dll"}; + string[] filters = new[] {"[Mismatch]*", filter, "[Mismatch]*"}; + + IEnumerable result = _instrumentationHelper.SelectModules(modules, filters, filters); + + Assert.Empty(result); + } + + [Fact] + public void TestSelectModulesWithTypeFiltersDoesNotExcludeAssemblyWithType() + { + string[] modules = new[] { "Module.dll", "Module.Tests.dll" }; + string[] includeFilters = new[] { "[*]Module*" }; + string[] excludeFilters = new[] { "[*]Module.Tests.*" }; + + IEnumerable result = _instrumentationHelper.SelectModules(modules, includeFilters, excludeFilters); + + Assert.Equal(modules, result); + } + + [Fact] + public void TestSelectModulesWithModuleFilterExcludesExpectedModules() + { + string[] modules = new[] { "ModuleA.dll", "ModuleA.Tests.dll", "ModuleB.dll", "Module.B.Tests.dll" }; + string[] includeFilters = new[] { "" }; + string[] excludeFilters = new[] { "[ModuleA*]*" }; + + IEnumerable result = _instrumentationHelper.SelectModules(modules, includeFilters, excludeFilters); + + Assert.Equal(["ModuleB.dll", "Module.B.Tests.dll"], result); + } + + [Fact] + public void TestIsTypeExcludedWithoutFilter() + { + bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new string[0]); + + Assert.False(result); + } + + [Fact] + public void TestIsTypeExcludedNamespace() + { + bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.Namespace.*" }); + Assert.True(result); + + result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.TypeB", new string[] { "[Module]Namespace.Namespace.*" }); + Assert.True(result); + + result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.*" }); + Assert.True(result); + + result = _instrumentationHelper.IsTypeExcluded("Module.dll", "Namespace.Namespace.Type", new string[] { "[Module]Namespace.WrongNamespace.*" }); + Assert.False(result); + } + + [Fact] + public void TestIsTypeIncludedWithoutFilter() + { + bool result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new string[0]); + + Assert.True(result); + } + + [Theory] + [InlineData("[Module]mismatch")] + [InlineData("[Mismatch]*")] + [InlineData("[Mismatch]a.b.Dto")] + public void TestIsTypeExcludedAndIncludedWithSingleMismatchFilter(string filter) + { + bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new[] { filter }); + Assert.False(result); + + result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new[] { filter }); + Assert.False(result); + } + + [Theory] + [MemberData(nameof(ValidModuleAndNamespaceFilterData))] + public void TestIsTypeExcludedAndIncludedWithFilter(string filter) + { + bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", new[] { filter }); + Assert.True(result); + + result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", new[] { filter }); + Assert.True(result); + } + + [Theory] + [MemberData(nameof(ValidModuleAndNamespaceFilterData))] + public void TestIsTypeExcludedAndIncludedWithMatchingAndMismatchingFilter(string filter) + { + string[] filters = new[] { "[Mismatch]*", filter, "[Mismatch]*" }; + + bool result = _instrumentationHelper.IsTypeExcluded("Module.dll", "a.b.Dto", filters); + Assert.True(result); + + result = _instrumentationHelper.IsTypeIncluded("Module.dll", "a.b.Dto", filters); + Assert.True(result); + } + + [Fact] + public void TestIncludeDirectories() + { + string module = typeof(InstrumentationHelperTests).Assembly.Location; + DirectoryInfo newDir = Directory.CreateDirectory("TestIncludeDirectories"); + newDir.Delete(true); + newDir.Create(); + DirectoryInfo newDir2 = Directory.CreateDirectory("TestIncludeDirectories2"); + newDir2.Delete(true); + newDir2.Create(); + + File.Copy(module, Path.Combine(newDir.FullName, Path.GetFileName(module))); + module = Path.Combine(newDir.FullName, Path.GetFileName(module)); + File.Copy("coverlet.tests.xunit.extensions.dll", Path.Combine(newDir.FullName, "coverlet.tests.xunit.extensions.dll")); + File.Copy("coverlet.core.dll", Path.Combine(newDir2.FullName, "coverlet.core.dll")); + + string[] currentDirModules = _instrumentationHelper.GetCoverableModules(module, Array.Empty(), false); + Assert.Single(currentDirModules); + Assert.Equal("coverlet.tests.xunit.extensions.dll", Path.GetFileName(currentDirModules[0])); + + string[] moreThanOneDirectory = _instrumentationHelper + .GetCoverableModules(module, new string[] { newDir2.FullName }, false) + .OrderBy(f => f).ToArray(); + + Assert.Equal(2, moreThanOneDirectory.Length); + Assert.Equal("coverlet.tests.xunit.extensions.dll", Path.GetFileName(moreThanOneDirectory[0])); + Assert.Equal("coverlet.core.dll", Path.GetFileName(moreThanOneDirectory[1])); + + string[] moreThanOneDirectoryPlusTestAssembly = _instrumentationHelper + .GetCoverableModules(module, new string[] { newDir2.FullName }, true) + .OrderBy(f => f).ToArray(); + + Assert.Equal(3, moreThanOneDirectoryPlusTestAssembly.Length); + Assert.Equal("coverlet.core.tests.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[0])); + Assert.Equal("coverlet.tests.xunit.extensions.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[1])); + Assert.Equal("coverlet.core.dll", Path.GetFileName(moreThanOneDirectoryPlusTestAssembly[2])); + + newDir.Delete(true); + newDir2.Delete(true); + } + + [Theory] + [InlineData("g__LocalFunction|0_0", true)] + [InlineData("TestMethod", false)] + public void InstrumentationHelper_IsLocalMethod_ReturnsExpectedResult(string method, bool result) + { + Assert.Equal(_instrumentationHelper.IsLocalMethod(method), result); + } + + public static IEnumerable ValidModuleFilterData => + new List + { new object[] { "[Module]*" }, new object[] { "[Module*]*" }, new object[] { "[Mod*ule]*" }, @@ -315,17 +350,18 @@ public void TestIncludeDirectories() new object[] { "[Mod*le*]*" }, new object[] { "[Module?]*" }, new object[] { "[ModuleX?]*" }, - }; + new object[] { "[*]*" } + }; - public static IEnumerable ValidModuleAndNamespaceFilterData => - new List - { + public static IEnumerable ValidModuleAndNamespaceFilterData => + new List + { new object[] { "[Module]a.b.Dto" }, new object[] { "[Module]a.b.Dtos?" }, new object[] { "[Module]a.*" }, new object[] { "[Module]a*" }, new object[] { "[Module]*b.*" }, - } - .Concat(ValidModuleFilterData); - } + } + .Concat(ValidModuleFilterData); + } } diff --git a/test/coverlet.core.tests/Helpers/RetryHelperTests.cs b/test/coverlet.core.tests/Helpers/RetryHelperTests.cs index acbcbd41f..dd7232c80 100644 --- a/test/coverlet.core.tests/Helpers/RetryHelperTests.cs +++ b/test/coverlet.core.tests/Helpers/RetryHelperTests.cs @@ -6,77 +6,77 @@ namespace Coverlet.Core.Helpers.Tests { - public class RetryHelperTests + public class RetryHelperTests + { + [Fact] + public void TestRetryWithFixedRetryBackoff() { - [Fact] - public void TestRetryWithFixedRetryBackoff() - { - Func retryStrategy = () => - { - return TimeSpan.FromMilliseconds(1); - }; + Func retryStrategy = () => + { + return TimeSpan.FromMilliseconds(1); + }; - var target = new RetryTarget(); - try - { - new RetryHelper().Retry(() => target.TargetActionThrows(), retryStrategy, 7); - } - catch - { - Assert.Equal(7, target.Calls); - } - } - - [Fact] - public void TestRetryWithExponentialRetryBackoff() - { - int currentSleep = 6; - Func retryStrategy = () => - { - var sleep = TimeSpan.FromMilliseconds(currentSleep); - currentSleep *= 2; - return sleep; - }; + var target = new RetryTarget(); + try + { + new RetryHelper().Retry(() => target.TargetActionThrows(), retryStrategy, 7); + } + catch + { + Assert.Equal(7, target.Calls); + } + } - var target = new RetryTarget(); - try - { - new RetryHelper().Retry(() => target.TargetActionThrows(), retryStrategy, 3); - } - catch - { - Assert.Equal(3, target.Calls); - Assert.Equal(24, currentSleep); - } - } + [Fact] + public void TestRetryWithExponentialRetryBackoff() + { + int currentSleep = 6; + Func retryStrategy = () => + { + var sleep = TimeSpan.FromMilliseconds(currentSleep); + currentSleep *= 2; + return sleep; + }; - [Fact] - public void TestRetryFinishesIfSuccessful() - { - Func retryStrategy = () => - { - return TimeSpan.FromMilliseconds(1); - }; + var target = new RetryTarget(); + try + { + new RetryHelper().Retry(() => target.TargetActionThrows(), retryStrategy, 3); + } + catch + { + Assert.Equal(3, target.Calls); + Assert.Equal(24, currentSleep); + } + } - var target = new RetryTarget(); - new RetryHelper().Retry(() => target.TargetActionThrows5Times(), retryStrategy, 20); - Assert.Equal(6, target.Calls); - } + [Fact] + public void TestRetryFinishesIfSuccessful() + { + Func retryStrategy = () => + { + return TimeSpan.FromMilliseconds(1); + }; + var target = new RetryTarget(); + new RetryHelper().Retry(() => target.TargetActionThrows5Times(), retryStrategy, 20); + Assert.Equal(6, target.Calls); } - public class RetryTarget + } + + public class RetryTarget + { + public int Calls { get; set; } + public void TargetActionThrows() + { + Calls++; + throw new Exception("Simulating Failure"); + } + public void TargetActionThrows5Times() { - public int Calls { get; set; } - public void TargetActionThrows() - { - Calls++; - throw new Exception("Simulating Failure"); - } - public void TargetActionThrows5Times() - { - Calls++; - if (Calls < 6) throw new Exception("Simulating Failure"); - } + Calls++; + if (Calls < 6) throw new Exception("Simulating Failure"); } + } } diff --git a/test/coverlet.core.tests/Helpers/SourceRootTranslatorTests.cs b/test/coverlet.core.tests/Helpers/SourceRootTranslatorTests.cs index e464635a3..c860678c8 100644 --- a/test/coverlet.core.tests/Helpers/SourceRootTranslatorTests.cs +++ b/test/coverlet.core.tests/Helpers/SourceRootTranslatorTests.cs @@ -9,83 +9,102 @@ namespace Coverlet.Core.Helpers.Tests { - public class SourceRootTranslatorTests + public class SourceRootTranslatorTests + { + [ConditionalFact] + [SkipOnOS(OS.Linux, "Windows path format only")] + [SkipOnOS(OS.MacOS, "Windows path format only")] + public void Translate_Success() { - [ConditionalFact] - [SkipOnOS(OS.Linux, "Windows path format only")] - [SkipOnOS(OS.MacOS, "Windows path format only")] - public void Translate_Success() - { - string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; - var logger = new Mock(); - var assemblyAdapter = new Mock(); - assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => - { - if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true; - return false; - }); - fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest")); - var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); - Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate)); - Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate)); - } + string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; + var logger = new Mock(); + var assemblyAdapter = new Mock(); + assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => + { + if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true; + return false; + }); + fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest")); + var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); + Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate)); + Assert.Equal(@"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb", translator.ResolveFilePath(fileToTranslate)); + } - [ConditionalFact] - [SkipOnOS(OS.Linux, "Windows path format only")] - [SkipOnOS(OS.MacOS, "Windows path format only")] - public void TranslatePathRoot_Success() - { - var logger = new Mock(); - var assemblyAdapter = new Mock(); - assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => - { - if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true; - return false; - }); - fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest")); - var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); - Assert.Equal(@"C:\git\coverlet\", translator.ResolvePathRoot("/_/")[0].OriginalPath); - } + [ConditionalFact] + [SkipOnOS(OS.Linux, "Windows path format only")] + [SkipOnOS(OS.MacOS, "Windows path format only")] + public void TranslatePathRoot_Success() + { + var logger = new Mock(); + var assemblyAdapter = new Mock(); + assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => + { + if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true; + return false; + }); + fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest")); + var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); + Assert.Equal(@"C:\git\coverlet\", translator.ResolvePathRoot("/_/")[0].OriginalPath); + } - [Fact] - public void Translate_EmptyFile() - { - string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; - var logger = new Mock(); - var assemblyAdapter = new Mock(); - assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => - { - if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true; - return false; - }); - fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(new string[0]); - var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); - Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate)); - } + [ConditionalFact] + [SkipOnOS(OS.Linux, "Windows path format only")] + [SkipOnOS(OS.MacOS, "Windows path format only")] + public void TranslateWithDirectFile_Success() + { + var logger = new Mock(); + var assemblyAdapter = new Mock(); + assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => + { + if (p == "testLib.dll" || p == @"C:\git\coverlet\src\coverlet.core\obj\Debug\netstandard2.0\coverlet.core.pdb" || p == "CoverletSourceRootsMapping_testLib") return true; + return false; + }); + fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(File.ReadAllLines(@"TestAssets/CoverletSourceRootsMappingTest")); + var translator = new SourceRootTranslator("CoverletSourceRootsMapping_testLib", logger.Object, fileSystem.Object); + Assert.Equal(@"C:\git\coverlet\", translator.ResolvePathRoot("/_/")[0].OriginalPath); + } - [Fact] - public void Translate_MalformedFile() - { - string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; - var logger = new Mock(); - var assemblyAdapter = new Mock(); - assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); - var fileSystem = new Mock(); - fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => - { - if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true; - return false; - }); - fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(new string[1] { "malformedRow" }); - var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); - Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate)); - logger.Verify(l => l.LogWarning(It.IsAny()), Times.Once); - } + [Fact] + public void Translate_EmptyFile() + { + string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; + var logger = new Mock(); + var assemblyAdapter = new Mock(); + assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => + { + if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true; + return false; + }); + fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(new string[0]); + var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); + Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate)); + } + + [Fact] + public void Translate_MalformedFile() + { + string fileToTranslate = "/_/src/coverlet.core/obj/Debug/netstandard2.0/coverlet.core.pdb"; + var logger = new Mock(); + var assemblyAdapter = new Mock(); + assemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("testLib"); + var fileSystem = new Mock(); + fileSystem.Setup(f => f.Exists(It.IsAny())).Returns((string p) => + { + if (p == "testLib.dll" || p == "CoverletSourceRootsMapping_testLib") return true; + return false; + }); + fileSystem.Setup(f => f.ReadAllLines(It.IsAny())).Returns(new string[1] { "malformedRow" }); + var translator = new SourceRootTranslator("testLib.dll", logger.Object, fileSystem.Object, assemblyAdapter.Object); + Assert.Equal(fileToTranslate, translator.ResolveFilePath(fileToTranslate)); + logger.Verify(l => l.LogWarning(It.IsAny()), Times.Once); } + } } diff --git a/test/coverlet.core.tests/Instrumentation/InstrumenterResultTests.cs b/test/coverlet.core.tests/Instrumentation/InstrumenterResultTests.cs index f3ca69aed..02751ea14 100644 --- a/test/coverlet.core.tests/Instrumentation/InstrumenterResultTests.cs +++ b/test/coverlet.core.tests/Instrumentation/InstrumenterResultTests.cs @@ -1,162 +1,162 @@ // Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Xunit; using System.Linq; +using Xunit; namespace Coverlet.Core.Instrumentation.Tests { - public class InstrumenterResultTests + public class InstrumenterResultTests + { + [Fact] + public void TestEnsureDocumentsPropertyNotNull() { - [Fact] - public void TestEnsureDocumentsPropertyNotNull() - { - var result = new InstrumenterResult(); - Assert.NotNull(result.Documents); - } + var result = new InstrumenterResult(); + Assert.NotNull(result.Documents); + } + + [Fact] + public void TestEnsureLinesAndBranchesPropertyNotNull() + { + var document = new Document(); + Assert.NotNull(document.Lines); + Assert.NotNull(document.Branches); + } - [Fact] - public void TestEnsureLinesAndBranchesPropertyNotNull() + [Fact] + public void CoveragePrepareResult_SerializationRoundTrip() + { + var cpr = new CoveragePrepareResult(); + cpr.Identifier = "Identifier"; + cpr.MergeWith = "MergeWith"; + cpr.ModuleOrDirectory = "Module"; + cpr.UseSourceLink = true; + + var ir = new InstrumenterResult(); + ir.HitsFilePath = "HitsFilePath"; + ir.Module = "Module"; + ir.ModulePath = "ModulePath"; + ir.SourceLink = "SourceLink"; + + ir.HitCandidates.Add(new HitCandidate(true, 1, 2, 3)); + ir.HitCandidates.Add(new HitCandidate(false, 4, 5, 6)); + + var doc = new Document() + { + Index = 0, + Path = "Path0" + }; + doc.Lines.Add(0, new Line() + { + Class = "Class0", + Hits = 0, + Method = "Method0", + Number = 0 + }); + doc.Branches.Add(new BranchKey(0, 0), + new Branch() + { + Class = "Class0", + EndOffset = 0, + Hits = 0, + Method = "Method", + Number = 0, + Offset = 0, + Ordinal = 0, + Path = 0 + }); + + var doc2 = new Document() + { + Index = 1, + Path = "Path1" + }; + doc2.Lines.Add(1, new Line() + { + Class = "Class1", + Hits = 1, + Method = "Method1", + Number = 1 + }); + doc2.Branches.Add(new BranchKey(1, 1), + new Branch() + { + Class = "Class1", + EndOffset = 1, + Hits = 1, + Method = "Method1", + Number = 1, + Offset = 1, + Ordinal = 1, + Path = 1 + }); + + ir.Documents.Add("key", doc); + ir.Documents.Add("key2", doc2); + cpr.Results = new InstrumenterResult[] { ir }; + + var roundTrip = CoveragePrepareResult.Deserialize(CoveragePrepareResult.Serialize(cpr)); + + Assert.Equal(cpr.Identifier, roundTrip.Identifier); + Assert.Equal(cpr.MergeWith, roundTrip.MergeWith); + Assert.Equal(cpr.ModuleOrDirectory, roundTrip.ModuleOrDirectory); + Assert.Equal(cpr.UseSourceLink, roundTrip.UseSourceLink); + + for (int i = 0; i < cpr.Results.Length; i++) + { + Assert.Equal(cpr.Results[i].HitsFilePath, roundTrip.Results[i].HitsFilePath); + Assert.Equal(cpr.Results[i].Module, roundTrip.Results[i].Module); + Assert.Equal(cpr.Results[i].ModulePath, roundTrip.Results[i].ModulePath); + Assert.Equal(cpr.Results[i].SourceLink, roundTrip.Results[i].SourceLink); + + for (int k = 0; k < cpr.Results[i].HitCandidates.Count; k++) { - var document = new Document(); - Assert.NotNull(document.Lines); - Assert.NotNull(document.Branches); + Assert.Equal(cpr.Results[i].HitCandidates[k].start, roundTrip.Results[i].HitCandidates[k].start); + Assert.Equal(cpr.Results[i].HitCandidates[k].isBranch, roundTrip.Results[i].HitCandidates[k].isBranch); + Assert.Equal(cpr.Results[i].HitCandidates[k].end, roundTrip.Results[i].HitCandidates[k].end); + Assert.Equal(cpr.Results[i].HitCandidates[k].docIndex, roundTrip.Results[i].HitCandidates[k].docIndex); } - [Fact] - public void CoveragePrepareResult_SerializationRoundTrip() + for (int k = 0; k < cpr.Results[i].Documents.Count; k++) { - var cpr = new CoveragePrepareResult(); - cpr.Identifier = "Identifier"; - cpr.MergeWith = "MergeWith"; - cpr.ModuleOrDirectory = "Module"; - cpr.UseSourceLink = true; - - var ir = new InstrumenterResult(); - ir.HitsFilePath = "HitsFilePath"; - ir.Module = "Module"; - ir.ModulePath = "ModulePath"; - ir.SourceLink = "SourceLink"; - - ir.HitCandidates.Add(new HitCandidate(true, 1, 2, 3)); - ir.HitCandidates.Add(new HitCandidate(false, 4, 5, 6)); - - var doc = new Document() - { - Index = 0, - Path = "Path0" - }; - doc.Lines.Add(0, new Line() - { - Class = "Class0", - Hits = 0, - Method = "Method0", - Number = 0 - }); - doc.Branches.Add(new BranchKey(0, 0), - new Branch() - { - Class = "Class0", - EndOffset = 0, - Hits = 0, - Method = "Method", - Number = 0, - Offset = 0, - Ordinal = 0, - Path = 0 - }); - - var doc2 = new Document() + System.Collections.Generic.KeyValuePair[] documents = cpr.Results[i].Documents.ToArray(); + System.Collections.Generic.KeyValuePair[] documentsRoundTrip = roundTrip.Results[i].Documents.ToArray(); + for (int j = 0; j < documents.Length; j++) + { + Assert.Equal(documents[j].Key, documentsRoundTrip[j].Key); + Assert.Equal(documents[j].Value.Index, documentsRoundTrip[j].Value.Index); + Assert.Equal(documents[j].Value.Path, documentsRoundTrip[j].Value.Path); + + for (int v = 0; v < documents[j].Value.Lines.Count; v++) { - Index = 1, - Path = "Path1" - }; - doc2.Lines.Add(1, new Line() - { - Class = "Class1", - Hits = 1, - Method = "Method1", - Number = 1 - }); - doc2.Branches.Add(new BranchKey(1, 1), - new Branch() - { - Class = "Class1", - EndOffset = 1, - Hits = 1, - Method = "Method1", - Number = 1, - Offset = 1, - Ordinal = 1, - Path = 1 - }); - - ir.Documents.Add("key", doc); - ir.Documents.Add("key2", doc2); - cpr.Results = new InstrumenterResult[] { ir }; - - var roundTrip = CoveragePrepareResult.Deserialize(CoveragePrepareResult.Serialize(cpr)); - - Assert.Equal(cpr.Identifier, roundTrip.Identifier); - Assert.Equal(cpr.MergeWith, roundTrip.MergeWith); - Assert.Equal(cpr.ModuleOrDirectory, roundTrip.ModuleOrDirectory); - Assert.Equal(cpr.UseSourceLink, roundTrip.UseSourceLink); - - for (int i = 0; i < cpr.Results.Length; i++) + System.Collections.Generic.KeyValuePair[] lines = documents[j].Value.Lines.ToArray(); + System.Collections.Generic.KeyValuePair[] linesRoundTrip = documentsRoundTrip[j].Value.Lines.ToArray(); + + Assert.Equal(lines[v].Key, linesRoundTrip[v].Key); + Assert.Equal(lines[v].Value.Class, lines[v].Value.Class); + Assert.Equal(lines[v].Value.Hits, lines[v].Value.Hits); + Assert.Equal(lines[v].Value.Method, lines[v].Value.Method); + Assert.Equal(lines[v].Value.Number, lines[v].Value.Number); + } + + for (int v = 0; v < documents[j].Value.Branches.Count; v++) { - Assert.Equal(cpr.Results[i].HitsFilePath, roundTrip.Results[i].HitsFilePath); - Assert.Equal(cpr.Results[i].Module, roundTrip.Results[i].Module); - Assert.Equal(cpr.Results[i].ModulePath, roundTrip.Results[i].ModulePath); - Assert.Equal(cpr.Results[i].SourceLink, roundTrip.Results[i].SourceLink); - - for (int k = 0; k < cpr.Results[i].HitCandidates.Count; k++) - { - Assert.Equal(cpr.Results[i].HitCandidates[k].start, roundTrip.Results[i].HitCandidates[k].start); - Assert.Equal(cpr.Results[i].HitCandidates[k].isBranch, roundTrip.Results[i].HitCandidates[k].isBranch); - Assert.Equal(cpr.Results[i].HitCandidates[k].end, roundTrip.Results[i].HitCandidates[k].end); - Assert.Equal(cpr.Results[i].HitCandidates[k].docIndex, roundTrip.Results[i].HitCandidates[k].docIndex); - } - - for (int k = 0; k < cpr.Results[i].Documents.Count; k++) - { - System.Collections.Generic.KeyValuePair[] documents = cpr.Results[i].Documents.ToArray(); - System.Collections.Generic.KeyValuePair[] documentsRoundTrip = roundTrip.Results[i].Documents.ToArray(); - for (int j = 0; j < documents.Length; j++) - { - Assert.Equal(documents[j].Key, documentsRoundTrip[j].Key); - Assert.Equal(documents[j].Value.Index, documentsRoundTrip[j].Value.Index); - Assert.Equal(documents[j].Value.Path, documentsRoundTrip[j].Value.Path); - - for (int v = 0; v < documents[j].Value.Lines.Count; v++) - { - System.Collections.Generic.KeyValuePair[] lines = documents[j].Value.Lines.ToArray(); - System.Collections.Generic.KeyValuePair[] linesRoundTrip = documentsRoundTrip[j].Value.Lines.ToArray(); - - Assert.Equal(lines[v].Key, linesRoundTrip[v].Key); - Assert.Equal(lines[v].Value.Class, lines[v].Value.Class); - Assert.Equal(lines[v].Value.Hits, lines[v].Value.Hits); - Assert.Equal(lines[v].Value.Method, lines[v].Value.Method); - Assert.Equal(lines[v].Value.Number, lines[v].Value.Number); - } - - for (int v = 0; v < documents[j].Value.Branches.Count; v++) - { - System.Collections.Generic.KeyValuePair[] branches = documents[j].Value.Branches.ToArray(); - System.Collections.Generic.KeyValuePair[] branchesRoundTrip = documentsRoundTrip[j].Value.Branches.ToArray(); - - Assert.Equal(branches[v].Key, branchesRoundTrip[v].Key); - Assert.Equal(branches[v].Value.Class, branchesRoundTrip[v].Value.Class); - Assert.Equal(branches[v].Value.EndOffset, branchesRoundTrip[v].Value.EndOffset); - Assert.Equal(branches[v].Value.Hits, branchesRoundTrip[v].Value.Hits); - Assert.Equal(branches[v].Value.Method, branchesRoundTrip[v].Value.Method); - Assert.Equal(branches[v].Value.Number, branchesRoundTrip[v].Value.Number); - Assert.Equal(branches[v].Value.Offset, branchesRoundTrip[v].Value.Offset); - Assert.Equal(branches[v].Value.Ordinal, branchesRoundTrip[v].Value.Ordinal); - Assert.Equal(branches[v].Value.Path, branchesRoundTrip[v].Value.Path); - } - } - } + System.Collections.Generic.KeyValuePair[] branches = documents[j].Value.Branches.ToArray(); + System.Collections.Generic.KeyValuePair[] branchesRoundTrip = documentsRoundTrip[j].Value.Branches.ToArray(); + + Assert.Equal(branches[v].Key, branchesRoundTrip[v].Key); + Assert.Equal(branches[v].Value.Class, branchesRoundTrip[v].Value.Class); + Assert.Equal(branches[v].Value.EndOffset, branchesRoundTrip[v].Value.EndOffset); + Assert.Equal(branches[v].Value.Hits, branchesRoundTrip[v].Value.Hits); + Assert.Equal(branches[v].Value.Method, branchesRoundTrip[v].Value.Method); + Assert.Equal(branches[v].Value.Number, branchesRoundTrip[v].Value.Number); + Assert.Equal(branches[v].Value.Offset, branchesRoundTrip[v].Value.Offset); + Assert.Equal(branches[v].Value.Ordinal, branchesRoundTrip[v].Value.Ordinal); + Assert.Equal(branches[v].Value.Path, branchesRoundTrip[v].Value.Path); } + } } + } } + } } diff --git a/test/coverlet.core.tests/Instrumentation/InstrumenterTests.cs b/test/coverlet.core.tests/Instrumentation/InstrumenterTests.cs index a8c31da33..ed704aa16 100644 --- a/test/coverlet.core.tests/Instrumentation/InstrumenterTests.cs +++ b/test/coverlet.core.tests/Instrumentation/InstrumenterTests.cs @@ -7,365 +7,364 @@ using System.Linq; using System.Reflection; using System.Runtime.InteropServices; -using Coverlet.Core.Helpers; using Coverlet.Core.Abstractions; +using Coverlet.Core.Helpers; using Coverlet.Core.Samples.Tests; using Coverlet.Core.Symbols; -using Coverlet.Tests.Xunit.Extensions; +using Coverlet.Core.Tests; +using Coverlet.Tests.Utils; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Emit; +using Microsoft.VisualStudio.TestPlatform; using Mono.Cecil; using Moq; using Xunit; -using Microsoft.Extensions.DependencyModel; -using Microsoft.VisualStudio.TestPlatform; -using Coverlet.Core.Tests; namespace Coverlet.Core.Instrumentation.Tests { - public class InstrumenterTests : IDisposable - { - private readonly Mock _mockLogger = new(); - private Action _disposeAction; + public class InstrumenterTests : IDisposable + { + private readonly Mock _mockLogger = new(); + private Action _disposeAction; - public void Dispose() - { - _disposeAction?.Invoke(); - } + public void Dispose() + { + _disposeAction?.Invoke(); + } - [ConditionalFact] - [SkipOnOS(OS.Linux)] - [SkipOnOS(OS.MacOS)] - public void TestCoreLibInstrumentation() - { - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), nameof(TestCoreLibInstrumentation))); - string[] files = new[] - { + [Fact] + public void TestCoreLibInstrumentation() + { + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), nameof(TestCoreLibInstrumentation))); + string[] files = new[] + { "System.Private.CoreLib.dll", "System.Private.CoreLib.pdb" }; - foreach (string file in files) - { - File.Copy(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets", file), Path.Combine(directory.FullName, file), overwrite: true); - } + foreach (string file in files) + { + File.Copy(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets", file), Path.Combine(directory.FullName, file), overwrite: true); + } - var partialMockFileSystem = new Mock(); - partialMockFileSystem.CallBase = true; - partialMockFileSystem.Setup(fs => fs.OpenRead(It.IsAny())).Returns((string path) => - { - if (Path.GetFileName(path) == files[1]) - { - return File.OpenRead(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), files[1])); - } - else - { - return File.OpenRead(path); - } - }); - partialMockFileSystem.Setup(fs => fs.Exists(It.IsAny())).Returns((string path) => - { - if (Path.GetFileName(path) == files[1]) - { - return File.Exists(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), files[1])); - } - else - { - if (path.Contains(@":\git\runtime")) - { - return true; - } - else - { - return File.Exists(path); - } - } - }); - var sourceRootTranslator = new SourceRootTranslator(_mockLogger.Object, new FileSystem()); - var parameters = new CoverageParameters(); - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), partialMockFileSystem.Object, _mockLogger.Object, sourceRootTranslator); - var instrumenter = new Instrumenter(Path.Combine(directory.FullName, files[0]), "_coverlet_instrumented", parameters, _mockLogger.Object, instrumentationHelper, partialMockFileSystem.Object, sourceRootTranslator, new CecilSymbolHelper()); - - Assert.True(instrumenter.CanInstrument()); - InstrumenterResult result = instrumenter.Instrument(); - Assert.NotNull(result); - Assert.Equal(1052, result.Documents.Count); - foreach ((string docName, Document _) in result.Documents) - { - Assert.False(docName.EndsWith(@"System.Private.CoreLib\src\System\Threading\Interlocked.cs")); - } - directory.Delete(true); + var partialMockFileSystem = new Mock(); + partialMockFileSystem.CallBase = true; + partialMockFileSystem.Setup(fs => fs.OpenRead(It.IsAny())).Returns((string path) => + { + if (Path.GetFileName(path.Replace(@"\", @"/")) == files[1]) + { + return File.OpenRead(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), files[1])); } - - [Theory] - [InlineData(true)] - [InlineData(false)] - public void TestInstrument(bool singleHit) + else { - InstrumenterTest instrumenterTest = CreateInstrumentor(singleHit: singleHit); - - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Assert.Equal(Path.GetFileNameWithoutExtension(instrumenterTest.Module), result.Module); - Assert.Equal(instrumenterTest.Module, result.ModulePath); - - instrumenterTest.Directory.Delete(true); + return File.OpenRead(path); } - - [Theory] - [InlineData(true)] - [InlineData(false)] - public void TestInstrumentCoreLib(bool singleHit) + }); + partialMockFileSystem.Setup(fs => fs.Exists(It.IsAny())).Returns((string path) => + { + if (Path.GetFileName(path.Replace(@"\", @"/")) == files[1]) { - InstrumenterTest instrumenterTest = CreateInstrumentor(fakeCoreLibModule: true, singleHit: singleHit); - - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Assert.Equal(Path.GetFileNameWithoutExtension(instrumenterTest.Module), result.Module); - Assert.Equal(instrumenterTest.Module, result.ModulePath); - - instrumenterTest.Directory.Delete(true); + return File.Exists(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), files[1])); } - - [Theory] - [InlineData(typeof(ClassExcludedByCodeAnalysisCodeCoverageAttr))] - [InlineData(typeof(ClassExcludedByCoverletCodeCoverageAttr))] - public void TestInstrument_ClassesWithExcludeAttributeAreExcluded(Type excludedType) + else { - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + if (path.Contains(@":\git\runtime")) + { + return true; + } + else + { + return File.Exists(path); + } + } + }); + var sourceRootTranslator = new SourceRootTranslator(_mockLogger.Object, new FileSystem()); + var parameters = new CoverageParameters(); + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), partialMockFileSystem.Object, _mockLogger.Object, sourceRootTranslator); + var instrumenter = new Instrumenter(Path.Combine(directory.FullName, files[0]), "_coverlet_instrumented", parameters, _mockLogger.Object, instrumentationHelper, partialMockFileSystem.Object, sourceRootTranslator, new CecilSymbolHelper()); + + Assert.True(instrumenter.CanInstrument()); + InstrumenterResult result = instrumenter.Instrument(); + Assert.NotNull(result); + Assert.Equal(1052, result.Documents.Count); + foreach ((string docName, Document _) in result.Documents) + { + Assert.False(docName.EndsWith(@"System.Private.CoreLib\src\System\Threading\Interlocked.cs")); + } + directory.Delete(true); + } - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); - Assert.NotNull(doc); + [Theory] + [InlineData(true)] + [InlineData(false)] + public void TestInstrument(bool singleHit) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(singleHit: singleHit); - bool found = doc.Lines.Values.Any(l => l.Class == excludedType.FullName); - Assert.False(found, "Class decorated with with exclude attribute should be excluded"); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - instrumenterTest.Directory.Delete(true); - } + Assert.Equal(Path.GetFileNameWithoutExtension(instrumenterTest.Module), result.Module); + Assert.Equal(instrumenterTest.Module, result.ModulePath); - [Theory] - [InlineData(typeof(ClassExcludedByAttrWithoutAttributeNameSuffix), nameof(TestSDKAutoGeneratedCode))] - public void TestInstrument_ClassesWithExcludeAttributeWithoutAttributeNameSuffixAreExcluded(Type excludedType, string excludedAttribute) - { - InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + instrumenterTest.Directory.Delete(true); + } - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); - Assert.NotNull(doc); + [Theory] + [InlineData(true)] + [InlineData(false)] + public void TestInstrumentCoreLib(bool singleHit) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(fakeCoreLibModule: true, singleHit: singleHit); - bool found = doc.Lines.Values.Any(l => l.Class == excludedType.FullName); - Assert.False(found, "Class decorated with with exclude attribute should be excluded"); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - instrumenterTest.Directory.Delete(true); - } + Assert.Equal(Path.GetFileNameWithoutExtension(instrumenterTest.Module), result.Module); + Assert.Equal(instrumenterTest.Module, result.ModulePath); - [Theory] - [InlineData(nameof(ObsoleteAttribute))] - [InlineData("Obsolete")] - [InlineData(nameof(TestSDKAutoGeneratedCode))] - public void TestInstrument_ClassesWithCustomExcludeAttributeAreExcluded(string excludedAttribute) - { - InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + instrumenterTest.Directory.Delete(true); + } - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); - Assert.NotNull(doc); -#pragma warning disable CS0612 // Type or member is obsolete - bool found = doc.Lines.Values.Any(l => l.Class.Equals(nameof(ClassExcludedByObsoleteAttr))); -#pragma warning restore CS0612 // Type or member is obsolete - Assert.False(found, "Class decorated with with exclude attribute should be excluded"); + [Theory] + [InlineData(typeof(ClassExcludedByCodeAnalysisCodeCoverageAttr))] + [InlineData(typeof(ClassExcludedByCoverletCodeCoverageAttr))] + public void TestInstrument_ClassesWithExcludeAttributeAreExcluded(Type excludedType) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - instrumenterTest.Directory.Delete(true); - } + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); + Assert.NotNull(doc); - [Theory] - [InlineData(nameof(ObsoleteAttribute), "ClassWithMethodExcludedByObsoleteAttr")] - [InlineData("Obsolete", "ClassWithMethodExcludedByObsoleteAttr")] - [InlineData(nameof(TestSDKAutoGeneratedCode), "ClassExcludedByAttrWithoutAttributeNameSuffix")] - public void TestInstrument_ClassesWithMethodWithCustomExcludeAttributeAreExcluded(string excludedAttribute, string testClassName) - { - InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + bool found = doc.Lines.Values.Any(l => l.Class == excludedType.FullName); + Assert.False(found, "Class decorated with with exclude attribute should be excluded"); - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); - Assert.NotNull(doc); - bool found = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::Method(System.String)")); - Assert.False(found, "Method decorated with with exclude attribute should be excluded"); + instrumenterTest.Directory.Delete(true); + } - instrumenterTest.Directory.Delete(true); - } + [Theory] + [InlineData(typeof(ClassExcludedByAttrWithoutAttributeNameSuffix), nameof(TestSDKAutoGeneratedCode))] + [InlineData(typeof(ClassExcludedByAttrWithoutAttributeNameSuffix), "Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode")] + public void TestInstrument_ClassesWithExcludeAttributeWithoutAttributeNameSuffixAreExcluded(Type excludedType, string excludedAttribute) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - [Theory] - [InlineData(nameof(ObsoleteAttribute), "ClassWithMethodExcludedByObsoleteAttr")] - [InlineData("Obsolete", "ClassWithMethodExcludedByObsoleteAttr")] - [InlineData(nameof(TestSDKAutoGeneratedCode), "ClassExcludedByAttrWithoutAttributeNameSuffix")] - public void TestInstrument_ClassesWithPropertyWithCustomExcludeAttributeAreExcluded(string excludedAttribute, string testClassName) - { - InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); + Assert.NotNull(doc); - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); - Assert.NotNull(doc); - bool getFound = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::get_Property()")); - Assert.False(getFound, "Property getter decorated with with exclude attribute should be excluded"); + bool found = doc.Lines.Values.Any(l => l.Class == excludedType.FullName); + Assert.False(found, "Class decorated with with exclude attribute should be excluded"); - bool setFound = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::set_Property()")); - Assert.False(setFound, "Property setter decorated with with exclude attribute should be excluded"); + instrumenterTest.Directory.Delete(true); + } - instrumenterTest.Directory.Delete(true); - } + [Theory] + [InlineData(nameof(ObsoleteAttribute))] + [InlineData("Obsolete")] + [InlineData("System.ObsoleteAttribute")] + public void TestInstrument_ClassesWithCustomExcludeAttributeAreExcluded(string excludedAttribute) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - private InstrumenterTest CreateInstrumentor(bool fakeCoreLibModule = false, string[] attributesToIgnore = null, string[] excludedFiles = null, bool singleHit = false) - { - string module = GetType().Assembly.Location; - string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); - string identifier = Guid.NewGuid().ToString(); + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); + Assert.NotNull(doc); +#pragma warning disable CS0612 // Type or member is obsolete + bool found = doc.Lines.Values.Any(l => l.Class.Equals(typeof(ClassExcludedByObsoleteAttr).FullName)); +#pragma warning restore CS0612 // Type or member is obsolete + Assert.False(found, "Class decorated with with exclude attribute should be excluded"); - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), identifier)); + instrumenterTest.Directory.Delete(true); + } - string destModule, destPdb; - if (fakeCoreLibModule) - { - destModule = "System.Private.CoreLib.dll"; - destPdb = "System.Private.CoreLib.pdb"; - } - else - { - destModule = Path.GetFileName(module); - destPdb = Path.GetFileName(pdb); - } + [Theory] + [InlineData(nameof(ObsoleteAttribute), "ClassWithMethodExcludedByObsoleteAttr")] + [InlineData("Obsolete", "ClassWithMethodExcludedByObsoleteAttr")] + [InlineData("System.ObsoleteAttribute", "ClassWithMethodExcludedByObsoleteAttr")] + [InlineData(nameof(TestSDKAutoGeneratedCode), "ClassExcludedByAttrWithoutAttributeNameSuffix")] //extend this with full name + public void TestInstrument_ClassesWithMethodWithCustomExcludeAttributeAreExcluded(string excludedAttribute, string testClassName) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - File.Copy(module, Path.Combine(directory.FullName, destModule), true); - File.Copy(pdb, Path.Combine(directory.FullName, destPdb), true); + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); + Assert.NotNull(doc); + bool found = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::Method(System.String)")); + Assert.False(found, "Method decorated with with exclude attribute should be excluded"); - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, new SourceRootTranslator(new Mock().Object, new FileSystem())); + instrumenterTest.Directory.Delete(true); + } - module = Path.Combine(directory.FullName, destModule); - CoverageParameters parameters = new() - { - ExcludeAttributes = attributesToIgnore, - DoesNotReturnAttributes = new string[] { "DoesNotReturnAttribute" } - }; - var instrumenter = new Instrumenter(module, identifier, parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); - return new InstrumenterTest - { - Instrumenter = instrumenter, - Module = module, - Identifier = identifier, - Directory = directory - }; - } + [Theory] + [InlineData(nameof(ObsoleteAttribute), "ClassWithPropertyExcludedByObsoleteAttr")] + [InlineData("Obsolete", "ClassWithPropertyExcludedByObsoleteAttr")] + [InlineData("System.ObsoleteAttribute", "ClassWithPropertyExcludedByObsoleteAttr")] + public void TestInstrument_ClassesWithPropertyWithCustomExcludeAttributeAreExcluded(string excludedAttribute, string testClassName) + { + InstrumenterTest instrumenterTest = CreateInstrumentor(attributesToIgnore: new string[] { excludedAttribute }); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - class InstrumenterTest - { - public Instrumenter Instrumenter { get; set; } + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Samples.cs"); + Assert.NotNull(doc); + bool getFound = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::get_Property()")); + Assert.False(getFound, "Property getter decorated with with exclude attribute should be excluded"); - public string Module { get; set; } + bool setFound = doc.Lines.Values.Any(l => l.Method.Equals($"System.String Coverlet.Core.Samples.Tests.{testClassName}::set_Property()")); + Assert.False(setFound, "Property setter decorated with with exclude attribute should be excluded"); - public string Identifier { get; set; } + instrumenterTest.Directory.Delete(true); + } - public DirectoryInfo Directory { get; set; } - } + private InstrumenterTest CreateInstrumentor(bool fakeCoreLibModule = false, string[] attributesToIgnore = null, string[] excludedFiles = null, bool singleHit = false) + { + string module = GetType().Assembly.Location; + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + string identifier = Guid.NewGuid().ToString(); + + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), identifier)); + + string destModule, destPdb; + if (fakeCoreLibModule) + { + destModule = "System.Private.CoreLib.dll"; + destPdb = "System.Private.CoreLib.pdb"; + } + else + { + destModule = Path.GetFileName(module); + destPdb = Path.GetFileName(pdb); + } + + File.Copy(module, Path.Combine(directory.FullName, destModule), true); + File.Copy(pdb, Path.Combine(directory.FullName, destPdb), true); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, new SourceRootTranslator(new Mock().Object, new FileSystem())); + + module = Path.Combine(directory.FullName, destModule); + CoverageParameters parameters = new() + { + ExcludeAttributes = attributesToIgnore, + DoesNotReturnAttributes = new string[] { "DoesNotReturnAttribute" } + }; + var instrumenter = new Instrumenter(module, identifier, parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper()); + return new InstrumenterTest + { + Instrumenter = instrumenter, + Module = module, + Identifier = identifier, + Directory = directory + }; + } - [Fact] - public void TestInstrument_NetStandardAwareAssemblyResolver_FromRuntime() - { - var netstandardResolver = new NetstandardAwareAssemblyResolver(null, _mockLogger.Object); + class InstrumenterTest + { + public Instrumenter Instrumenter { get; set; } - // We ask for "official" netstandard.dll implementation with know MS public key cc7b13ffcd2ddd51 same in all runtime - AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse("netstandard, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51")); - Assert.NotNull(resolved); + public string Module { get; set; } - // We check that netstandard.dll was resolved from runtime folder, where System.Object is - Assert.Equal(Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "netstandard.dll"), resolved.MainModule.FileName); - } + public string Identifier { get; set; } - [Fact] - public void TestInstrument_NetStandardAwareAssemblyResolver_FromFolder() - { - // Someone could create a custom dll named netstandard.dll we need to be sure that not - // conflicts with "official" resolution - - // We create dummy netstandard.dll - var compilation = CSharpCompilation.Create( - "netstandard", - new[] { CSharpSyntaxTree.ParseText("") }, - new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) }, - new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); - - Assembly newAssemlby; - using (var dllStream = new MemoryStream()) - { - EmitResult emitResult = compilation.Emit(dllStream); - Assert.True(emitResult.Success); - newAssemlby = Assembly.Load(dllStream.ToArray()); - // remove if exists - File.Delete("netstandard.dll"); - File.WriteAllBytes("netstandard.dll", dllStream.ToArray()); - } + public DirectoryInfo Directory { get; set; } + } - var netstandardResolver = new NetstandardAwareAssemblyResolver(newAssemlby.Location, _mockLogger.Object); - AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse(newAssemlby.FullName)); + [Fact] + public void TestInstrument_NetStandardAwareAssemblyResolver_FromRuntime() + { + var netstandardResolver = new NetstandardAwareAssemblyResolver(null, _mockLogger.Object); - // We check if final netstandard.dll resolved is local folder one and not "official" netstandard.dll - Assert.Equal(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "netstandard.dll"), Path.GetFullPath(resolved.MainModule.FileName)); - } + // We ask for "official" netstandard.dll implementation with know MS public key cc7b13ffcd2ddd51 same in all runtime + AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse("netstandard, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51")); + Assert.NotNull(resolved); - public static IEnumerable TestInstrument_ExcludedFilesHelper_Data() - { - yield return new object[] { new string[]{ @"one.txt" }, new ValueTuple[] + // We check that netstandard.dll was resolved from runtime folder, where System.Object is + Assert.Equal(Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "netstandard.dll"), resolved.MainModule.FileName); + } + + [Fact] + public void TestInstrument_NetStandardAwareAssemblyResolver_FromFolder() + { + // Someone could create a custom dll named netstandard.dll we need to be sure that not + // conflicts with "official" resolution + + // We create dummy netstandard.dll + var compilation = CSharpCompilation.Create( + "netstandard", + new[] { CSharpSyntaxTree.ParseText("") }, + new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) }, + new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); + + Assembly newAssemlby; + using (var dllStream = new MemoryStream()) + { + EmitResult emitResult = compilation.Emit(dllStream); + Assert.True(emitResult.Success); + newAssemlby = Assembly.Load(dllStream.ToArray()); + // remove if exists + File.Delete("netstandard.dll"); + File.WriteAllBytes("netstandard.dll", dllStream.ToArray()); + } + + var netstandardResolver = new NetstandardAwareAssemblyResolver(newAssemlby.Location, _mockLogger.Object); + AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse(newAssemlby.FullName)); + + // We check if final netstandard.dll resolved is local folder one and not "official" netstandard.dll + Assert.Equal(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "netstandard.dll"), Path.GetFullPath(resolved.MainModule.FileName)); + } + + public static IEnumerable TestInstrument_ExcludedFilesHelper_Data() + { + yield return new object[] { new string[]{ @"one.txt" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\one.txt", false, true), (@"dir/one.txt", false, false) }}; - yield return new object[] { new string[]{ @"*one.txt" }, new ValueTuple[] + yield return new object[] { new string[]{ @"*one.txt" }, new ValueTuple[] { (@"one.txt", true , false), (@"c:\dir\one.txt", false, true), (@"dir/one.txt", false, false) }}; - yield return new object[] { new string[]{ @"*.txt" }, new ValueTuple[] + yield return new object[] { new string[]{ @"*.txt" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\one.txt", false, true), (@"dir/one.txt", false, false) }}; - yield return new object[] { new string[]{ @"*.*" }, new ValueTuple[] + yield return new object[] { new string[]{ @"*.*" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\one.txt", false, true), (@"dir/one.txt", false, false) }}; - yield return new object[] { new string[]{ @"one.*" }, new ValueTuple[] + yield return new object[] { new string[]{ @"one.*" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\one.txt", false, true), (@"dir/one.txt", false, false) }}; - yield return new object[] { new string[]{ @"dir/*.txt" }, new ValueTuple[] + yield return new object[] { new string[]{ @"dir/*.txt" }, new ValueTuple[] { (@"one.txt", false, false), (@"c:\dir\one.txt", true, true), (@"dir/one.txt", true, false) }}; - yield return new object[] { new string[]{ @"dir\*.txt" }, new ValueTuple[] + yield return new object[] { new string[]{ @"dir\*.txt" }, new ValueTuple[] { (@"one.txt", false, false), (@"c:\dir\one.txt", true, true), (@"dir/one.txt", true, false) }}; - yield return new object[] { new string[]{ @"**/*" }, new ValueTuple[] + yield return new object[] { new string[]{ @"**/*" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\one.txt", true, true), (@"dir/one.txt", true, false) }}; - yield return new object[] { new string[]{ @"dir/**/*" }, new ValueTuple[] + yield return new object[] { new string[]{ @"dir/**/*" }, new ValueTuple[] { (@"one.txt", false, false), (@"c:\dir\one.txt", true, true), @@ -373,382 +372,280 @@ public static IEnumerable TestInstrument_ExcludedFilesHelper_Data() (@"c:\dir\dir2\one.txt", true, true), (@"dir/dir2/one.txt", true, false) }}; - yield return new object[] { new string[]{ @"one.txt", @"dir\*two.txt" }, new ValueTuple[] + yield return new object[] { new string[]{ @"one.txt", @"dir\*two.txt" }, new ValueTuple[] { (@"one.txt", true, false), (@"c:\dir\imtwo.txt", true, true), (@"dir/one.txt", false, false) }}; - // This is a special case test different drive same path - // We strip out drive from path to check for globbing - // BTW I don't know if makes sense add a filter with full path maybe we should forbid - yield return new object[] { new string[]{ @"c:\dir\one.txt" }, new ValueTuple[] + // This is a special case test different drive same path + // We strip out drive from path to check for globbing + // BTW I don't know if makes sense add a filter with full path maybe we should forbid + yield return new object[] { new string[]{ @"c:\dir\one.txt" }, new ValueTuple[] { (@"c:\dir\one.txt", true, true), (@"d:\dir\one.txt", true, true) // maybe should be false? }}; - yield return new object[] { new string[]{ null }, new ValueTuple[] + yield return new object[] { new string[]{ null }, new ValueTuple[] { (null, false, false), }}; - } + } - [Theory] - [MemberData(nameof(TestInstrument_ExcludedFilesHelper_Data))] - public void TestInstrument_ExcludedFilesHelper(string[] excludeFilterHelper, ValueTuple[] result) + [Theory] + [MemberData(nameof(TestInstrument_ExcludedFilesHelper_Data))] + public void TestInstrument_ExcludedFilesHelper(string[] excludeFilterHelper, ValueTuple[] result) + { + var exludeFilterHelper = new ExcludedFilesHelper(excludeFilterHelper, new Mock().Object); + foreach (ValueTuple checkFile in result) + { + if (checkFile.Item3) // run test only on windows platform { - var exludeFilterHelper = new ExcludedFilesHelper(excludeFilterHelper, new Mock().Object); - foreach (ValueTuple checkFile in result) - { - if (checkFile.Item3) // run test only on windows platform - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - Assert.Equal(checkFile.Item2, exludeFilterHelper.Exclude(checkFile.Item1)); - } - } - else - { - Assert.Equal(checkFile.Item2, exludeFilterHelper.Exclude(checkFile.Item1)); - } - } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + Assert.Equal(checkFile.Item2, exludeFilterHelper.Exclude(checkFile.Item1)); + } } - - [Fact] - public void SkipEmbeddedPpdbWithoutLocalSource() + else { - string xunitDll = Directory.GetFiles(Directory.GetCurrentDirectory(), "xunit.core.dll").First(); - var loggerMock = new Mock(); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), loggerMock.Object, - new SourceRootTranslator(xunitDll, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - var instrumenter = new Instrumenter(xunitDll, "_xunit_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(xunitDll, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - Assert.True(instrumentationHelper.HasPdb(xunitDll, out bool embedded)); - Assert.True(embedded); - Assert.False(instrumenter.CanInstrument()); - loggerMock.Verify(l => l.LogVerbose(It.IsAny())); - - // Default case - string sample = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.empty.dll").First(); - instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - instrumenter = new Instrumenter(sample, "_coverlet_tests_projectsample_empty", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - - Assert.True(instrumentationHelper.HasPdb(sample, out embedded)); - Assert.False(embedded); - Assert.True(instrumenter.CanInstrument()); - loggerMock.VerifyNoOtherCalls(); + Assert.Equal(checkFile.Item2, exludeFilterHelper.Exclude(checkFile.Item1)); } + } + } - [ConditionalFact] - [SkipOnOS(OS.MacOS)] - [SkipOnOS(OS.Linux)] - public void SkipPpdbWithoutLocalSource() - { - string dllFileName = "75d9f96508d74def860a568f426ea4a4.dll"; - string pdbFileName = "75d9f96508d74def860a568f426ea4a4.pdb"; + [Fact] + public void SkipEmbeddedPdbWithoutLocalSource() + { + string xunitDll = Directory.GetFiles(Directory.GetCurrentDirectory(), "xunit.core.dll").First(); + var loggerMock = new Mock(); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), loggerMock.Object, + new SourceRootTranslator(xunitDll, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + var instrumenter = new Instrumenter(xunitDll, "_xunit_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(xunitDll, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); + Assert.True(instrumentationHelper.HasPdb(xunitDll, out bool embedded)); + Assert.True(embedded); + Assert.False(instrumenter.CanInstrument()); + loggerMock.Verify(l => l.LogVerbose(It.IsAny())); + + // Default case + string sample = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.empty.dll").First(); + instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + + instrumenter = new Instrumenter(sample, "_coverlet_tests_projectsample_empty", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); + + Assert.True(instrumentationHelper.HasPdb(sample, out embedded)); + Assert.False(embedded); + Assert.True(instrumenter.CanInstrument()); + // fails because log information is available + // + // ILogger.LogInformation("_mapping file name: 'CoverletSourceRootsMapping_xunit.core'", True) + // ILogger.LogInformation("_mapping file name: 'CoverletSourceRootsMapping_coverlet.core.tests'", True) + // + // loggerMock.VerifyNoOtherCalls(); + } - var partialMockFileSystem = new Mock(); - partialMockFileSystem.CallBase = true; - partialMockFileSystem.Setup(fs => fs.OpenRead(It.IsAny())).Returns((string path) => - { - if (Path.GetFileName(path) == pdbFileName) - { - return File.OpenRead(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), pdbFileName)); - } - else - { - return File.OpenRead(path); - } - }); - partialMockFileSystem.Setup(fs => fs.Exists(It.IsAny())).Returns((string path) => - { - if (Path.GetFileName(path) == pdbFileName) - { - return File.Exists(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), pdbFileName)); - } - else - { - return File.Exists(path); - } - }); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), partialMockFileSystem.Object, _mockLogger.Object, new SourceRootTranslator(_mockLogger.Object, new FileSystem())); - string sample = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), dllFileName).First(); - var loggerMock = new Mock(); - var instrumenter = new Instrumenter(sample, "_75d9f96508d74def860a568f426ea4a4_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); - - Assert.True(instrumentationHelper.HasPdb(sample, out bool embedded)); - Assert.False(embedded); - Assert.False(instrumenter.CanInstrument()); - _mockLogger.Verify(l => l.LogVerbose(It.IsAny())); + [Fact] + public void SkipPdbWithoutLocalSource() + { + string dllFileName = "75d9f96508d74def860a568f426ea4a4.dll"; + string pdbFileName = "75d9f96508d74def860a568f426ea4a4.pdb"; + + var partialMockFileSystem = new Mock(); + partialMockFileSystem.CallBase = true; + partialMockFileSystem.Setup(fs => fs.OpenRead(It.IsAny())).Returns((string path) => + { + if (Path.GetFileName(path.Replace(@"\", @"/")) == pdbFileName) + { + return File.OpenRead(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), pdbFileName)); } - - [Fact] - public void TestInstrument_MissingModule() + else + { + return File.OpenRead(path); + } + }); + partialMockFileSystem.Setup(fs => fs.Exists(It.IsAny())).Returns((string path) => + { + if (Path.GetFileName(path.Replace(@"\", @"/")) == pdbFileName) + { + return File.Exists(Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), pdbFileName)); + } + else { - var loggerMock = new Mock(); + return File.Exists(path); + } + }); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), partialMockFileSystem.Object, _mockLogger.Object, new SourceRootTranslator(_mockLogger.Object, new FileSystem())); + string sample = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "TestAssets"), dllFileName).First(); + var loggerMock = new Mock(); + var instrumenter = new Instrumenter(sample, "_75d9f96508d74def860a568f426ea4a4_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); + + Assert.True(instrumentationHelper.HasPdb(sample, out bool embedded)); + Assert.False(embedded); + Assert.False(instrumenter.CanInstrument()); + _mockLogger.Verify(l => l.LogVerbose(It.IsAny())); + } - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(new Mock().Object, new FileSystem())); + [Fact] + public void TestInstrument_MissingModule() + { + var loggerMock = new Mock(); - var instrumenter = new Instrumenter("test", "_test_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(new Mock().Object, new FileSystem())); - Assert.False(instrumenter.CanInstrument()); - loggerMock.Verify(l => l.LogWarning(It.IsAny())); - } + var instrumenter = new Instrumenter("test", "_test_instrumented", new CoverageParameters(), loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); - [Fact] - public void CanInstrumentFSharpAssemblyWithAnonymousRecord() - { - var loggerMock = new Mock(); - - string sample = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.fsharp.dll").First(); - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - - var instrumenter = new Instrumenter(sample, "_coverlet_tests_projectsample_fsharp", new CoverageParameters(), loggerMock.Object, instrumentationHelper, - new FileSystem(), new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - - Assert.True(instrumentationHelper.HasPdb(sample, out bool embedded)); - Assert.False(embedded); - Assert.True(instrumenter.CanInstrument()); - } + Assert.False(instrumenter.CanInstrument()); + loggerMock.Verify(l => l.LogWarning(It.IsAny())); + } - [Fact] - public void CanInstrument_AssemblySearchTypeNone_ReturnsTrue() - { - var loggerMock = new Mock(); - var instrumentationHelper = new Mock(); - bool embeddedPdb; - instrumentationHelper.Setup(x => x.HasPdb(It.IsAny(), out embeddedPdb)).Returns(true); + [Fact] + public void CanInstrumentFSharpAssemblyWithAnonymousRecord() + { + var loggerMock = new Mock(); - var instrumenter = new Instrumenter(It.IsAny(), It.IsAny(), new CoverageParameters{ExcludeAssembliesWithoutSources = "None"}, - loggerMock.Object, instrumentationHelper.Object, new Mock().Object, new Mock().Object, new CecilSymbolHelper()); + string sample = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.fsharp.dll").First(); + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - Assert.True(instrumenter.CanInstrument()); - } + var instrumenter = new Instrumenter(sample, "_coverlet_tests_projectsample_fsharp", new CoverageParameters(), loggerMock.Object, instrumentationHelper, + new FileSystem(), new SourceRootTranslator(Assembly.GetExecutingAssembly().Location, loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - [Theory] - [InlineData("NotAMatch", new string[] { }, false)] - [InlineData("ExcludeFromCoverageAttribute", new string[] { }, true)] - [InlineData("ExcludeFromCodeCoverageAttribute", new string[] { }, true)] - [InlineData("CustomExclude", new string[] { "CustomExclude" }, true)] - [InlineData("CustomExcludeAttribute", new string[] { "CustomExclude" }, true)] - [InlineData("CustomExcludeAttribute", new string[] { "CustomExcludeAttribute" }, true)] - public void TestInstrument_AssemblyMarkedAsExcludeFromCodeCoverage(string attributeName, string[] excludedAttributes, bool expectedExcludes) - { - string EmitAssemblyToInstrument(string outputFolder) - { - SyntaxTree attributeClassSyntaxTree = CSharpSyntaxTree.ParseText("[System.AttributeUsage(System.AttributeTargets.Assembly)]public class " + attributeName + ":System.Attribute{}"); - SyntaxTree instrumentableClassSyntaxTree = CSharpSyntaxTree.ParseText($@" + Assert.True(instrumentationHelper.HasPdb(sample, out bool embedded)); + Assert.False(embedded); + Assert.True(instrumenter.CanInstrument()); + } + + [Fact] + public void CanInstrument_AssemblySearchTypeNone_ReturnsTrue() + { + var loggerMock = new Mock(); + var instrumentationHelper = new Mock(); + bool embeddedPdb; + instrumentationHelper.Setup(x => x.HasPdb(It.IsAny(), out embeddedPdb)).Returns(true); + + var instrumenter = new Instrumenter(It.IsAny(), It.IsAny(), new CoverageParameters { ExcludeAssembliesWithoutSources = "None" }, + loggerMock.Object, instrumentationHelper.Object, new Mock().Object, new Mock().Object, new CecilSymbolHelper()); + + Assert.True(instrumenter.CanInstrument()); + } + + [Theory] + [InlineData("NotAMatch", new string[] { }, false)] + [InlineData("ExcludeFromCoverageAttribute", new string[] { }, true)] + [InlineData("ExcludeFromCodeCoverageAttribute", new string[] { }, true)] + [InlineData("CustomExclude", new string[] { "CustomExclude" }, true)] + [InlineData("CustomExcludeAttribute", new string[] { "CustomExclude" }, true)] + [InlineData("CustomExcludeAttribute", new string[] { "CustomExcludeAttribute" }, true)] + public void TestInstrument_AssemblyMarkedAsExcludeFromCodeCoverage(string attributeName, string[] excludedAttributes, bool expectedExcludes) + { + string EmitAssemblyToInstrument(string outputFolder) + { + SyntaxTree attributeClassSyntaxTree = CSharpSyntaxTree.ParseText("[System.AttributeUsage(System.AttributeTargets.Assembly)]public class " + attributeName + ":System.Attribute{}"); + SyntaxTree instrumentableClassSyntaxTree = CSharpSyntaxTree.ParseText($@" [assembly:{attributeName}] namespace coverlet.tests.projectsample.excludedbyattribute{{ public class SampleClass {{ - public int SampleMethod() - {{ - return new System.Random().Next(); - }} + public int SampleMethod() + {{ + return new System.Random().Next(); + }} }} }} "); - CSharpCompilation compilation = CSharpCompilation.Create(attributeName, new List + CSharpCompilation compilation = CSharpCompilation.Create(attributeName, new List { attributeClassSyntaxTree,instrumentableClassSyntaxTree }).AddReferences( - MetadataReference.CreateFromFile(typeof(Attribute).Assembly.Location)). - WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, false)); + MetadataReference.CreateFromFile(typeof(Attribute).Assembly.Location)). + WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, false)); - string dllPath = Path.Combine(outputFolder, $"{attributeName}.dll"); - string pdbPath = Path.Combine(outputFolder, $"{attributeName}.pdb"); + string dllPath = Path.Combine(outputFolder, $"{attributeName}.dll"); + string pdbPath = Path.Combine(outputFolder, $"{attributeName}.pdb"); - using (FileStream outputStream = File.Create(dllPath)) - using (FileStream pdbStream = File.Create(pdbPath)) - { - bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - var emitOptions = new EmitOptions(pdbFilePath: pdbPath); - EmitResult emitResult = compilation.Emit(outputStream, pdbStream, options: isWindows ? emitOptions : emitOptions.WithDebugInformationFormat(DebugInformationFormat.PortablePdb)); - if (!emitResult.Success) - { - string message = "Failure to dynamically create dll"; - foreach (Diagnostic diagnostic in emitResult.Diagnostics) - { - message += Environment.NewLine; - message += diagnostic.GetMessage(); - } - throw new Xunit.Sdk.XunitException(message); - } - } - return dllPath; - } - - string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); - Directory.CreateDirectory(tempDirectory); - _disposeAction = () => Directory.Delete(tempDirectory, true); - - var partialMockFileSystem = new Mock(); - partialMockFileSystem.CallBase = true; - partialMockFileSystem.Setup(fs => fs.NewFileStream(It.IsAny(), It.IsAny(), It.IsAny())).Returns((string path, FileMode mode, FileAccess access) => - { - return new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); - }); - var loggerMock = new Mock(); - - string excludedbyattributeDll = EmitAssemblyToInstrument(tempDirectory); - - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(new Mock().Object, new FileSystem())); - CoverageParameters parametes = new(); - parametes.ExcludeAttributes = excludedAttributes; - var instrumenter = new Instrumenter(excludedbyattributeDll, "_xunit_excludedbyattribute", parametes, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); - - InstrumenterResult result = instrumenter.Instrument(); - Assert.Empty(result.Documents); - if (expectedExcludes) { loggerMock.Verify(l => l.LogVerbose(It.IsAny())); } - } - - [Fact] - public void TestInstrument_AspNetCoreSharedFrameworkResolver() - { - var resolver = new AspNetCoreSharedFrameworkResolver(_mockLogger.Object); - var compilationLibrary = new CompilationLibrary( - "package", - "Microsoft.Extensions.Logging.Abstractions", - "2.2.0", - "sha512-B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==", - Enumerable.Empty(), - Enumerable.Empty(), - true); - - var assemblies = new List(); - Assert.True(resolver.TryResolveAssemblyPaths(compilationLibrary, assemblies)); - Assert.NotEmpty(assemblies); - } - - [Fact] - public void TestInstrument_NetstandardAwareAssemblyResolver_PreserveCompilationContext() + using (FileStream outputStream = File.Create(dllPath)) + using (FileStream pdbStream = File.Create(pdbPath)) { - var netstandardResolver = new NetstandardAwareAssemblyResolver(Assembly.GetExecutingAssembly().Location, _mockLogger.Object); - AssemblyDefinition asm = netstandardResolver.TryWithCustomResolverOnDotNetCore(new AssemblyNameReference("Microsoft.Extensions.Logging.Abstractions", new Version("2.2.0"))); - Assert.NotNull(asm); - } - - [Fact] - public void TestInstrument_LambdaInsideMethodWithExcludeAttributeAreExcluded() - { - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.ExcludeFromCoverage.cs"); - Assert.NotNull(doc); - - Assert.Contains(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr::TestLambda(System.String,System.Int32)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr::TestLambda(System.String)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLambda", 0)); - Assert.DoesNotContain(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2::TestLambda(System.String,System.Int32)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLambda", 1)); - Assert.Contains(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2::TestLambda(System.String)"); - - instrumenterTest.Directory.Delete(true); - } - - [Fact] - public void TestInstrument_LocalFunctionInsideMethodWithExcludeAttributeAreExcluded() - { - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.ExcludeFromCoverage.cs"); - Assert.NotNull(doc); - - Assert.Contains(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr::TestLocalFunction(System.String,System.Int32)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr::TestLocalFunction(System.String)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr" && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLocalFunction", 6)); - Assert.Contains(doc.Lines.Values, l => l.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr" && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLocalFunction", 7)); - Assert.DoesNotContain(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2::TestLocalFunction(System.String,System.Int32)"); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2" && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLocalFunction", 7)); - Assert.Contains(doc.Lines.Values, l => l.Method == "System.Int32 Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2::TestLocalFunction(System.String)"); - Assert.Contains(doc.Lines.Values, l => l.Class == "Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2" && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestLocalFunction", 6)); - - instrumenterTest.Directory.Delete(true); - } - - [Fact] - public void TestInstrument_YieldInsideMethodWithExcludeAttributeAreExcluded() - { - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.ExcludeFromCoverage.cs"); - Assert.NotNull(doc); - - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestYield", 2)); - Assert.Contains(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestYield", 3)); - Assert.Contains(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestYield", 2)); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestYield", 3)); - - instrumenterTest.Directory.Delete(true); + bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + var emitOptions = new EmitOptions(pdbFilePath: pdbPath); + EmitResult emitResult = compilation.Emit(outputStream, pdbStream, options: isWindows ? emitOptions : emitOptions.WithDebugInformationFormat(DebugInformationFormat.PortablePdb)); + if (!emitResult.Success) + { + string message = "Failure to dynamically create dll"; + foreach (Diagnostic diagnostic in emitResult.Diagnostics) + { + message += Environment.NewLine; + message += diagnostic.GetMessage(); + } + throw new Xunit.Sdk.XunitException(message); + } } + return dllPath; + } + + string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); + Directory.CreateDirectory(tempDirectory); + _disposeAction = () => Directory.Delete(tempDirectory, true); + + var partialMockFileSystem = new Mock(); + partialMockFileSystem.CallBase = true; + partialMockFileSystem.Setup(fs => fs.NewFileStream(It.IsAny(), It.IsAny(), It.IsAny())).Returns((string path, FileMode mode, FileAccess access) => + { + return new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); + }); + var loggerMock = new Mock(); + + string excludedbyattributeDll = EmitAssemblyToInstrument(tempDirectory); + + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(new Mock().Object, new FileSystem())); + CoverageParameters parametes = new(); + parametes.ExcludeAttributes = excludedAttributes; + var instrumenter = new Instrumenter(excludedbyattributeDll, "_xunit_excludedbyattribute", parametes, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object, new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper()); + + InstrumenterResult result = instrumenter.Instrument(); + Assert.Empty(result.Documents); + if (expectedExcludes) { loggerMock.Verify(l => l.LogVerbose(It.IsAny())); } + } - [Fact] - public void TestInstrument_AsyncAwaitInsideMethodWithExcludeAttributeAreExcluded() - { - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.ExcludeFromCoverage.cs"); - Assert.NotNull(doc); - - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestAsyncAwait", 4)); - Assert.Contains(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestAsyncAwait", 5)); - Assert.Contains(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestAsyncAwait", 4)); - Assert.DoesNotContain(doc.Lines.Values, l => l.Class.StartsWith("Coverlet.Core.Samples.Tests.MethodsWithExcludeFromCodeCoverageAttr2/") && - instrumenterTest.Instrumenter.IsSynthesizedNameOf(l.Method, "TestAsyncAwait", 5)); - - instrumenterTest.Directory.Delete(true); - } + [Fact] + public void TestInstrument_NetstandardAwareAssemblyResolver_PreserveCompilationContext() + { + var netstandardResolver = new NetstandardAwareAssemblyResolver(Assembly.GetExecutingAssembly().Location, _mockLogger.Object); + // The deprecated version is not available and replaced by actual published .NET runtime versions. Minimal supported version is 6.0.0. + AssemblyDefinition asm = netstandardResolver.TryWithCustomResolverOnDotNetCore(new AssemblyNameReference("Microsoft.Extensions.Logging.Abstractions", new Version("2.2.0"))); + Assert.NotNull(asm); + } - [Fact] - public void TestReachabilityHelper() - { - int[] allInstrumentableLines = - new[] - { + [Fact] + public void TestReachabilityHelper() + { + int[] allInstrumentableLines = + new[] + { // Throws - 7, 8, + 7, 8, // NoBranches - 12, 13, 14, 15, 16, + 12, 13, 14, 15, 16, // If - 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, + 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, // Switch - 33, 34, 36, 39, 40, 41, 42, 44, 45, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 68, 69, + 33, 34, 36, 39, 40, 41, 42, 44, 45, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 68, 69, // Subtle - 72, 73, 75, 78, 79, 80, 82, 83, 86, 87, 88, 91, 92, 95, 96, 98, 99, 101, 102, 103, + 72, 73, 75, 78, 79, 80, 82, 83, 86, 87, 88, 91, 92, 95, 96, 98, 99, 101, 102, 103, // UnreachableBranch 106, 107, 108, 110, 111, 112, 113, 114, // ThrowsGeneric @@ -763,10 +660,10 @@ public void TestReachabilityHelper() 147, 149, 150, 151, 152, 153, 154, 155, 156, 159, 161, 163, 166, 167, 168, // FiltersAndFinallies 171, 173, 174, 175, 176, 177, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197 - }; - int[] notReachableLines = - new[] - { + }; + int[] notReachableLines = + new[] + { // NoBranches 15, 16, // If @@ -774,7 +671,7 @@ public void TestReachabilityHelper() // Switch 41, 42, // Subtle - 79, 80, 88, 96, 98, 99, + 79, 80, 88, 96, 98, 99, // UnreachableBranch 110, 111, 112, 113, 114, // CallsGenericMethodDoesNotReturn @@ -785,51 +682,77 @@ public void TestReachabilityHelper() 163, 164, // FiltersAndFinallies 176, 177, 183, 184, 189, 190, 195, 196, 197 - }; + }; - int[] expectedToBeInstrumented = allInstrumentableLines.Except(notReachableLines).ToArray(); + int[] expectedToBeInstrumented = allInstrumentableLines.Except(notReachableLines).ToArray(); - InstrumenterTest instrumenterTest = CreateInstrumentor(); - InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); + InstrumenterTest instrumenterTest = CreateInstrumentor(); + InstrumenterResult result = instrumenterTest.Instrumenter.Instrument(); - Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.DoesNotReturn.cs"); + Document doc = result.Documents.Values.FirstOrDefault(d => Path.GetFileName(d.Path) == "Instrumentation.DoesNotReturn.cs"); - // check for instrumented lines - doc.AssertNonInstrumentedLines(BuildConfiguration.Debug, notReachableLines); - doc.AssertInstrumentLines(BuildConfiguration.Debug, expectedToBeInstrumented); + // check for instrumented lines + doc.AssertNonInstrumentedLines(BuildConfiguration.Debug, notReachableLines); + doc.AssertInstrumentLines(BuildConfiguration.Debug, expectedToBeInstrumented); - instrumenterTest.Directory.Delete(true); - } + instrumenterTest.Directory.Delete(true); + } - [Fact] - public void Instrumenter_MethodsWithoutReferenceToSource_AreSkipped() - { - var loggerMock = new Mock(); + [Fact] + public void Instrumenter_MethodsWithoutReferenceToSource_AreSkipped() + { + var loggerMock = new Mock(); - string module = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.vbmynamespace.dll").First(); - string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); + string module = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.vbmynamespace.dll").First(); + string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); - DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); + DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); - File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); - File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); + File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); + File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); - var instrumentationHelper = - new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, - new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); + var instrumentationHelper = + new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object, + new SourceRootTranslator(module, new Mock().Object, new FileSystem(), new AssemblyAdapter())); - CoverageParameters parameters = new(); + CoverageParameters parameters = new(); - var instrumenter = new Instrumenter(Path.Combine(directory.FullName, Path.GetFileName(module)), "_coverlet_tests_projectsample_vbmynamespace", parameters, - loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(Path.Combine(directory.FullName, Path.GetFileName(module)), loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - - instrumentationHelper.BackupOriginalModule(Path.Combine(directory.FullName, Path.GetFileName(module)), "_coverlet_tests_projectsample_vbmynamespace"); + var instrumenter = new Instrumenter(Path.Combine(directory.FullName, Path.GetFileName(module)), "_coverlet_tests_projectsample_vbmynamespace", parameters, + loggerMock.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(Path.Combine(directory.FullName, Path.GetFileName(module)), loggerMock.Object, new FileSystem(), new AssemblyAdapter()), new CecilSymbolHelper()); - InstrumenterResult result = instrumenter.Instrument(); + instrumentationHelper.BackupOriginalModule(Path.Combine(directory.FullName, Path.GetFileName(module)), "_coverlet_tests_projectsample_vbmynamespace"); - Assert.False(result.Documents.ContainsKey(string.Empty)); + InstrumenterResult result = instrumenter.Instrument(); - directory.Delete(true); - } + Assert.False(result.Documents.ContainsKey(string.Empty)); + + directory.Delete(true); + } + [Fact] + public void RuntimeConfigurationReaderSingleFrameworkCheck() + { + var reader = new RuntimeConfigurationReader(@"TestAssets/single.framework.runtimeconfig.json"); + + IEnumerable<(string Name, string Version)> referencedFrameworks = reader.GetFrameworks(); + + Assert.Single(referencedFrameworks); + Assert.Collection(referencedFrameworks, item => Assert.Equal("Microsoft.NETCore.App", item.Name)); + Assert.Collection(referencedFrameworks, item => Assert.Equal("8.0.0", item.Version)); + + } + + [Fact] + public void RuntimeConfigurationReaderMultipleFrameworkCheck() + { + var reader = new RuntimeConfigurationReader(@"TestAssets/multiple.frameworks.runtimeconfig.json"); + + (string Name, string Version)[] referencedFrameworks = reader.GetFrameworks().ToArray(); + + Assert.Equal(2, referencedFrameworks.Length); + Assert.Equal("Microsoft.NETCore.App", referencedFrameworks[0].Name); + Assert.Equal("8.0.0", referencedFrameworks[0].Version); + Assert.Equal("Microsoft.AspNetCore.App", referencedFrameworks[1].Name); + Assert.Equal("8.0.0", referencedFrameworks[1].Version); } + } } diff --git a/test/coverlet.core.tests/Instrumentation/ModuleTrackerTemplateTests.cs b/test/coverlet.core.tests/Instrumentation/ModuleTrackerTemplateTests.cs index 7cd5f2943..c31fba1a4 100644 --- a/test/coverlet.core.tests/Instrumentation/ModuleTrackerTemplateTests.cs +++ b/test/coverlet.core.tests/Instrumentation/ModuleTrackerTemplateTests.cs @@ -6,171 +6,172 @@ using System.IO; using System.Threading; using System.Threading.Tasks; - using Coverlet.Core.Instrumentation; using Xunit; namespace Coverlet.Core.Tests.Instrumentation { - class TrackerContext : IDisposable + class TrackerContext : IDisposable + { + public TrackerContext() { - public TrackerContext() - { - ModuleTrackerTemplate.HitsFilePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); - ModuleTrackerTemplate.FlushHitFile = true; - } + ModuleTrackerTemplate.HitsFilePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); + ModuleTrackerTemplate.FlushHitFile = true; + } - public void Dispose() - { - File.Delete(ModuleTrackerTemplate.HitsFilePath); - AppDomain.CurrentDomain.ProcessExit -= ModuleTrackerTemplate.UnloadModule; - AppDomain.CurrentDomain.DomainUnload -= ModuleTrackerTemplate.UnloadModule; - } + public void Dispose() + { + File.Delete(ModuleTrackerTemplate.HitsFilePath); + AppDomain.CurrentDomain.ProcessExit -= ModuleTrackerTemplate.UnloadModule; + AppDomain.CurrentDomain.DomainUnload -= ModuleTrackerTemplate.UnloadModule; } + } - public class ModuleTrackerTemplateTests : ExternalProcessExecutionTest + public class ModuleTrackerTemplateTests : ExternalProcessExecutionTest + { + private static readonly Task s_success = Task.FromResult(0); + + [Fact] + public void HitsFileCorrectlyWritten() { - private static readonly Task s_success = Task.FromResult(0); + FunctionExecutor.Run(() => + { + using var ctx = new TrackerContext(); + ModuleTrackerTemplate.HitsArray = new[] { 1, 2, 0, 3 }; + ModuleTrackerTemplate.UnloadModule(null, null); - [Fact] - public void HitsFileCorrectlyWritten() - { - FunctionExecutor.Run(() => - { - using var ctx = new TrackerContext(); - ModuleTrackerTemplate.HitsArray = new[] { 1, 2, 0, 3 }; - ModuleTrackerTemplate.UnloadModule(null, null); + int[] expectedHitsArray = new[] { 1, 2, 0, 3 }; + Assert.Equal(expectedHitsArray, ReadHitsFile()); - int[] expectedHitsArray = new[] { 1, 2, 0, 3 }; - Assert.Equal(expectedHitsArray, ReadHitsFile()); + return s_success; + }); + } - return s_success; - }); - } + [Fact] + public void HitsFileWithDifferentNumberOfEntriesCausesExceptionOnUnload() + { + FunctionExecutor.Run(() => + { + using var ctx = new TrackerContext(); + WriteHitsFile(new[] { 1, 2, 3 }); + ModuleTrackerTemplate.HitsArray = new[] { 1 }; + Assert.Throws(() => ModuleTrackerTemplate.UnloadModule(null, null)); + return s_success; + }); + } - [Fact] - public void HitsFileWithDifferentNumberOfEntriesCausesExceptionOnUnload() + [Fact] + public void HitsOnMultipleThreadsCorrectlyCounted() + { + FunctionExecutor.Run(() => + { + var threads = new List(); + using var ctx = new TrackerContext(); + ModuleTrackerTemplate.HitsArray = new[] { 0, 0, 0, 0 }; + for (int i = 0; i < ModuleTrackerTemplate.HitsArray.Length; ++i) { - FunctionExecutor.Run(() => - { - using var ctx = new TrackerContext(); - WriteHitsFile(new[] { 1, 2, 3 }); - ModuleTrackerTemplate.HitsArray = new[] { 1 }; - Assert.Throws(() => ModuleTrackerTemplate.UnloadModule(null, null)); - return s_success; - }); + var t = new Thread(HitIndex); + threads.Add(t); + t.Start(i); } - [Fact] - public void HitsOnMultipleThreadsCorrectlyCounted() + foreach (Thread t in threads) { - FunctionExecutor.Run(() => - { - var threads = new List(); - using var ctx = new TrackerContext(); - ModuleTrackerTemplate.HitsArray = new[] { 0, 0, 0, 0 }; - for (int i = 0; i < ModuleTrackerTemplate.HitsArray.Length; ++i) - { - var t = new Thread(HitIndex); - threads.Add(t); - t.Start(i); - } - - foreach (Thread t in threads) - { - t.Join(); - } - - ModuleTrackerTemplate.UnloadModule(null, null); - int[] expectedHitsArray = new[] { 4, 3, 2, 1 }; - Assert.Equal(expectedHitsArray, ReadHitsFile()); - - static void HitIndex(object index) - { - int hitIndex = (int)index; - for (int i = 0; i <= hitIndex; ++i) - { - ModuleTrackerTemplate.RecordHit(i); - } - } - - return s_success; - }); + t.Join(); } - [Fact] - public void MultipleSequentialUnloadsHaveCorrectTotalData() + ModuleTrackerTemplate.UnloadModule(null, null); + int[] expectedHitsArray = new[] { 4, 3, 2, 1 }; + Assert.Equal(expectedHitsArray, ReadHitsFile()); + + static void HitIndex(object index) { - FunctionExecutor.Run(() => - { - using var ctx = new TrackerContext(); - ModuleTrackerTemplate.HitsArray = new[] { 0, 3, 2, 1 }; - ModuleTrackerTemplate.UnloadModule(null, null); + int hitIndex = (int)index; + for (int i = 0; i <= hitIndex; ++i) + { + ModuleTrackerTemplate.RecordHit(i); + } + } - ModuleTrackerTemplate.HitsArray = new[] { 0, 1, 2, 3 }; - ModuleTrackerTemplate.UnloadModule(null, null); + return s_success; + }); + } - int[] expectedHitsArray = new[] { 0, 4, 4, 4 }; - Assert.Equal(expectedHitsArray, ReadHitsFile()); + [Fact] + public void MultipleSequentialUnloadsHaveCorrectTotalData() + { + FunctionExecutor.Run(() => + { + using var ctx = new TrackerContext(); + ModuleTrackerTemplate.HitsArray = new[] { 0, 3, 2, 1 }; + ModuleTrackerTemplate.UnloadModule(null, null); - return s_success; - }); - } + ModuleTrackerTemplate.HitsArray = new[] { 0, 1, 2, 3 }; + ModuleTrackerTemplate.UnloadModule(null, null); - [Fact] - public void MutexBlocksMultipleWriters() - { - FunctionExecutor.Run(async () => - { - using var ctx = new TrackerContext(); - using (var mutex = new Mutex( - true, Path.GetFileNameWithoutExtension(ModuleTrackerTemplate.HitsFilePath) + "_Mutex", out bool createdNew)) - { - Assert.True(createdNew); + int[] expectedHitsArray = new[] { 0, 4, 4, 4 }; + Assert.Equal(expectedHitsArray, ReadHitsFile()); - ModuleTrackerTemplate.HitsArray = new[] { 0, 1, 2, 3 }; - var unloadTask = Task.Run(() => ModuleTrackerTemplate.UnloadModule(null, null)); + return s_success; + }); + } - Assert.False(unloadTask.Wait(5)); + [Fact] + public void MutexBlocksMultipleWriters() + { + FunctionExecutor.Run(async () => + { + using var ctx = new TrackerContext(); + using var mutex = new Mutex( + true, Path.GetFileNameWithoutExtension(ModuleTrackerTemplate.HitsFilePath) + "_Mutex", out bool createdNew); + Assert.True(createdNew); - WriteHitsFile(new[] { 0, 3, 2, 1 }); + ModuleTrackerTemplate.HitsArray = new[] { 0, 1, 2, 3 }; + var unloadTask = Task.Run(() => ModuleTrackerTemplate.UnloadModule(null, null)); - Assert.False(unloadTask.Wait(5)); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method + Assert.False(unloadTask.Wait(5)); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method - mutex.ReleaseMutex(); - await unloadTask; + WriteHitsFile(new[] { 0, 3, 2, 1 }); - int[] expectedHitsArray = new[] { 0, 4, 4, 4 }; - Assert.Equal(expectedHitsArray, ReadHitsFile()); - } +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method + Assert.False(unloadTask.Wait(5)); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method - return 0; - }); + mutex.ReleaseMutex(); + await unloadTask; - } + int[] expectedHitsArray = new[] { 0, 4, 4, 4 }; + Assert.Equal(expectedHitsArray, ReadHitsFile()); - private static void WriteHitsFile(int[] hitsArray) - { - using var fs = new FileStream(ModuleTrackerTemplate.HitsFilePath, FileMode.Create); - using var bw = new BinaryWriter(fs); - bw.Write(hitsArray.Length); - foreach (int hitCount in hitsArray) - { - bw.Write(hitCount); - } - } + return 0; + }); - private static int[] ReadHitsFile() - { - using var fs = new FileStream(ModuleTrackerTemplate.HitsFilePath, FileMode.Open); - using var br = new BinaryReader(fs); - int[] hitsArray = new int[br.ReadInt32()]; - for (int i = 0; i < hitsArray.Length; ++i) - { - hitsArray[i] = br.ReadInt32(); - } - - return hitsArray; - } } + + private static void WriteHitsFile(int[] hitsArray) + { + using var fs = new FileStream(ModuleTrackerTemplate.HitsFilePath, FileMode.Create); + using var bw = new BinaryWriter(fs); + bw.Write(hitsArray.Length); + foreach (int hitCount in hitsArray) + { + bw.Write(hitCount); + } + } + + private static int[] ReadHitsFile() + { + using var fs = new FileStream(ModuleTrackerTemplate.HitsFilePath, FileMode.Open); + using var br = new BinaryReader(fs); + int[] hitsArray = new int[br.ReadInt32()]; + for (int i = 0; i < hitsArray.Length; ++i) + { + hitsArray[i] = br.ReadInt32(); + } + + return hitsArray; + } + } } diff --git a/test/coverlet.core.tests/Properties/AssemblyInfo.cs b/test/coverlet.core.tests/Properties/AssemblyInfo.cs index 33d7581ec..6eb5c2089 100644 --- a/test/coverlet.core.tests/Properties/AssemblyInfo.cs +++ b/test/coverlet.core.tests/Properties/AssemblyInfo.cs @@ -1,6 +1,6 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; -[assembly: AssemblyKeyFile("coverlet.core.tests.snk")] \ No newline at end of file +[assembly: AssemblyKeyFile("coverlet.core.tests.snk")] diff --git a/test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs b/test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs index f54174b70..a4ab765a9 100644 --- a/test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs +++ b/test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs @@ -16,194 +16,213 @@ namespace Coverlet.Core.Reporters.Tests { - public class CoberturaReporterTests + public class CoberturaReporterTests + { + [Fact] + public void TestReport() { - [Fact] - public void TestReport() + var result = new CoverageResult(); + result.Identifier = Guid.NewGuid().ToString(); + + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); + + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); + + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods); + + var documents = new Documents(); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + documents.Add(@"C:\doc.cs", classes); + } + else + { + documents.Add(@"/doc.cs", classes); + } + + result.Modules = new Modules(); + result.Modules.Add("module", documents); + result.Parameters = new CoverageParameters(); + + CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; + Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT"); + try + { + // Assert conversion behaviour to be sure to be in a Italian culture context + // where decimal char is comma. + Assert.Equal("1,5", (1.5).ToString()); + + var reporter = new CoberturaReporter(); + string report = reporter.Report(result, new Mock().Object); + + Assert.NotEmpty(report); + + var doc = XDocument.Load(new StringReader(report)); + + IEnumerable matchingRateAttributes = doc.Descendants().Attributes().Where(attr => attr.Name.LocalName.EndsWith("-rate")); + IEnumerable rateParentNodeNames = matchingRateAttributes.Select(attr => attr.Parent.Name.LocalName); + Assert.Contains("package", rateParentNodeNames); + Assert.Contains("class", rateParentNodeNames); + Assert.Contains("method", rateParentNodeNames); + Assert.All(matchingRateAttributes.Select(attr => attr.Value), + value => { - var result = new CoverageResult(); - result.Identifier = Guid.NewGuid().ToString(); - - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); - - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); - - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes(); - classes.Add("Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods); - - var documents = new Documents(); - - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - documents.Add(@"C:\doc.cs", classes); - } - else - { - documents.Add(@"/doc.cs", classes); - } - - result.Modules = new Modules(); - result.Modules.Add("module", documents); - result.Parameters = new CoverageParameters(); - - CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; - Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT"); - try - { - // Assert conversion behaviour to be sure to be in a Italian culture context - // where decimal char is comma. - Assert.Equal("1,5", (1.5).ToString()); - - var reporter = new CoberturaReporter(); - string report = reporter.Report(result, new Mock().Object); - - Assert.NotEmpty(report); - - var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); - - IEnumerable matchingRateAttributes = doc.Descendants().Attributes().Where(attr => attr.Name.LocalName.EndsWith("-rate")); - IEnumerable rateParentNodeNames = matchingRateAttributes.Select(attr => attr.Parent.Name.LocalName); - Assert.Contains("package", rateParentNodeNames); - Assert.Contains("class", rateParentNodeNames); - Assert.Contains("method", rateParentNodeNames); - Assert.All(matchingRateAttributes.Select(attr => attr.Value), - value => - { - Assert.DoesNotContain(",", value); - Assert.Contains(".", value); - Assert.Equal(0.5, double.Parse(value, CultureInfo.InvariantCulture)); - }); - - IEnumerable matchingComplexityAttributes = doc.Descendants().Attributes().Where(attr => attr.Name.LocalName.Equals("complexity")); - IEnumerable complexityParentNodeNames = matchingComplexityAttributes.Select(attr => attr.Parent.Name.LocalName); - Assert.Contains("package", complexityParentNodeNames); - Assert.Contains("class", complexityParentNodeNames); - Assert.Contains("method", complexityParentNodeNames); - Assert.All(matchingComplexityAttributes.Select(attr => attr.Value), - value => - { - Assert.Equal(branches.Count, int.Parse(value, CultureInfo.InvariantCulture)); - }); - } - finally - { - Thread.CurrentThread.CurrentCulture = currentCulture; - } - } - - [Theory] - [InlineData( - "Test.SearchRequest::pb::Google.Protobuf.IMessage.get_Descriptor()", - "Google.Protobuf.IMessage.get_Descriptor", - "()")] - [InlineData( - "Test.SearchRequest::pb::Google.Protobuf.IMessage.get_Descriptor(int i)", - "Google.Protobuf.IMessage.get_Descriptor", - "(int i)")] - public void TestEnsureParseMethodStringCorrectly( - string methodString, - string expectedMethodName, - string expectedSignature) + Assert.DoesNotContain(",", value); + Assert.Contains(".", value); + Assert.Equal(0.5, double.Parse(value, CultureInfo.InvariantCulture)); + }); + + IEnumerable matchingComplexityAttributes = doc.Descendants().Attributes().Where(attr => attr.Name.LocalName.Equals("complexity")); + IEnumerable complexityParentNodeNames = matchingComplexityAttributes.Select(attr => attr.Parent.Name.LocalName); + Assert.Contains("package", complexityParentNodeNames); + Assert.Contains("class", complexityParentNodeNames); + Assert.Contains("method", complexityParentNodeNames); + Assert.All(matchingComplexityAttributes.Select(attr => attr.Value), + value => { - var result = new CoverageResult(); - result.Parameters = new CoverageParameters(); - result.Identifier = Guid.NewGuid().ToString(); - - var lines = new Lines(); - lines.Add(1, 1); - - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); - - var methods = new Methods(); - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes(); - classes.Add("Google.Protobuf.Reflection.MessageDescriptor", methods); - - var documents = new Documents(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - documents.Add(@"C:\doc.cs", classes); - } - else - { - documents.Add(@"/doc.cs", classes); - } - - result.Modules = new Modules(); - result.Modules.Add("module", documents); - - var reporter = new CoberturaReporter(); - string report = reporter.Report(result, new Mock().Object); - - Assert.NotEmpty(report); - - var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); - var methodAttrs = doc.Descendants() - .Where(o => o.Name.LocalName == "method") - .Attributes() - .ToDictionary(o => o.Name.LocalName, o => o.Value); - Assert.Equal(expectedMethodName, methodAttrs["name"]); - Assert.Equal(expectedSignature, methodAttrs["signature"]); - } + Assert.Equal(branches.Count, int.Parse(value, CultureInfo.InvariantCulture)); + }); + } + finally + { + Thread.CurrentThread.CurrentCulture = currentCulture; + } + } - [Fact] - public void TestReportWithDifferentDirectories() - { - var result = new CoverageResult(); - result.Parameters = new CoverageParameters(); - result.Identifier = Guid.NewGuid().ToString(); - - string absolutePath1; - string absolutePath2; - string absolutePath3; - string absolutePath4; - string absolutePath5; - string absolutePath6; - string absolutePath7; - string absolutePath8; - string absolutePath9; - - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - absolutePath1 = @"C:\projA\dir1\dir10\file1.cs"; - absolutePath2 = @"C:\projA\dir1\dir10\file2.cs"; - absolutePath3 = @"C:\projA\dir1\file3.cs"; - absolutePath4 = @"E:\projB\dir1\dir10\file4.cs"; - absolutePath5 = @"E:\projB\dir2\file5.cs"; - absolutePath6 = @"F:\file6.cs"; - absolutePath7 = @"F:\"; - absolutePath8 = @"c:\git\coverletissue\localpackagetest\deterministicbuild\ClassLibrary1\Class1.cs"; - absolutePath9 = @"c:\git\coverletissue\localpackagetest\deterministicbuild\ClassLibrary2\Class1.cs"; - } - else - { - absolutePath1 = @"/projA/dir1/dir10/file1.cs"; - absolutePath2 = @"/projA/dir1/file2.cs"; - absolutePath3 = @"/projA/dir1/file3.cs"; - absolutePath4 = @"/projA/dir2/file4.cs"; - absolutePath5 = @"/projA/dir2/file5.cs"; - absolutePath6 = @"/file1.cs"; - absolutePath7 = @"/"; - absolutePath8 = @"/git/coverletissue/localpackagetest/deterministicbuild/ClassLibrary1/Class1.cs"; - absolutePath9 = @"/git/coverletissue/localpackagetest/deterministicbuild/ClassLibrary2/Class1.cs"; - } - - var classes = new Classes { { "Class", new Methods() } }; - var documents = new Documents { + [Fact] + public void CoberturaTestReportDoesNotContainBom() + { + var result = new CoverageResult { Parameters = new CoverageParameters(), Identifier = Guid.NewGuid().ToString() }; + var documents = new Documents(); + var classes = new Classes { { "Class", new Methods() } }; + + documents.Add(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? @"C:\doc.cs" : @"/doc.cs", classes); + + result.Modules = new Modules { { "Module", documents } }; + + var reporter = new CoberturaReporter(); + string report = reporter.Report(result, new Mock().Object); + + byte[] preamble = Encoding.UTF8.GetBytes(report)[..3]; + Assert.NotEqual(Encoding.UTF8.GetPreamble(), preamble); + } + + [Theory] + [InlineData( + "Test.SearchRequest::pb::Google.Protobuf.IMessage.get_Descriptor()", + "Google.Protobuf.IMessage.get_Descriptor", + "()")] + [InlineData( + "Test.SearchRequest::pb::Google.Protobuf.IMessage.get_Descriptor(int i)", + "Google.Protobuf.IMessage.get_Descriptor", + "(int i)")] + public void TestEnsureParseMethodStringCorrectly( + string methodString, + string expectedMethodName, + string expectedSignature) + { + var result = new CoverageResult(); + result.Parameters = new CoverageParameters(); + result.Identifier = Guid.NewGuid().ToString(); + + var lines = new Lines(); + lines.Add(1, 1); + + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); + + var methods = new Methods(); + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Google.Protobuf.Reflection.MessageDescriptor", methods); + + var documents = new Documents(); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + documents.Add(@"C:\doc.cs", classes); + } + else + { + documents.Add(@"/doc.cs", classes); + } + + result.Modules = new Modules(); + result.Modules.Add("module", documents); + + var reporter = new CoberturaReporter(); + string report = reporter.Report(result, new Mock().Object); + + Assert.NotEmpty(report); + + var doc = XDocument.Load(new StringReader(report)); + + var methodAttrs = doc.Descendants() + .Where(o => o.Name.LocalName == "method") + .Attributes() + .ToDictionary(o => o.Name.LocalName, o => o.Value); + Assert.Equal(expectedMethodName, methodAttrs["name"]); + Assert.Equal(expectedSignature, methodAttrs["signature"]); + } + + [Fact] + public void TestReportWithDifferentDirectories() + { + var result = new CoverageResult(); + result.Parameters = new CoverageParameters(); + result.Identifier = Guid.NewGuid().ToString(); + + string absolutePath1; + string absolutePath2; + string absolutePath3; + string absolutePath4; + string absolutePath5; + string absolutePath6; + string absolutePath7; + string absolutePath8; + string absolutePath9; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + absolutePath1 = @"C:\projA\dir1\dir10\file1.cs"; + absolutePath2 = @"C:\projA\dir1\dir10\file2.cs"; + absolutePath3 = @"C:\projA\dir1\file3.cs"; + absolutePath4 = @"E:\projB\dir1\dir10\file4.cs"; + absolutePath5 = @"E:\projB\dir2\file5.cs"; + absolutePath6 = @"F:\file6.cs"; + absolutePath7 = @"F:\"; + absolutePath8 = @"c:\git\coverletissue\localpackagetest\deterministicbuild\ClassLibrary1\Class1.cs"; + absolutePath9 = @"c:\git\coverletissue\localpackagetest\deterministicbuild\ClassLibrary2\Class1.cs"; + } + else + { + absolutePath1 = @"/projA/dir1/dir10/file1.cs"; + absolutePath2 = @"/projA/dir1/file2.cs"; + absolutePath3 = @"/projA/dir1/file3.cs"; + absolutePath4 = @"/projA/dir2/file4.cs"; + absolutePath5 = @"/projA/dir2/file5.cs"; + absolutePath6 = @"/file1.cs"; + absolutePath7 = @"/"; + absolutePath8 = @"/git/coverletissue/localpackagetest/deterministicbuild/ClassLibrary1/Class1.cs"; + absolutePath9 = @"/git/coverletissue/localpackagetest/deterministicbuild/ClassLibrary2/Class1.cs"; + } + + var classes = new Classes { { "Class", new Methods() } }; + var documents = new Documents { { absolutePath1, classes }, { absolutePath2, classes }, { absolutePath3, classes }, @@ -215,58 +234,59 @@ public void TestReportWithDifferentDirectories() { absolutePath9, classes } }; - result.Modules = new Modules { { "Module", documents } }; - - var reporter = new CoberturaReporter(); - string report = reporter.Report(result, new Mock().Object); - - var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); - - var basePaths = doc.Element("coverage").Element("sources").Elements().Select(e => e.Value).ToList(); - var relativePaths = doc.Element("coverage").Element("packages").Element("package") - .Element("classes").Elements().Select(e => e.Attribute("filename").Value).ToList(); - - var possiblePaths = new List(); - foreach (string basePath in basePaths) - { - foreach (string relativePath in relativePaths) - { - possiblePaths.Add(Path.Combine(basePath, relativePath)); - } - } - - Assert.Contains(absolutePath1, possiblePaths); - Assert.Contains(absolutePath2, possiblePaths); - Assert.Contains(absolutePath3, possiblePaths); - Assert.Contains(absolutePath4, possiblePaths); - Assert.Contains(absolutePath5, possiblePaths); - Assert.Contains(absolutePath6, possiblePaths); - Assert.Contains(absolutePath7, possiblePaths); - Assert.Contains(absolutePath8, possiblePaths); - Assert.Contains(absolutePath9, possiblePaths); - } + result.Modules = new Modules { { "Module", documents } }; + + var reporter = new CoberturaReporter(); + string report = reporter.Report(result, new Mock().Object); + + var doc = XDocument.Load(new StringReader(report)); + + var basePaths = doc.Element("coverage").Element("sources").Elements().Select(e => e.Value).ToList(); + var relativePaths = doc.Element("coverage").Element("packages").Element("package") + .Element("classes").Elements().Select(e => e.Attribute("filename").Value).ToList(); - [Fact] - public void TestReportWithSourcelinkPaths() + var possiblePaths = new List(); + foreach (string basePath in basePaths) + { + foreach (string relativePath in relativePaths) { - var result = new CoverageResult { Parameters = new CoverageParameters() { UseSourceLink = true }, Identifier = Guid.NewGuid().ToString() }; + possiblePaths.Add(Path.Combine(basePath, relativePath)); + } + } + + Assert.Contains(absolutePath1, possiblePaths); + Assert.Contains(absolutePath2, possiblePaths); + Assert.Contains(absolutePath3, possiblePaths); + Assert.Contains(absolutePath4, possiblePaths); + Assert.Contains(absolutePath5, possiblePaths); + Assert.Contains(absolutePath6, possiblePaths); + Assert.Contains(absolutePath7, possiblePaths); + Assert.Contains(absolutePath8, possiblePaths); + Assert.Contains(absolutePath9, possiblePaths); + } + + [Fact] + public void TestReportWithSourcelinkPaths() + { + var result = new CoverageResult { Parameters = new CoverageParameters() { UseSourceLink = true }, Identifier = Guid.NewGuid().ToString() }; - string absolutePath = - @"https://raw.githubusercontent.com/johndoe/Coverlet/02c09baa8bfdee3b6cdf4be89bd98c8157b0bc08/Demo.cs"; + string absolutePath = + @"https://raw.githubusercontent.com/johndoe/Coverlet/02c09baa8bfdee3b6cdf4be89bd98c8157b0bc08/Demo.cs"; - var classes = new Classes { { "Class", new Methods() } }; - var documents = new Documents { { absolutePath, classes } }; + var classes = new Classes { { "Class", new Methods() } }; + var documents = new Documents { { absolutePath, classes } }; - result.Modules = new Modules { { "Module", documents } }; + result.Modules = new Modules { { "Module", documents } }; - var reporter = new CoberturaReporter(); - string report = reporter.Report(result, new Mock().Object); + var reporter = new CoberturaReporter(); + string report = reporter.Report(result, new Mock().Object); - var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); - string fileName = doc.Element("coverage").Element("packages").Element("package").Element("classes").Elements() - .Select(e => e.Attribute("filename").Value).Single(); + var doc = XDocument.Load(new StringReader(report)); - Assert.Equal(absolutePath, fileName); - } + string fileName = doc.Element("coverage").Element("packages").Element("package").Element("classes").Elements() + .Select(e => e.Attribute("filename").Value).Single(); + + Assert.Equal(absolutePath, fileName); } + } } diff --git a/test/coverlet.core.tests/Reporters/JsonReporterTests.cs b/test/coverlet.core.tests/Reporters/JsonReporterTests.cs index b6215befe..b1f54215f 100644 --- a/test/coverlet.core.tests/Reporters/JsonReporterTests.cs +++ b/test/coverlet.core.tests/Reporters/JsonReporterTests.cs @@ -1,42 +1,60 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System; using Coverlet.Core.Abstractions; using Moq; -using System; using Xunit; namespace Coverlet.Core.Reporters.Tests { - public class JsonReporterTests + + public class JsonReporterTests + { + private static readonly string s_resultModule = @"{ + ""module"": { + ""doc.cs"": { + ""Coverlet.Core.Reporters.Tests.JsonReporterTests"": { + ""System.Void Coverlet.Core.Reporters.Tests.JsonReporterTests.TestReport()"": { + ""Lines"": { + ""1"": 1, + ""2"": 0 + }, + ""Branches"": [] + } + } + } + } +}"; + + [Fact] + public void TestReport() { - [Fact] - public void TestReport() - { - var result = new CoverageResult(); - result.Identifier = Guid.NewGuid().ToString(); + var result = new CoverageResult + { + Identifier = Guid.NewGuid().ToString() + }; - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Reporters.Tests.JsonReporterTests.TestReport()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Reporters.Tests.JsonReporterTests.TestReport()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; - var classes = new Classes(); - classes.Add("Coverlet.Core.Reporters.Tests.JsonReporterTests", methods); + var classes = new Classes(); + classes.Add("Coverlet.Core.Reporters.Tests.JsonReporterTests", methods); - var documents = new Documents(); - documents.Add("doc.cs", classes); + var documents = new Documents(); + documents.Add("doc.cs", classes); - result.Modules = new Modules(); - result.Modules.Add("module", documents); + result.Modules = new Modules(); + result.Modules.Add("module", documents); - var reporter = new JsonReporter(); - Assert.NotEqual("{\n}", reporter.Report(result, new Mock().Object)); - Assert.NotEqual(string.Empty, reporter.Report(result, new Mock().Object)); - } + var reporter = new JsonReporter(); + Assert.Equal(s_resultModule, reporter.Report(result, new Mock().Object), ignoreLineEndingDifferences: true); } -} \ No newline at end of file + } +} diff --git a/test/coverlet.core.tests/Reporters/LcovReporterTests.cs b/test/coverlet.core.tests/Reporters/LcovReporterTests.cs index b7462f152..736730c11 100644 --- a/test/coverlet.core.tests/Reporters/LcovReporterTests.cs +++ b/test/coverlet.core.tests/Reporters/LcovReporterTests.cs @@ -1,49 +1,49 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System; using Coverlet.Core.Abstractions; using Moq; -using System; using Xunit; namespace Coverlet.Core.Reporters.Tests { - public class LcovReporterTests + public class LcovReporterTests + { + [Fact] + public void TestReport() { - [Fact] - public void TestReport() - { - var result = new CoverageResult(); - result.Parameters = new CoverageParameters(); - result.Identifier = Guid.NewGuid().ToString(); - - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); - - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); - - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Reporters.Tests.LcovReporterTests.TestReport()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes(); - classes.Add("Coverlet.Core.Reporters.Tests.LcovReporterTests", methods); - - var documents = new Documents(); - documents.Add("doc.cs", classes); - result.Modules = new Modules(); - result.Modules.Add("module", documents); - - var reporter = new LcovReporter(); - string report = reporter.Report(result, new Mock().Object); - - Assert.NotEmpty(report); - Assert.Equal("SF:doc.cs", report.Split(Environment.NewLine)[0]); - } + var result = new CoverageResult(); + result.Parameters = new CoverageParameters(); + result.Identifier = Guid.NewGuid().ToString(); + + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); + + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); + + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Reporters.Tests.LcovReporterTests.TestReport()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Coverlet.Core.Reporters.Tests.LcovReporterTests", methods); + + var documents = new Documents(); + documents.Add("doc.cs", classes); + result.Modules = new Modules(); + result.Modules.Add("module", documents); + + var reporter = new LcovReporter(); + string report = reporter.Report(result, new Mock().Object); + + Assert.NotEmpty(report); + Assert.Equal("SF:doc.cs", report.Split(Environment.NewLine)[0]); } -} \ No newline at end of file + } +} diff --git a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs index 678ea9ae2..224000666 100644 --- a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs +++ b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs @@ -1,133 +1,149 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Coverlet.Core.Abstractions; -using Moq; using System; using System.IO; using System.Linq; using System.Text; using System.Xml.Linq; +using Coverlet.Core.Abstractions; +using Moq; using Xunit; namespace Coverlet.Core.Reporters.Tests { - public class OpenCoverReporterTests + public class OpenCoverReporterTests + { + [Fact] + public void TestReport() { - [Fact] - public void TestReport() - { - var result = new CoverageResult(); - result.Parameters = new CoverageParameters(); - result.Identifier = Guid.NewGuid().ToString(); - - result.Modules = new Modules(); - result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments()); - - var reporter = new OpenCoverReporter(); - string report = reporter.Report(result, new Mock().Object); - Assert.NotEmpty(report); - var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); - Assert.Empty(doc.Descendants().Attributes("sequenceCoverage").Where(v => v.Value != "33.33")); - Assert.Empty(doc.Descendants().Attributes("branchCoverage").Where(v => v.Value != "25")); - Assert.Empty(doc.Descendants().Attributes("nPathComplexity").Where(v => v.Value != "4")); - } - - [Fact] - public void TestFilesHaveUniqueIdsOverMultipleModules() - { - var result = new CoverageResult(); - result.Parameters = new CoverageParameters(); - result.Identifier = Guid.NewGuid().ToString(); - - result.Modules = new Modules(); - result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments()); - result.Modules.Add("Some.Other.Module", CreateSecondDocuments()); - - var reporter = new OpenCoverReporter(); - string xml = reporter.Report(result, new Mock().Object); - Assert.NotEqual(string.Empty, xml); - - Assert.Contains(@"", xml); - Assert.Contains(@"", xml); - } - - [Fact] - public void TestLineBranchCoverage() - { - var result = new CoverageResult - { - Identifier = Guid.NewGuid().ToString(), - Modules = new Modules { { "Coverlet.Core.Reporters.Tests", CreateBranchCoverageDocuments() } }, - Parameters = new CoverageParameters() - }; + var result = new CoverageResult(); + result.Parameters = new CoverageParameters(); + result.Identifier = Guid.NewGuid().ToString(); + + result.Modules = new Modules(); + result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments()); + + var reporter = new OpenCoverReporter(); + string report = reporter.Report(result, new Mock().Object); + Assert.NotEmpty(report); + var doc = XDocument.Load(new StringReader(report)); + Assert.Empty(doc.Descendants().Attributes("sequenceCoverage").Where(v => v.Value != "33.33")); + Assert.Empty(doc.Descendants().Attributes("branchCoverage").Where(v => v.Value != "25")); + Assert.Empty(doc.Descendants().Attributes("nPathComplexity").Where(v => v.Value != "4")); + } - string xml = new OpenCoverReporter().Report(result, new Mock().Object); + [Fact] + public void TestFilesHaveUniqueIdsOverMultipleModules() + { + var result = new CoverageResult(); + result.Parameters = new CoverageParameters(); + result.Identifier = Guid.NewGuid().ToString(); - // Line 1: Two branches, no coverage (bec = 2, bev = 0) - Assert.Contains(@"", xml); + result.Modules = new Modules(); + result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments()); + result.Modules.Add("Some.Other.Module", CreateSecondDocuments()); - // Line 2: Two branches, one covered (bec = 2, bev = 1) - Assert.Contains(@"", xml); + var reporter = new OpenCoverReporter(); + string xml = reporter.Report(result, new Mock().Object); + Assert.NotEqual(string.Empty, xml); - // Line 3: Two branches, all covered (bec = 2, bev = 2) - Assert.Contains(@"", xml); + Assert.Contains(@"", xml); + Assert.Contains(@"", xml); + } - // Line 4: Three branches, two covered (bec = 3, bev = 2) - Assert.Contains(@"", xml); - } + [Fact] + public void TestLineBranchCoverage() + { + var result = new CoverageResult + { + Identifier = Guid.NewGuid().ToString(), + Modules = new Modules { { "Coverlet.Core.Reporters.Tests", CreateBranchCoverageDocuments() } }, + Parameters = new CoverageParameters() + }; - private static Documents CreateFirstDocuments() - { - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); - lines.Add(3, 0); + string xml = new OpenCoverReporter().Report(result, new Mock().Object); - var branches = new Branches(); - branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 41, Path = 0, Ordinal = 3 }); - branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 44, Path = 1, Ordinal = 4 }); + // Line 1: Two branches, no coverage (bec = 2, bev = 0) + Assert.Contains(@"", xml); - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Reporters.Tests.OpenCoverReporterTests.TestReport()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; + // Line 2: Two branches, one covered (bec = 2, bev = 1) + Assert.Contains(@"", xml); - var classes = new Classes(); - classes.Add("Coverlet.Core.Reporters.Tests.OpenCoverReporterTests", methods); + // Line 3: Two branches, all covered (bec = 2, bev = 2) + Assert.Contains(@"", xml); - var documents = new Documents(); - documents.Add("doc.cs", classes); + // Line 4: Three branches, two covered (bec = 3, bev = 2) + Assert.Contains(@"", xml); + } - return documents; - } + [Fact] + public void OpenCoverTestReportDoesNotContainBom() + { + var result = new CoverageResult + { + Identifier = Guid.NewGuid().ToString(), + Modules = new Modules { { "Coverlet.Core.Reporters.Tests", CreateBranchCoverageDocuments() } }, + Parameters = new CoverageParameters() + }; + + string report = new OpenCoverReporter().Report(result, new Mock().Object); + + byte[] preamble = Encoding.UTF8.GetBytes(report)[..3]; + Assert.NotEqual(Encoding.UTF8.GetPreamble(), preamble); + } + + private static Documents CreateFirstDocuments() + { + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); + lines.Add(3, 0); + + var branches = new Branches(); + branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 41, Path = 0, Ordinal = 3 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 44, Path = 1, Ordinal = 4 }); + + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Reporters.Tests.OpenCoverReporterTests.TestReport()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes(); + classes.Add("Coverlet.Core.Reporters.Tests.OpenCoverReporterTests", methods); + + var documents = new Documents(); + documents.Add("doc.cs", classes); + + return documents; + } - private static Documents CreateSecondDocuments() - { - var lines = new Lines(); - lines.Add(1, 1); - lines.Add(2, 0); + private static Documents CreateSecondDocuments() + { + var lines = new Lines(); + lines.Add(1, 1); + lines.Add(2, 0); - var methods = new Methods(); - string methodString = "System.Void Some.Other.Module.TestClass.TestMethod()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; + var methods = new Methods(); + string methodString = "System.Void Some.Other.Module.TestClass.TestMethod()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; - var classes2 = new Classes(); - classes2.Add("Some.Other.Module.TestClass", methods); + var classes2 = new Classes(); + classes2.Add("Some.Other.Module.TestClass", methods); - var documents = new Documents(); - documents.Add("TestClass.cs", classes2); + var documents = new Documents(); + documents.Add("TestClass.cs", classes2); - return documents; - } + return documents; + } - private static Documents CreateBranchCoverageDocuments() - { - var lines = new Lines + private static Documents CreateBranchCoverageDocuments() + { + var lines = new Lines { {1, 1}, {2, 1}, @@ -135,7 +151,7 @@ private static Documents CreateBranchCoverageDocuments() {4, 1}, }; - var branches = new Branches + var branches = new Branches { // Two branches, no coverage new BranchInfo {Line = 1, Hits = 0, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1}, @@ -155,16 +171,16 @@ private static Documents CreateBranchCoverageDocuments() new BranchInfo {Line = 4, Hits = 0, Offset = 40, EndOffset = 44, Path = 1, Ordinal = 4} }; - const string methodString = "System.Void Coverlet.Core.Reporters.Tests.OpenCoverReporterTests.TestReport()"; - var methods = new Methods + const string methodString = "System.Void Coverlet.Core.Reporters.Tests.OpenCoverReporterTests.TestReport()"; + var methods = new Methods { {methodString, new Method { Lines = lines, Branches = branches}} }; - return new Documents + return new Documents { {"doc.cs", new Classes {{"Coverlet.Core.Reporters.Tests.OpenCoverReporterTests", methods}}} }; - } } -} \ No newline at end of file + } +} diff --git a/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs b/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs index 1b0f7ce04..74ccbeecd 100644 --- a/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs +++ b/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs @@ -1,21 +1,21 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Xunit; namespace Coverlet.Core.Reporters.Tests { - public class ReporterFactoryTests + public class ReporterFactoryTests + { + [Fact] + public void TestCreateReporter() { - [Fact] - public void TestCreateReporter() - { - Assert.Equal(typeof(JsonReporter), new ReporterFactory("json").CreateReporter().GetType()); - Assert.Equal(typeof(LcovReporter), new ReporterFactory("lcov").CreateReporter().GetType()); - Assert.Equal(typeof(OpenCoverReporter), new ReporterFactory("opencover").CreateReporter().GetType()); - Assert.Equal(typeof(CoberturaReporter), new ReporterFactory("cobertura").CreateReporter().GetType()); - Assert.Equal(typeof(TeamCityReporter), new ReporterFactory("teamcity").CreateReporter().GetType()); - Assert.Null(new ReporterFactory("").CreateReporter()); - } + Assert.Equal(typeof(JsonReporter), new ReporterFactory("json").CreateReporter().GetType()); + Assert.Equal(typeof(LcovReporter), new ReporterFactory("lcov").CreateReporter().GetType()); + Assert.Equal(typeof(OpenCoverReporter), new ReporterFactory("opencover").CreateReporter().GetType()); + Assert.Equal(typeof(CoberturaReporter), new ReporterFactory("cobertura").CreateReporter().GetType()); + Assert.Equal(typeof(TeamCityReporter), new ReporterFactory("teamcity").CreateReporter().GetType()); + Assert.Null(new ReporterFactory("").CreateReporter()); } -} \ No newline at end of file + } +} diff --git a/test/coverlet.core.tests/Reporters/Reporters.cs b/test/coverlet.core.tests/Reporters/Reporters.cs deleted file mode 100644 index f62886407..000000000 --- a/test/coverlet.core.tests/Reporters/Reporters.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) Toni Solarin-Sodara -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.IO; -using Coverlet.Core.Abstractions; -using Coverlet.MSbuild.Tasks; -using Moq; -using Xunit; - -namespace Coverlet.Core.Reporters.Tests -{ - public class Reporters - { - // we use lcov with extension .info and cobertura with extension .cobertura.xml - // to have all possible extension format - // empty coverletOutput is not possible thank's to props default - [Theory] - // single tfm - [InlineData("", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.info")] - [InlineData(null, "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.cobertura.xml")] - [InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext")] - [InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2")] - [InlineData(null, "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.cobertura.xml")] - [InlineData(null, "file", "cobertura", "file.cobertura.xml")] - // multiple tfm - [InlineData("netcoreapp2.2", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.netcoreapp2.2.info")] - [InlineData("netcoreapp2.2", "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.netcoreapp2.2.cobertura.xml")] - [InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext")] - [InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2")] - [InlineData("netcoreapp2.2", "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.netcoreapp2.2.cobertura.xml")] - [InlineData("netcoreapp2.2", "file", "cobertura", "file.netcoreapp2.2.cobertura.xml")] - public void Msbuild_ReportWriter(string coverletMultiTargetFrameworksCurrentTFM, string coverletOutput, string reportFormat, string expectedFileName) - { - var fileSystem = new Mock(); - var console = new Mock(); - - var reportWriter = new ReportWriter( - coverletMultiTargetFrameworksCurrentTFM, - // mimic code inside CoverageResultTask.cs - Path.GetDirectoryName(coverletOutput), - coverletOutput, - new ReporterFactory(reportFormat).CreateReporter(), - fileSystem.Object, - console.Object, - new CoverageResult() { Modules = new Modules(), Parameters = new CoverageParameters() }, null); - - string path = reportWriter.WriteReport(); - // Path.Combine depends on OS so we can change only win side to avoid duplication - Assert.Equal(path.Replace('/', Path.DirectorySeparatorChar), expectedFileName.Replace('/', Path.DirectorySeparatorChar)); - } - } -} diff --git a/test/coverlet.core.tests/Reporters/TeamCityReporter.cs b/test/coverlet.core.tests/Reporters/TeamCityReporter.cs index 95fb2642f..1d628ebde 100644 --- a/test/coverlet.core.tests/Reporters/TeamCityReporter.cs +++ b/test/coverlet.core.tests/Reporters/TeamCityReporter.cs @@ -8,21 +8,21 @@ namespace Coverlet.Core.Reporters.Tests { - public class TestCreateReporterTests - { - private readonly CoverageResult _result; - private readonly TeamCityReporter _reporter; + public class TestCreateReporterTests + { + private readonly CoverageResult _result; + private readonly TeamCityReporter _reporter; - public TestCreateReporterTests() - { - _reporter = new TeamCityReporter(); - _result = new CoverageResult(); - _result.Parameters = new CoverageParameters(); - _result.Identifier = Guid.NewGuid().ToString(); + public TestCreateReporterTests() + { + _reporter = new TeamCityReporter(); + _result = new CoverageResult(); + _result.Parameters = new CoverageParameters(); + _result.Identifier = Guid.NewGuid().ToString(); - var lines = new Lines { { 1, 1 }, { 2, 0 } }; + var lines = new Lines { { 1, 1 }, { 2, 0 } }; - var branches = new Branches + var branches = new Branches { new BranchInfo { @@ -53,81 +53,81 @@ public TestCreateReporterTests() } }; - var methods = new Methods(); - string methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()"; - methods.Add(methodString, new Method()); - methods[methodString].Lines = lines; - methods[methodString].Branches = branches; - - var classes = new Classes { { "Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods } }; - - var documents = new Documents { { "doc.cs", classes } }; - - _result.Modules = new Modules { { "module", documents } }; - } - - [Fact] - public void OutputType_IsConsoleOutputType() - { - // Assert - Assert.Equal(ReporterOutputType.Console, _reporter.OutputType); - } - - [Fact] - public void Format_IsExpectedValue() - { - // Assert - Assert.Equal("teamcity", _reporter.Format); - } - - [Fact] - public void Format_IsNull() - { - // Assert - Assert.Null(_reporter.Extension); - } - - [Fact] - public void Report_ReturnsNonNullString() - { - // Act - string output = _reporter.Report(_result, new Mock().Object); - - // Assert - Assert.False(string.IsNullOrWhiteSpace(output), "Output is not null or whitespace"); - } - - [Fact] - public void Report_ReportsLineCoverage() - { - // Act - string output = _reporter.Report(_result, new Mock().Object); - - // Assert - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsLCovered' value='1']", output); - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsLTotal' value='2']", output); - } - - [Fact] - public void Report_ReportsBranchCoverage() - { - // Act - string output = _reporter.Report(_result, new Mock().Object); - - // Assert - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='1']", output); - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='3']", output); - } - - [Fact] - public void Report_ReportsMethodCoverage() - { - // Act - string output = _reporter.Report(_result, new Mock().Object); - - // Assert - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='1']", output); - Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='1']", output); - } + var methods = new Methods(); + string methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()"; + methods.Add(methodString, new Method()); + methods[methodString].Lines = lines; + methods[methodString].Branches = branches; + + var classes = new Classes { { "Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods } }; + + var documents = new Documents { { "doc.cs", classes } }; + + _result.Modules = new Modules { { "module", documents } }; + } + + [Fact] + public void OutputType_IsConsoleOutputType() + { + // Assert + Assert.Equal(ReporterOutputType.Console, _reporter.OutputType); + } + + [Fact] + public void Format_IsExpectedValue() + { + // Assert + Assert.Equal("teamcity", _reporter.Format); + } + + [Fact] + public void Format_IsNull() + { + // Assert + Assert.Null(_reporter.Extension); + } + + [Fact] + public void Report_ReturnsNonNullString() + { + // Act + string output = _reporter.Report(_result, new Mock().Object); + + // Assert + Assert.False(string.IsNullOrWhiteSpace(output), "Output is not null or whitespace"); + } + + [Fact] + public void Report_ReportsLineCoverage() + { + // Act + string output = _reporter.Report(_result, new Mock().Object); + + // Assert + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsLCovered' value='1']", output); + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsLTotal' value='2']", output); + } + + [Fact] + public void Report_ReportsBranchCoverage() + { + // Act + string output = _reporter.Report(_result, new Mock().Object); + + // Assert + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='1']", output); + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='3']", output); + } + + [Fact] + public void Report_ReportsMethodCoverage() + { + // Act + string output = _reporter.Report(_result, new Mock().Object); + + // Assert + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='1']", output); + Assert.Contains("##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='1']", output); } + } } diff --git a/test/coverlet.core.tests/Samples/Instrumentation.AutoProps.cs b/test/coverlet.core.tests/Samples/Instrumentation.AutoProps.cs index 852fcb182..abf2321ac 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.AutoProps.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.AutoProps.cs @@ -24,13 +24,27 @@ public RecordWithPropertyInit() public string RecordAutoPropsInit { get; set; } = string.Empty; } - public class ClassWithAutoRecordProperties + public class ClassWithRecordsAutoProperties { - record AutoRecordWithProperties(string Prop1, string Prop2); + record RecordWithPrimaryConstructor(string Prop1, string Prop2); - public ClassWithAutoRecordProperties() + public ClassWithRecordsAutoProperties() { - var record = new AutoRecordWithProperties(string.Empty, string.Empty); + var record = new RecordWithPrimaryConstructor(string.Empty, string.Empty); } } + + public class ClassWithInheritingRecordsAndAutoProperties + { + record BaseRecord(int A); + + record InheritedRecord(int A) : BaseRecord(A); + + public ClassWithInheritingRecordsAndAutoProperties() + { + var record = new InheritedRecord(1); + } + } + + } diff --git a/test/coverlet.core.tests/Samples/Instrumentation.AwaitUsing.cs b/test/coverlet.core.tests/Samples/Instrumentation.AwaitUsing.cs index 9353a8c46..a0586ab7c 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.AwaitUsing.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.AwaitUsing.cs @@ -36,6 +36,11 @@ async private Task Issue914_Repro_Example2() await transaction.DisposeAsync(); } + async public Task Issue1490_Repro() + { + await using var transaction = new MyTransaction(); + return default(T); + } private class MyTransaction : IAsyncDisposable { diff --git a/test/coverlet.core.tests/Samples/Instrumentation.CatchBlock.cs b/test/coverlet.core.tests/Samples/Instrumentation.CatchBlock.cs index cab0e6eaa..21175a29b 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.CatchBlock.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.CatchBlock.cs @@ -301,7 +301,7 @@ public async Task ParseAsync_WithNestedCatch(string str, bool condition) { return int.Parse(str); } - catch + catch { await Task.Delay(0); if (condition) @@ -317,7 +317,7 @@ public async Task ParseAsync_WithNestedCatch(string str, bool condition) } catch { - await Task.Delay(0); + await Task.Delay(0); throw; } } diff --git a/test/coverlet.core.tests/Samples/Instrumentation.DoesNotReturn.cs b/test/coverlet.core.tests/Samples/Instrumentation.DoesNotReturn.cs index 75512c304..5c4159214 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.DoesNotReturn.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.DoesNotReturn.cs @@ -85,7 +85,7 @@ public void Subtle() case 'C': System.Console.WriteLine("In-Constant-3"); Throws(); - goto alwayUnreachable; // unreachable + goto alwaysUnreachable; // unreachable case 'D': System.Console.WriteLine("In-Constant-4"); @@ -95,7 +95,7 @@ public void Subtle() Throws(); System.Console.WriteLine("Out-Constant-1"); // unreachable - alwayUnreachable: // unreachable + alwaysUnreachable: // unreachable System.Console.WriteLine("Out-Constant-2"); // unreachable subtlyReachable: @@ -167,7 +167,7 @@ public void WithLeave() System.Console.WriteLine("Constant-2"); } - public void FiltersAndFinallies() + public void FiltersAndFinally() { try { @@ -175,7 +175,7 @@ public void FiltersAndFinallies() Throws(); System.Console.WriteLine("Constant-2"); //unreachable } //unreachable - catch (System.InvalidOperationException e) + catch (System.InvalidOperationException e) when (e.Message != null) { System.Console.WriteLine("InCatch-1"); diff --git a/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs b/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs index d1449ad79..9b9e97320 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.NestedStateMachines.cs @@ -14,5 +14,5 @@ public int Test() { return 0; } - } + } } \ No newline at end of file diff --git a/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.cs b/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.cs index 46151d572..1f2d2fe00 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.ExcludeFromCoverage.cs @@ -6,9 +6,12 @@ namespace Coverlet.Core.Samples.Tests { public class MethodsWithExcludeFromCodeCoverageAttr { + private string _fieldToInfluenceSynthesizedName; + [System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] public int TestLambda(string input) { + _fieldToInfluenceSynthesizedName = string.Empty; System.Func lambdaFunc = s => s.Length; return lambdaFunc(input); } diff --git a/test/coverlet.core.tests/Samples/Instrumentation.Lambda.cs b/test/coverlet.core.tests/Samples/Instrumentation.Lambda.cs index dcf4ffee1..95534caa3 100644 --- a/test/coverlet.core.tests/Samples/Instrumentation.Lambda.cs +++ b/test/coverlet.core.tests/Samples/Instrumentation.Lambda.cs @@ -130,4 +130,19 @@ private static object Do2(System.Func func) public void WriteLine(string str) { } } + + public class Issue_1447 + { + public System.Collections.Generic.IEnumerable Query1() + { + return new[] { 1 }.Select(Map); + } + + public System.Collections.Generic.IEnumerable Query2() + { + return new[] { 1 }.Select(Map); + } + + private static int Map(int row) => row + 1; + } } diff --git a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs index 8b6e46c6d..8f74222cb 100644 --- a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs +++ b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs @@ -4,448 +4,448 @@ using System.IO; using System.Linq; using System.Reflection; -using Xunit; -using Coverlet.Core.Samples.Tests; using coverlet.tests.projectsample.netframework; +using Coverlet.Core.Samples.Tests; using Mono.Cecil; using Mono.Cecil.Cil; +using Xunit; namespace Coverlet.Core.Symbols.Tests { - public class CecilSymbolHelperTests + public class CecilSymbolHelperTests + { + private ModuleDefinition _module; + private readonly CecilSymbolHelper _cecilSymbolHelper; + private readonly DefaultAssemblyResolver _resolver; + private readonly ReaderParameters _parameters; + + public CecilSymbolHelperTests() + { + string location = GetType().Assembly.Location; + _resolver = new DefaultAssemblyResolver(); + _resolver.AddSearchDirectory(Path.GetDirectoryName(location)); + _parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = _resolver }; + _module = ModuleDefinition.ReadModule(location, _parameters); + _cecilSymbolHelper = new CecilSymbolHelper(); + } + + [Fact] + public void GetBranchPoints_OneBranch() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSingleDecision)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(2, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(0, points[0].Path); + Assert.Equal(1, points[1].Path); + Assert.Equal(22, points[0].StartLine); + Assert.Equal(22, points[1].StartLine); + Assert.NotNull(points[1].Document); + Assert.Equal(points[0].Document, points[1].Document); + } + + [Fact] + public void GetBranchPoints_Using_Where_GeneratedBranchesIgnored() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSimpleUsingStatement)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + Assert.Equal(2, points.Count); + } + + [Fact] + public void GetBranchPoints_GeneratedBranches_DueToCachedAnonymousMethodDelegate_Ignored() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSimpleTaskWithLambda)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_TwoBranch() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasTwoDecisions)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[2].Offset, points[3].Offset); + Assert.Equal(28, points[0].StartLine); + Assert.Equal(29, points[2].StartLine); + } + + [Fact] + public void GetBranchPoints_CompleteIf() { - private ModuleDefinition _module; - private readonly CecilSymbolHelper _cecilSymbolHelper; - private readonly DefaultAssemblyResolver _resolver; - private readonly ReaderParameters _parameters; - - public CecilSymbolHelperTests() - { - string location = GetType().Assembly.Location; - _resolver = new DefaultAssemblyResolver(); - _resolver.AddSearchDirectory(Path.GetDirectoryName(location)); - _parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = _resolver }; - _module = ModuleDefinition.ReadModule(location, _parameters); - _cecilSymbolHelper = new CecilSymbolHelper(); - } - - [Fact] - public void GetBranchPoints_OneBranch() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSingleDecision)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(2, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(0, points[0].Path); - Assert.Equal(1, points[1].Path); - Assert.Equal(22, points[0].StartLine); - Assert.Equal(22, points[1].StartLine); - Assert.NotNull(points[1].Document); - Assert.Equal(points[0].Document, points[1].Document); - } - - [Fact] - public void GetBranchPoints_Using_Where_GeneratedBranchesIgnored() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSimpleUsingStatement)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - Assert.Equal(2, points.Count); - } - - [Fact] - public void GetBranchPoints_GeneratedBranches_DueToCachedAnonymousMethodDelegate_Ignored() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSimpleTaskWithLambda)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_TwoBranch() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasTwoDecisions)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[2].Offset, points[3].Offset); - Assert.Equal(28, points[0].StartLine); - Assert.Equal(29, points[2].StartLine); - } - - [Fact] - public void GetBranchPoints_CompleteIf() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasCompleteIf)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(2, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(35, points[0].StartLine); - Assert.Equal(35, points[1].StartLine); - } + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasCompleteIf)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(2, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(35, points[0].StartLine); + Assert.Equal(35, points[1].StartLine); + } #if !RELEASE // Issue https://github.com/tonerdo/coverlet/issues/389 - [Fact] - public void GetBranchPoints_Switch() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitch)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[0].Offset, points[2].Offset); - Assert.Equal(3, points[3].Path); - - Assert.Equal(47, points[0].StartLine); - Assert.Equal(47, points[1].StartLine); - Assert.Equal(47, points[2].StartLine); - Assert.Equal(47, points[3].StartLine); - } - - [Fact] - public void GetBranchPoints_SwitchWithDefault() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithDefault)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[0].Offset, points[2].Offset); - Assert.Equal(3, points[3].Path); - - Assert.Equal(61, points[0].StartLine); - Assert.Equal(61, points[1].StartLine); - Assert.Equal(61, points[2].StartLine); - Assert.Equal(61, points[3].StartLine); - } - - [Fact] - public void GetBranchPoints_SwitchWithBreaks() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithBreaks)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[0].Offset, points[2].Offset); - Assert.Equal(3, points[3].Path); - - Assert.Equal(77, points[0].StartLine); - Assert.Equal(77, points[1].StartLine); - Assert.Equal(77, points[2].StartLine); - Assert.Equal(77, points[3].StartLine); - } - - [Fact] - public void GetBranchPoints_SwitchWithMultipleCases() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithMultipleCases)}")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[0].Offset, points[2].Offset); - Assert.Equal(points[0].Offset, points[3].Offset); - Assert.Equal(3, points[3].Path); - - Assert.Equal(95, points[0].StartLine); - Assert.Equal(95, points[1].StartLine); - Assert.Equal(95, points[2].StartLine); - Assert.Equal(95, points[3].StartLine); - } + [Fact] + public void GetBranchPoints_Switch() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitch)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[0].Offset, points[2].Offset); + Assert.Equal(3, points[3].Path); + + Assert.Equal(47, points[0].StartLine); + Assert.Equal(47, points[1].StartLine); + Assert.Equal(47, points[2].StartLine); + Assert.Equal(47, points[3].StartLine); + } + + [Fact] + public void GetBranchPoints_SwitchWithDefault() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithDefault)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[0].Offset, points[2].Offset); + Assert.Equal(3, points[3].Path); + + Assert.Equal(61, points[0].StartLine); + Assert.Equal(61, points[1].StartLine); + Assert.Equal(61, points[2].StartLine); + Assert.Equal(61, points[3].StartLine); + } + + [Fact] + public void GetBranchPoints_SwitchWithBreaks() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithBreaks)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[0].Offset, points[2].Offset); + Assert.Equal(3, points[3].Path); + + Assert.Equal(77, points[0].StartLine); + Assert.Equal(77, points[1].StartLine); + Assert.Equal(77, points[2].StartLine); + Assert.Equal(77, points[3].StartLine); + } + + [Fact] + public void GetBranchPoints_SwitchWithMultipleCases() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.HasSwitchWithMultipleCases)}")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[0].Offset, points[2].Offset); + Assert.Equal(points[0].Offset, points[3].Offset); + Assert.Equal(3, points[3].Path); + + Assert.Equal(95, points[0].StartLine); + Assert.Equal(95, points[1].StartLine); + Assert.Equal(95, points[2].StartLine); + Assert.Equal(95, points[3].StartLine); + } #endif - [Fact] - public void GetBranchPoints_AssignsNegativeLineNumberToBranchesInMethodsThatHaveNoInstrumentablePoints() - { - /* - * Yes these actually exist - the compiler is very inventive - * in this case for an anonymous class the compiler will dynamically create an Equals 'utility' method. - */ - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName.Contains("f__AnonymousType")); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains("::Equals")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.NotNull(points); - foreach (BranchPoint branchPoint in points) - Assert.Equal(-1, branchPoint.StartLine); - } - - [Fact] - public void GetBranchPoints_UsingWithException_Issue243_IgnoresBranchInFinallyBlock() - { - // arrange - TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); - MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.UsingWithException_Issue243)}")); - - // check that the method is laid out the way we discovered it to be during the defect - // @see https://github.com/OpenCover/opencover/issues/243 - Assert.Single(method.Body.ExceptionHandlers); - Assert.NotNull(method.Body.ExceptionHandlers[0].HandlerStart); - Assert.Null(method.Body.ExceptionHandlers[0].HandlerEnd); - Assert.Equal(1, method.Body.Instructions.Count(i => i.OpCode.FlowControl == FlowControl.Cond_Branch)); - Assert.True(method.Body.Instructions.First(i => i.OpCode.FlowControl == FlowControl.Cond_Branch).Offset > method.Body.ExceptionHandlers[0].HandlerStart.Offset); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoresSwitchIn_GeneratedMoveNext() - { - // arrange - string nestedName = typeof(Iterator).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(Iterator).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoresBranchesIn_GeneratedMoveNextForSingletonIterator() - { - // arrange - string nestedName = typeof(SingletonIterator).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(SingletonIterator).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachine() - { - // arrange - string nestedName = typeof(AsyncAwaitStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - 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); - - string nestedName = typeof(AsyncAwaitStateMachineNetFramework).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachineNetFramework).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitValueTaskStateMachine() - { - // arrange - string nestedName = typeof(AsyncAwaitValueTaskStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitValueTaskStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoresMostBranchesIn_AwaitForeachStateMachine() - { - // arrange - string nestedName = typeof(AwaitForeachStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitForeachStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - // We do expect there to be a two-way branch (stay in the loop or not?) on - // the line containing "await foreach". - Assert.NotNull(points); - Assert.Equal(2, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(204, points[0].StartLine); - Assert.Equal(204, points[1].StartLine); - } - - [Fact] - public void GetBranchPoints_IgnoresMostBranchesIn_AwaitForeachStateMachine_WithBranchesWithinIt() - { - // arrange - string nestedName = typeof(AwaitForeachStateMachine_WithBranches).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitForeachStateMachine_WithBranches).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - // We do expect there to be four branch points (two places where we can branch - // two ways), one being the "stay in the loop or not?" branch on the line - // containing "await foreach" and the other being the "if" statement inside - // the loop. - Assert.NotNull(points); - Assert.Equal(4, points.Count); - Assert.Equal(points[0].Offset, points[1].Offset); - Assert.Equal(points[2].Offset, points[3].Offset); - Assert.Equal(219, points[0].StartLine); - Assert.Equal(219, points[1].StartLine); - Assert.Equal(217, points[2].StartLine); - Assert.Equal(217, points[3].StartLine); - } - - [Fact] - public void GetBranchPoints_IgnoresExtraBranchesIn_AsyncIteratorStateMachine() - { - // arrange - string nestedName = typeof(AsyncIteratorStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncIteratorStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - // We do expect the "for" loop to be a branch with two branch points, but that's it. - Assert.NotNull(points); - Assert.Equal(2, points.Count); - Assert.Equal(237, points[0].StartLine); - Assert.Equal(237, points[1].StartLine); - } - - [Fact] - public void GetBranchPoints_IgnoreBranchesIn_AwaitUsingStateMachine() - { - // arrange - string nestedName = typeof(AwaitUsingStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitUsingStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_IgnoreBranchesIn_ScopedAwaitUsingStateMachine() - { - // arrange - string nestedName = typeof(ScopedAwaitUsingStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; - TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(ScopedAwaitUsingStateMachine).FullName); - TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); - MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); - - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - // assert - Assert.Empty(points); - } - - [Fact] - public void GetBranchPoints_ExceptionFilter() - { - // arrange - TypeDefinition type = _module.Types.Single(x => x.FullName == typeof(ExceptionFilter).FullName); - MethodDefinition method = type.Methods.Single(x => x.FullName.Contains($"::{nameof(ExceptionFilter.Test)}")); - // act - System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); - - Assert.Empty(points); - } + [Fact] + public void GetBranchPoints_AssignsNegativeLineNumberToBranchesInMethodsThatHaveNoInstrumentablePoints() + { + /* + * Yes these actually exist - the compiler is very inventive + * in this case for an anonymous class the compiler will dynamically create an Equals 'utility' method. + */ + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName.Contains("f__AnonymousType")); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains("::Equals")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.NotNull(points); + foreach (BranchPoint branchPoint in points) + Assert.Equal(-1, branchPoint.StartLine); + } + + [Fact] + public void GetBranchPoints_UsingWithException_Issue243_IgnoresBranchInFinallyBlock() + { + // arrange + TypeDefinition type = _module.Types.First(x => x.FullName == typeof(DeclaredConstructorClass).FullName); + MethodDefinition method = type.Methods.First(x => x.FullName.Contains($"::{nameof(DeclaredConstructorClass.UsingWithException_Issue243)}")); + + // check that the method is laid out the way we discovered it to be during the defect + // @see https://github.com/OpenCover/opencover/issues/243 + Assert.Single(method.Body.ExceptionHandlers); + Assert.NotNull(method.Body.ExceptionHandlers[0].HandlerStart); + Assert.Null(method.Body.ExceptionHandlers[0].HandlerEnd); + Assert.Equal(1, method.Body.Instructions.Count(i => i.OpCode.FlowControl == FlowControl.Cond_Branch)); + Assert.True(method.Body.Instructions.First(i => i.OpCode.FlowControl == FlowControl.Cond_Branch).Offset > method.Body.ExceptionHandlers[0].HandlerStart.Offset); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoresSwitchIn_GeneratedMoveNext() + { + // arrange + string nestedName = typeof(Iterator).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(Iterator).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoresBranchesIn_GeneratedMoveNextForSingletonIterator() + { + // arrange + string nestedName = typeof(SingletonIterator).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(SingletonIterator).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachine() + { + // arrange + string nestedName = typeof(AsyncAwaitStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + 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); + + string nestedName = typeof(AsyncAwaitStateMachineNetFramework).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachineNetFramework).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitValueTaskStateMachine() + { + // arrange + string nestedName = typeof(AsyncAwaitValueTaskStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitValueTaskStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoresMostBranchesIn_AwaitForeachStateMachine() + { + // arrange + string nestedName = typeof(AwaitForeachStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitForeachStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + // We do expect there to be a two-way branch (stay in the loop or not?) on + // the line containing "await foreach". + Assert.NotNull(points); + Assert.Equal(2, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(204, points[0].StartLine); + Assert.Equal(204, points[1].StartLine); + } + + [Fact] + public void GetBranchPoints_IgnoresMostBranchesIn_AwaitForeachStateMachine_WithBranchesWithinIt() + { + // arrange + string nestedName = typeof(AwaitForeachStateMachine_WithBranches).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitForeachStateMachine_WithBranches).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + // We do expect there to be four branch points (two places where we can branch + // two ways), one being the "stay in the loop or not?" branch on the line + // containing "await foreach" and the other being the "if" statement inside + // the loop. + Assert.NotNull(points); + Assert.Equal(4, points.Count); + Assert.Equal(points[0].Offset, points[1].Offset); + Assert.Equal(points[2].Offset, points[3].Offset); + Assert.Equal(219, points[0].StartLine); + Assert.Equal(219, points[1].StartLine); + Assert.Equal(217, points[2].StartLine); + Assert.Equal(217, points[3].StartLine); + } + + [Fact] + public void GetBranchPoints_IgnoresExtraBranchesIn_AsyncIteratorStateMachine() + { + // arrange + string nestedName = typeof(AsyncIteratorStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncIteratorStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + // We do expect the "for" loop to be a branch with two branch points, but that's it. + Assert.NotNull(points); + Assert.Equal(2, points.Count); + Assert.Equal(237, points[0].StartLine); + Assert.Equal(237, points[1].StartLine); + } + + [Fact] + public void GetBranchPoints_IgnoreBranchesIn_AwaitUsingStateMachine() + { + // arrange + string nestedName = typeof(AwaitUsingStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AwaitUsingStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_IgnoreBranchesIn_ScopedAwaitUsingStateMachine() + { + // arrange + string nestedName = typeof(ScopedAwaitUsingStateMachine).GetNestedTypes(BindingFlags.NonPublic).First().Name; + TypeDefinition type = _module.Types.FirstOrDefault(x => x.FullName == typeof(ScopedAwaitUsingStateMachine).FullName); + TypeDefinition nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName)); + MethodDefinition method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()")); + + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + // assert + Assert.Empty(points); + } + + [Fact] + public void GetBranchPoints_ExceptionFilter() + { + // arrange + TypeDefinition type = _module.Types.Single(x => x.FullName == typeof(ExceptionFilter).FullName); + MethodDefinition method = type.Methods.Single(x => x.FullName.Contains($"::{nameof(ExceptionFilter.Test)}")); + // act + System.Collections.Generic.IReadOnlyList points = _cecilSymbolHelper.GetBranchPoints(method); + + Assert.Empty(points); } + } } diff --git a/test/coverlet.core.tests/TestAssets/MergeWith.coverage.json b/test/coverlet.core.tests/TestAssets/MergeWith.coverage.json new file mode 100644 index 000000000..ab9608617 --- /dev/null +++ b/test/coverlet.core.tests/TestAssets/MergeWith.coverage.json @@ -0,0 +1,43 @@ +{ + "coverletsamplelib.integration.template.dll": { + "C:\\GitHub\\coverlet\\artifacts\\bin\\coverlet.integration.tests\\debug_net7.0\\01021711\\Program.cs": { + "HelloWorld.Program": { + "System.Void HelloWorld.Program::Main(System.String[])": { + "Lines": { + "10": 1, + "11": 1, + "12": 1, + "13": 1, + "14": 1 + }, + "Branches": [] + } + } + }, + "C:\\GitHub\\coverlet\\artifacts\\bin\\coverlet.integration.tests\\debug_net7.0\\01021711\\DeepThought.cs": { + "Coverlet.Integration.Template.DeepThought": { + "System.Int32 Coverlet.Integration.Template.DeepThought::AnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()": { + "Lines": { + "6": 1, + "7": 1, + "8": 1 + }, + "Branches": [] + } + } + }, + "C:\\GitHub\\coverlet\\artifacts\\bin\\coverlet.integration.tests\\debug_net7.0\\01021711\\TemplateTest.cs": { + "Coverlet.Integration.Template.TemplateTest": { + "System.Void Coverlet.Integration.Template.TemplateTest::Answer()": { + "Lines": { + "9": 0, + "10": 0, + "11": 0, + "12": 0 + }, + "Branches": [] + } + } + } + } +} diff --git a/test/coverlet.core.tests/TestAssets/multiple.frameworks.runtimeconfig.json b/test/coverlet.core.tests/TestAssets/multiple.frameworks.runtimeconfig.json new file mode 100644 index 000000000..c4c7ccb25 --- /dev/null +++ b/test/coverlet.core.tests/TestAssets/multiple.frameworks.runtimeconfig.json @@ -0,0 +1,19 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "8.0.0" + } + ], + "configProperties": { + "System.GC.Server": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} diff --git a/test/coverlet.core.tests/TestAssets/single.framework.runtimeconfig.json b/test/coverlet.core.tests/TestAssets/single.framework.runtimeconfig.json new file mode 100644 index 000000000..eef06f1e3 --- /dev/null +++ b/test/coverlet.core.tests/TestAssets/single.framework.runtimeconfig.json @@ -0,0 +1,9 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + } + } +} diff --git a/test/coverlet.core.tests/coverlet.core.tests.csproj b/test/coverlet.core.tests/coverlet.core.tests.csproj index f040aa9c3..314575a09 100644 --- a/test/coverlet.core.tests/coverlet.core.tests.csproj +++ b/test/coverlet.core.tests/coverlet.core.tests.csproj @@ -1,46 +1,50 @@ - + - net6.0 + net8.0 false $(NoWarn);CS8002 - NU1702 + NU1702;NU1504;NU1008;NU1604 true + + + - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + - + + + + - - - + - - - - - - - - - PreserveNewest @@ -51,6 +55,15 @@ Always + + Always + + + Always + + + Always + PreserveNewest @@ -60,8 +73,8 @@ - - + + diff --git a/test/coverlet.integration.determisticbuild/coverlet.integration.determisticbuild.csproj b/test/coverlet.integration.determisticbuild/coverlet.integration.determisticbuild.csproj index b79d89433..af3dd09ac 100644 --- a/test/coverlet.integration.determisticbuild/coverlet.integration.determisticbuild.csproj +++ b/test/coverlet.integration.determisticbuild/coverlet.integration.determisticbuild.csproj @@ -6,14 +6,17 @@ net6.0 false coverletsample.integration.determisticbuild + NU1604 + false https://api.nuget.org/v3/index.json; - $(RepoRoot)bin\$(Configuration)\Packages + $(RepoRoot)artifacts/package/$(Configuration.ToLowerInvariant()) - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -21,8 +24,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + + \ No newline at end of file diff --git a/test/coverlet.integration.template/coverlet.integration.template.csproj b/test/coverlet.integration.template/coverlet.integration.template.csproj index d1639d96f..d61e70aeb 100644 --- a/test/coverlet.integration.template/coverlet.integration.template.csproj +++ b/test/coverlet.integration.template/coverlet.integration.template.csproj @@ -1,17 +1,21 @@  - net6.0 + net8.0 false coverletsamplelib.integration.template false Exe false + false - - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/coverlet.integration.template/nuget.config b/test/coverlet.integration.template/nuget.config index 0cbd4452e..fbcef1011 100644 --- a/test/coverlet.integration.template/nuget.config +++ b/test/coverlet.integration.template/nuget.config @@ -1,4 +1,4 @@ - + diff --git a/test/coverlet.integration.tests/AssertHelper.cs b/test/coverlet.integration.tests/AssertHelper.cs index a8ab085db..e93193051 100644 --- a/test/coverlet.integration.tests/AssertHelper.cs +++ b/test/coverlet.integration.tests/AssertHelper.cs @@ -10,93 +10,93 @@ namespace Coverlet.Integration.Tests { - internal static class AssertHelper + internal static class AssertHelper + { + public static Classes Document(this Modules modules, string docName) { - public static Classes Document(this Modules modules, string docName) - { - if (docName is null) - { - throw new ArgumentNullException(nameof(docName)); - } - - foreach (KeyValuePair module in modules) - { - foreach (KeyValuePair document in module.Value) - { - if (Path.GetFileName(document.Key) == docName) - { - return document.Value; - } - } - } + if (docName is null) + { + throw new ArgumentNullException(nameof(docName)); + } - throw new XunitException($"Document not found '{docName}'"); + foreach (KeyValuePair module in modules) + { + foreach (KeyValuePair document in module.Value) + { + if (Path.GetFileName(document.Key) == docName) + { + return document.Value; + } } + } - public static Methods Class(this Classes classes, string className) - { - if (className is null) - { - throw new ArgumentNullException(nameof(className)); - } + throw new XunitException($"Document not found '{docName}'"); + } - foreach (KeyValuePair @class in classes) - { - if (@class.Key == className) - { - return @class.Value; - } - } + public static Methods Class(this Classes classes, string className) + { + if (className is null) + { + throw new ArgumentNullException(nameof(className)); + } - throw new XunitException($"Document not found '{className}'"); + foreach (KeyValuePair @class in classes) + { + if (@class.Key == className) + { + return @class.Value; } + } - public static Method Method(this Methods methods, string methodName) - { - if (methodName is null) - { - throw new ArgumentNullException(nameof(methodName)); - } + throw new XunitException($"Document not found '{className}'"); + } - foreach (KeyValuePair method in methods) - { - if (method.Key.Contains(methodName)) - { - return method.Value; - } - } + public static Method Method(this Methods methods, string methodName) + { + if (methodName is null) + { + throw new ArgumentNullException(nameof(methodName)); + } - throw new XunitException($"Document not found '{methodName}'"); + foreach (KeyValuePair method in methods) + { + if (method.Key.Contains(methodName)) + { + return method.Value; } + } - public static void AssertLinesCovered(this Method method, params (int line, int hits)[] lines) - { - if (lines is null) - { - throw new ArgumentNullException(nameof(lines)); - } + throw new XunitException($"Document not found '{methodName}'"); + } - var linesToCover = new List(lines.Select(l => l.line)); + public static void AssertLinesCovered(this Method method, params (int line, int hits)[] lines) + { + if (lines is null) + { + throw new ArgumentNullException(nameof(lines)); + } - foreach (KeyValuePair line in method.Lines) - { - foreach ((int lineToCheck, int expectedHits) in lines) - { - if (line.Key == lineToCheck) - { - linesToCover.Remove(line.Key); - if (line.Value != expectedHits) - { - throw new XunitException($"Unexpected hits expected line: {lineToCheck} hits: {expectedHits} actual hits: {line.Value}"); - } - } - } - } + var linesToCover = new List(lines.Select(l => l.line)); - if (linesToCover.Count != 0) + foreach (KeyValuePair line in method.Lines) + { + foreach ((int lineToCheck, int expectedHits) in lines) + { + if (line.Key == lineToCheck) + { + linesToCover.Remove(line.Key); + if (line.Value != expectedHits) { - throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + throw new XunitException($"Unexpected hits expected line: {lineToCheck} hits: {expectedHits} actual hits: {line.Value}"); } + } } + } + + if (linesToCover.Count != 0) + { + throw new XunitException($"Not all requested line found, {linesToCover.Select(l => l.ToString()).Aggregate((a, b) => $"{a}, {b}")}"); + } } + } } diff --git a/test/coverlet.integration.tests/BaseTest.cs b/test/coverlet.integration.tests/BaseTest.cs index 2d44555e0..5f08f91a2 100644 --- a/test/coverlet.integration.tests/BaseTest.cs +++ b/test/coverlet.integration.tests/BaseTest.cs @@ -8,6 +8,7 @@ using System.Threading; using System.Xml.Linq; using Coverlet.Core; +using Coverlet.Tests.Utils; using Newtonsoft.Json; using NuGet.Packaging; using Xunit; @@ -15,209 +16,207 @@ namespace Coverlet.Integration.Tests { - [Flags] - public enum BuildConfiguration + + public abstract class BaseTest + { + private static int s_folderSuffix; + + private protected string GetPackageVersion(string filter) { - Debug = 1, - Release = 2 + string packagesPath = TestUtils.GetPackagePath(TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant()); + + if (!Directory.Exists(packagesPath)) + { + throw new DirectoryNotFoundException($"Package directory '{packagesPath}' not found, run 'dotnet pack' on repository root"); + } + + var files = Directory.GetFiles(packagesPath, filter).ToList(); + if (files.Count == 0) + { + throw new InvalidOperationException($"Could not find any package using filter '{filter}' in folder '{Path.GetFullPath(packagesPath)}'. Make sure 'dotnet pack' was called."); + } + else if (files.Count > 1) + { + throw new InvalidOperationException($"Found more than one package using filter '{filter}' in folder '{Path.GetFullPath(packagesPath)}'. Make sure 'dotnet pack' was only called once."); + } + else + { + using Stream pkg = File.OpenRead(files[0]); + using var reader = new PackageArchiveReader(pkg); + using Stream nuspecStream = reader.GetNuspec(); + var manifest = Manifest.ReadFrom(nuspecStream, false); +#pragma warning disable CS8603 // Possible null reference return. + return manifest.Metadata.Version.OriginalVersion; +#pragma warning restore CS8603 // Possible null reference return. + } } - public abstract class BaseTest + private protected ClonedTemplateProject CloneTemplateProject(bool cleanupOnDispose = true, string testSDKVersion = "17.5.0") { - private static int s_folderSuffix; - - protected BuildConfiguration GetAssemblyBuildConfiguration() - { -#if DEBUG - return BuildConfiguration.Debug; -#endif -#if RELEASE - return BuildConfiguration.Release; -#endif - throw new NotSupportedException($"Build configuration not supported"); - } - - private protected string GetPackageVersion(string filter) - { - string packagesPath = $"../../../../../bin/{GetAssemblyBuildConfiguration()}/Packages"; - - if (!Directory.Exists(packagesPath)) - { - throw new DirectoryNotFoundException("Package directory not found, run 'dotnet pack' on repository root"); - } - - var files = Directory.GetFiles(packagesPath, filter).ToList(); - if (files.Count == 0) - { - throw new InvalidOperationException($"Could not find any package using filter '{filter}' in folder '{Path.GetFullPath(packagesPath)}'. Make sure 'dotnet pack' was called."); - } - else if (files.Count > 1) - { - throw new InvalidOperationException($"Found more than one package using filter '{filter}' in folder '{Path.GetFullPath(packagesPath)}'. Make sure 'dotnet pack' was only called once."); - } - else - { - using Stream pkg = File.OpenRead(files[0]); - using var reader = new PackageArchiveReader(pkg); - using Stream nuspecStream = reader.GetNuspec(); - var manifest = Manifest.ReadFrom(nuspecStream, false); - return manifest.Metadata.Version.OriginalVersion; - } - } - - private protected ClonedTemplateProject CloneTemplateProject(bool cleanupOnDispose = true, string testSDKVersion = "17.5.0") - { - DirectoryInfo finalRoot = Directory.CreateDirectory($"{Guid.NewGuid().ToString("N")[..6]}{Interlocked.Increment(ref s_folderSuffix)}"); - foreach (string file in (Directory.GetFiles($"../../../../coverlet.integration.template", "*.cs") - .Union(Directory.GetFiles($"../../../../coverlet.integration.template", "*.csproj") - .Union(Directory.GetFiles($"../../../../coverlet.integration.template", "nuget.config"))))) - { - File.Copy(file, Path.Combine(finalRoot.FullName, Path.GetFileName(file))); - } - - // We need to prevent the inheritance of global props/targets for template project - File.WriteAllText(Path.Combine(finalRoot.FullName, "Directory.Build.props"), + DirectoryInfo finalRoot = Directory.CreateDirectory($"{Guid.NewGuid().ToString("N")[..6]}{Interlocked.Increment(ref s_folderSuffix)}"); + foreach (string file in (Directory.GetFiles(Path.Join(TestUtils.GetTestProjectPath("coverlet.integration.template")), "*.cs") + .Union(Directory.GetFiles(Path.Join(TestUtils.GetTestProjectPath("coverlet.integration.template")), "*.csproj") + .Union(Directory.GetFiles(Path.Join(TestUtils.GetTestProjectPath("coverlet.integration.template")), "nuget.config"))))) + { + File.Copy(file, Path.Combine(finalRoot.FullName, Path.GetFileName(file))); + } + + // We need to prevent the inheritance of global props/targets for template project + File.WriteAllText(Path.Combine(finalRoot.FullName, "Directory.Build.props"), @" "); - File.WriteAllText(Path.Combine(finalRoot.FullName, "Directory.Build.targets"), + File.WriteAllText(Path.Combine(finalRoot.FullName, "Directory.Build.targets"), @" "); - AddMicrosoftNETTestSdkRef(finalRoot.FullName, testSDKVersion); + AddMicrosoftNETTestSdkRef(finalRoot.FullName, testSDKVersion); - SetIsTestProjectTrue(finalRoot.FullName); + SetIsTestProjectTrue(finalRoot.FullName); - return new ClonedTemplateProject(finalRoot.FullName, cleanupOnDispose); - } + return new ClonedTemplateProject(finalRoot.FullName, cleanupOnDispose); + } - private protected bool RunCommand(string command, string arguments, out string standardOutput, out string standardError, string workingDirectory = "") - { - Debug.WriteLine($"BaseTest.RunCommand: {command} {arguments}\nWorkingDirectory: {workingDirectory}"); - var psi = new ProcessStartInfo(command, arguments); - psi.WorkingDirectory = workingDirectory; - psi.RedirectStandardError = true; - psi.RedirectStandardOutput = true; - Process commandProcess = Process.Start(psi)!; - if (!commandProcess.WaitForExit((int)TimeSpan.FromMinutes(5).TotalMilliseconds)) - { - throw new XunitException($"Command 'dotnet {arguments}' didn't end after 5 minute"); - } - standardOutput = commandProcess.StandardOutput.ReadToEnd(); - standardError = commandProcess.StandardError.ReadToEnd(); - return commandProcess.ExitCode == 0; - } + private protected bool RunCommand(string command, string arguments, out string standardOutput, out string standardError, string workingDirectory = "") + { + Debug.WriteLine($"BaseTest.RunCommand: {command} {arguments}\nWorkingDirectory: {workingDirectory}"); + // https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.standardoutput?view=net-7.0&redirectedfrom=MSDN#System_Diagnostics_Process_StandardOutput + var commandProcess = new Process(); + commandProcess.StartInfo.FileName = command; + commandProcess.StartInfo.Arguments = arguments; + commandProcess.StartInfo.WorkingDirectory = workingDirectory; + commandProcess.StartInfo.RedirectStandardError = true; + commandProcess.StartInfo.RedirectStandardOutput = true; + commandProcess.StartInfo.UseShellExecute = false; + string eOut = ""; + commandProcess.ErrorDataReceived += new DataReceivedEventHandler((sender, e) => { eOut += e.Data; }); + commandProcess.Start(); + // To avoid deadlocks, use an asynchronous read operation on at least one of the streams. + commandProcess.BeginErrorReadLine(); + standardOutput = commandProcess.StandardOutput.ReadToEnd(); + if (!commandProcess.WaitForExit((int)TimeSpan.FromMinutes(5).TotalMilliseconds)) + { + throw new XunitException($"Command 'dotnet {arguments}' didn't end after 5 minute"); + } + standardError = eOut; + return commandProcess.ExitCode == 0; + } - private protected bool DotnetCli(string arguments, out string standardOutput, out string standardError, string workingDirectory = "") - { - return RunCommand("dotnet", arguments, out standardOutput, out standardError, workingDirectory); - } + private protected bool DotnetCli(string arguments, out string standardOutput, out string standardError, string workingDirectory = "") + { + return RunCommand("dotnet", arguments, out standardOutput, out standardError, workingDirectory); + } - private protected void UpdateNugeConfigtWithLocalPackageFolder(string projectPath) - { - string nugetFile = Path.Combine(projectPath, "nuget.config"); - if (!File.Exists(nugetFile)) - { - throw new FileNotFoundException("Nuget.config not found", "nuget.config"); - } - XDocument xml; - using (FileStream? nugetFileStream = File.OpenRead(nugetFile)) - { - xml = XDocument.Load(nugetFileStream); - } - - string localPackageFolder = Path.GetFullPath($"../../../../../bin/{GetAssemblyBuildConfiguration()}/Packages"); - xml.Element("configuration")! - .Element("packageSources")! - .Elements() - .ElementAt(0) - .AddAfterSelf(new XElement("add", new XAttribute("key", "localCoverletPackages"), new XAttribute("value", localPackageFolder))); - xml.Save(nugetFile); - } + private protected void UpdateNugetConfigWithLocalPackageFolder(string projectPath) + { + string nugetFile = Path.Combine(projectPath, "nuget.config"); + if (!File.Exists(nugetFile)) + { + throw new FileNotFoundException("Nuget.config not found", "nuget.config"); + } + XDocument xml; + using (FileStream? nugetFileStream = File.OpenRead(nugetFile)) + { + xml = XDocument.Load(nugetFileStream); + } + + string localPackageFolder = TestUtils.GetPackagePath(TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant()); + + xml.Element("configuration")! + .Element("packageSources")! + .Elements() + .ElementAt(0) + .AddAfterSelf(new XElement("add", new XAttribute("key", "localCoverletPackages"), new XAttribute("value", localPackageFolder))); + xml.Save(nugetFile); + } - private void SetIsTestProjectTrue(string projectPath) - { - string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); - if (!File.Exists(csproj)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - XDocument xml; - using (FileStream? csprojStream = File.OpenRead(csproj)) - { - xml = XDocument.Load(csprojStream); - } - - xml.Element("Project")! - .Element("PropertyGroup")! - .Element("IsTestProject")!.Value = "true"; - - xml.Save(csproj); - } + private void SetIsTestProjectTrue(string projectPath) + { + string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); + if (!File.Exists(csproj)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + XDocument xml; + using (FileStream? csprojStream = File.OpenRead(csproj)) + { + xml = XDocument.Load(csprojStream); + } + + xml.Element("Project")! + .Element("PropertyGroup")! + .Element("IsTestProject")!.Value = "true"; + + xml.Save(csproj); + } - private protected void AddMicrosoftNETTestSdkRef(string projectPath, string version) - { - string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); - if (!File.Exists(csproj)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - XDocument xml; - using (FileStream? csprojStream = File.OpenRead(csproj)) - { - xml = XDocument.Load(csprojStream); - } - - xml.Element("Project")! - .Element("ItemGroup")! - .Add(new XElement("PackageReference", new XAttribute("Include", "Microsoft.NET.Test.Sdk"), - new XAttribute("Version", version))); - xml.Save(csproj); - } + private protected void AddMicrosoftNETTestSdkRef(string projectPath, string version) + { + string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); + if (!File.Exists(csproj)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + XDocument xml; + using (FileStream? csprojStream = File.OpenRead(csproj)) + { + xml = XDocument.Load(csprojStream); + } + + xml.Element("Project")! + .Element("ItemGroup")! + .Add(new XElement("PackageReference", new XAttribute("Include", "Microsoft.NET.Test.Sdk"), + new XAttribute("Version", version))); + xml.Save(csproj); + } - private protected void AddCoverletMsbuildRef(string projectPath) - { - string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); - if (!File.Exists(csproj)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - XDocument xml; - using (FileStream? csprojStream = File.OpenRead(csproj)) - { - xml = XDocument.Load(csprojStream); - } - string msbuildPkgVersion = GetPackageVersion("*msbuild*.nupkg"); - xml.Element("Project")! - .Element("ItemGroup")! - .Add(new XElement("PackageReference", new XAttribute("Include", "coverlet.msbuild"), new XAttribute("Version", msbuildPkgVersion))); - xml.Save(csproj); - } + private protected void AddCoverletMsbuildRef(string projectPath) + { + string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); + if (!File.Exists(csproj)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + XDocument xml; + using (FileStream? csprojStream = File.OpenRead(csproj)) + { + xml = XDocument.Load(csprojStream); + } + string msbuildPkgVersion = GetPackageVersion("*msbuild*.nupkg"); + xml.Element("Project")! + .Element("ItemGroup")! + .Add(new XElement("PackageReference", new XAttribute("Include", "coverlet.msbuild"), new XAttribute("Version", msbuildPkgVersion), + new XElement("PrivateAssets", "all"), + new XElement("IncludeAssets", "runtime; build; native; contentfiles; analyzers"))); + xml.Save(csproj); + } - private protected void AddCoverletCollectosRef(string projectPath) - { - string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); - if (!File.Exists(csproj)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - XDocument xml; - using (FileStream? csprojStream = File.OpenRead(csproj)) - { - xml = XDocument.Load(csprojStream); - } - string msbuildPkgVersion = GetPackageVersion("*collector*.nupkg"); - xml.Element("Project")! - .Element("ItemGroup")! - .Add(new XElement("PackageReference", new XAttribute("Include", "coverlet.collector"), new XAttribute("Version", msbuildPkgVersion))); - xml.Save(csproj); - } + private protected void AddCoverletCollectosRef(string projectPath) + { + string csproj = Path.Combine(projectPath, "coverlet.integration.template.csproj"); + if (!File.Exists(csproj)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + XDocument xml; + using (FileStream? csprojStream = File.OpenRead(csproj)) + { + xml = XDocument.Load(csprojStream); + } + string msbuildPkgVersion = GetPackageVersion("*collector*.nupkg"); + xml.Element("Project")! + .Element("ItemGroup")! + .Add(new XElement("PackageReference", new XAttribute("Include", "coverlet.collector"), new XAttribute("Version", msbuildPkgVersion), + new XElement("PrivateAssets", "all"), + new XElement("IncludeAssets", "runtime; build; native; contentfiles; analyzers"))); + xml.Save(csproj); + } - private protected string AddCollectorRunsettingsFile(string projectPath, string includeFilter = "[coverletsamplelib.integration.template]*DeepThought", bool sourceLink = false, bool deterministicReport = false) - { - string runSettings = + private protected string AddCollectorRunsettingsFile(string projectPath, string includeFilter = "[coverletsamplelib.integration.template]*DeepThought", bool sourceLink = false, bool deterministicReport = false) + { + string runSettings = $@" @@ -236,150 +235,161 @@ private protected string AddCollectorRunsettingsFile(string projectPath, string "; - string runsettingsPath = Path.Combine(projectPath, "runSettings"); - File.WriteAllText(runsettingsPath, runSettings); - return runsettingsPath; - } + string runsettingsPath = Path.Combine(projectPath, "runSettings"); + File.WriteAllText(runsettingsPath, runSettings); + return runsettingsPath; + } - private protected void AssertCoverage(ClonedTemplateProject clonedTemplateProject, string filter = "coverage.json", string standardOutput = "") + private protected void AssertCoverage(ClonedTemplateProject clonedTemplateProject, string filter = "coverage.json", string standardOutput = "") + { + if (TestUtils.GetAssemblyBuildConfiguration() == BuildConfiguration.Debug) + { + bool coverageChecked = false; + foreach (string coverageFile in clonedTemplateProject.GetFiles(filter)) { - if (GetAssemblyBuildConfiguration() == BuildConfiguration.Debug) - { - bool coverageChecked = false; - foreach (string coverageFile in clonedTemplateProject.GetFiles(filter)) - { - Classes? document = JsonConvert.DeserializeObject(File.ReadAllText(coverageFile))?.Document("DeepThought.cs"); - if (document != null) - { - document.Class("Coverlet.Integration.Template.DeepThought") - .Method("System.Int32 Coverlet.Integration.Template.DeepThought::AnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()") - .AssertLinesCovered((6, 1), (7, 1), (8, 1)); - coverageChecked = true; - } - } - - Assert.True(coverageChecked, $"Coverage check fail\n{standardOutput}"); - } + Classes? document = JsonConvert.DeserializeObject(File.ReadAllText(coverageFile))?.Document("DeepThought.cs"); + if (document != null) + { + document.Class("Coverlet.Integration.Template.DeepThought") + .Method("System.Int32 Coverlet.Integration.Template.DeepThought::AnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()") + .AssertLinesCovered((6, 1), (7, 1), (8, 1)); + coverageChecked = true; + } } - private protected void UpdateProjectTargetFramework(ClonedTemplateProject project, params string[] targetFrameworks) - { - if (targetFrameworks is null || targetFrameworks.Length == 0) - { - throw new ArgumentException("Invalid targetFrameworks", nameof(targetFrameworks)); - } - - if (!File.Exists(project.ProjectFileNamePath)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - XDocument xml; - using (FileStream? csprojStream = File.OpenRead(project.ProjectFileNamePath)) - { - xml = XDocument.Load(csprojStream); - } - - xml.Element("Project")! - .Element("PropertyGroup")! - .Element("TargetFramework")! - .Remove(); - - XElement targetFrameworkElement; - - if (targetFrameworks.Length == 1) - { - targetFrameworkElement = new XElement("TargetFramework", targetFrameworks[0]); - } - else - { - targetFrameworkElement = new XElement("TargetFrameworks", string.Join(';', targetFrameworks)); - } - - xml.Element("Project")!.Element("PropertyGroup")!.Add(targetFrameworkElement); - xml.Save(project.ProjectFileNamePath); - } + Assert.True(coverageChecked, $"Coverage check failed"); + } + } - private protected void PinSDK(ClonedTemplateProject project, string sdkVersion) - { - if (project is null) - { - throw new ArgumentNullException(nameof(project)); - } - - if (string.IsNullOrEmpty(sdkVersion)) - { - throw new ArgumentException("Invalid sdkVersion", nameof(sdkVersion)); - } - - if (!File.Exists(project.ProjectFileNamePath)) - { - throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); - } - - if (project.ProjectRootPath is null || !Directory.Exists(project.ProjectRootPath)) - { - throw new ArgumentException("Invalid ProjectRootPath"); - } - - File.WriteAllText(Path.Combine(project.ProjectRootPath, "global.json"), $"{{ \"sdk\": {{ \"version\": \"{sdkVersion}\" }} }}"); - } + private protected void UpdateProjectTargetFramework(ClonedTemplateProject project, params string[] targetFrameworks) + { + if (targetFrameworks is null || targetFrameworks.Length == 0) + { + throw new ArgumentException("Invalid targetFrameworks", nameof(targetFrameworks)); + } + + if (!File.Exists(project.ProjectFileNamePath)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + XDocument xml; + using (FileStream? csprojStream = File.OpenRead(project.ProjectFileNamePath)) + { + xml = XDocument.Load(csprojStream); + } + + if (xml.Descendants().FirstOrDefault(e => e.Name.LocalName == "TargetFramework") != null) + { + xml.Element("Project")! + .Element("PropertyGroup")! + .Element("TargetFramework")! + .Remove(); + } + + if (xml.Descendants().FirstOrDefault(e => e.Name.LocalName == "TargetFrameworks") != null) + { + xml.Element("Project")! + .Element("PropertyGroup")! + .Element("TargetFrameworks")! + .Remove(); + } + + XElement targetFrameworkElement; + + if (targetFrameworks.Length == 1) + { + targetFrameworkElement = new XElement("TargetFramework", targetFrameworks[0]); + } + else + { + targetFrameworkElement = new XElement("TargetFrameworks", string.Join(';', targetFrameworks)); + } + + xml.Element("Project")!.Element("PropertyGroup")!.Add(targetFrameworkElement); + xml.Save(project.ProjectFileNamePath); } - class ClonedTemplateProject : IDisposable + private protected void PinSDK(ClonedTemplateProject project, string sdkVersion) { - public string ProjectRootPath { get; private set; } - public bool CleanupOnDispose { get; private set; } + if (project is null) + { + throw new ArgumentNullException(nameof(project)); + } + + if (string.IsNullOrEmpty(sdkVersion)) + { + throw new ArgumentException("Invalid sdkVersion", nameof(sdkVersion)); + } + + if (!File.Exists(project.ProjectFileNamePath)) + { + throw new FileNotFoundException("coverlet.integration.template.csproj not found", "coverlet.integration.template.csproj"); + } + + if (project.ProjectRootPath is null || !Directory.Exists(project.ProjectRootPath)) + { + throw new ArgumentException("Invalid ProjectRootPath"); + } + + File.WriteAllText(Path.Combine(project.ProjectRootPath, "global.json"), $"{{ \"sdk\": {{ \"version\": \"{sdkVersion}\" }} }}"); + } + } - // We need to have a different asm name to avoid issue with collectors, we filter [coverlet.*]* by default - // https://github.com/tonerdo/coverlet/pull/410#discussion_r284526728 - public static string AssemblyName { get; } = "coverletsamplelib.integration.template"; - public static string ProjectFileName { get; } = "coverlet.integration.template.csproj"; - public string ProjectFileNamePath => Path.Combine(ProjectRootPath, "coverlet.integration.template.csproj"); + class ClonedTemplateProject : IDisposable + { + public string ProjectRootPath { get; private set; } + public bool CleanupOnDispose { get; private set; } - public ClonedTemplateProject(string? projectRootPath, bool cleanupOnDispose) - { - ProjectRootPath = (projectRootPath ?? throw new ArgumentNullException(nameof(projectRootPath))); - CleanupOnDispose = cleanupOnDispose; - } + // We need to have a different asm name to avoid issue with collectors, we filter [coverlet.*]* by default + // https://github.com/tonerdo/coverlet/pull/410#discussion_r284526728 + public static string AssemblyName { get; } = "coverletsamplelib.integration.template"; + public static string ProjectFileName { get; } = "coverlet.integration.template.csproj"; + public string ProjectFileNamePath => Path.Combine(ProjectRootPath, "coverlet.integration.template.csproj"); - public bool IsMultipleTargetFramework() - { - using FileStream? csprojStream = File.OpenRead(ProjectFileNamePath); - var xml = XDocument.Load(csprojStream); - return xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFramework") == null; - } + public ClonedTemplateProject(string? projectRootPath, bool cleanupOnDispose) + { + ProjectRootPath = (projectRootPath ?? throw new ArgumentNullException(nameof(projectRootPath))); + CleanupOnDispose = cleanupOnDispose; + } - public string[] GetTargetFrameworks() - { - using FileStream? csprojStream = File.OpenRead(ProjectFileNamePath); - var xml = XDocument.Load(csprojStream); - XElement element = xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFramework") ?? xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFrameworks")!; - if (element is null) - { - throw new ArgumentNullException("No 'TargetFramework' neither 'TargetFrameworks' found in csproj file"); - } - return element.Value.Split(";"); - } + public bool IsMultipleTargetFramework() + { + using FileStream? csprojStream = File.OpenRead(ProjectFileNamePath); + var xml = XDocument.Load(csprojStream); + return xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFramework") == null; + } - public string[] GetFiles(string filter) + public string[] GetTargetFrameworks() + { + using FileStream? csprojStream = File.OpenRead(ProjectFileNamePath); + var xml = XDocument.Load(csprojStream); + XElement element = xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFramework") ?? xml.Element("Project")!.Element("PropertyGroup")!.Element("TargetFrameworks")!; + if (element is null) + { + throw new ArgumentNullException("No 'TargetFramework' neither 'TargetFrameworks' found in csproj file"); + } + return element.Value.Split(";"); + } + + public string[] GetFiles(string filter) + { + return Directory.GetFiles(ProjectRootPath, filter, SearchOption.AllDirectories); + } + + public void Dispose() + { + if (CleanupOnDispose) + { + try { - return Directory.GetFiles(ProjectRootPath, filter, SearchOption.AllDirectories); + // Directory.Delete(ProjectRootPath, true); } - - public void Dispose() + catch (UnauthorizedAccessException) { - if (CleanupOnDispose) - { - try - { - // Directory.Delete(ProjectRootPath, true); - } - catch (UnauthorizedAccessException) - { - // Sometimes on CI AzDo we get Access Denied on delete - // swallowed exception to not waste time - } - } + // Sometimes on CI AzDo we get Access Denied on delete + // swallowed exception to not waste time } + } } + } } diff --git a/test/coverlet.integration.tests/Collectors.cs b/test/coverlet.integration.tests/Collectors.cs index 262f29d58..4537523b7 100644 --- a/test/coverlet.integration.tests/Collectors.cs +++ b/test/coverlet.integration.tests/Collectors.cs @@ -4,124 +4,128 @@ using System; using System.IO; using System.Linq; +using Coverlet.Tests.Utils; using Xunit; namespace Coverlet.Integration.Tests { - public class TestSDK_16_2_0 : Collectors + public class TestSDK_17_8_0 : Collectors + { + public TestSDK_17_8_0() { - public TestSDK_16_2_0() - { - TestSDKVersion = "16.2.0"; - } - - private protected override void AssertCollectorsInjection(ClonedTemplateProject clonedTemplateProject) - { - // Check out/in process collectors injection - Assert.Contains("[coverlet]", File.ReadAllText(clonedTemplateProject.GetFiles("log.datacollector.*.txt").Single())); - - // There is a bug in this SDK version https://github.com/microsoft/vstest/pull/2221 - // in-proc coverlet.collector.dll collector with version != 1.0.0.0 won't be loaded - // Assert.Contains("[coverlet]", File.ReadAllText(clonedTemplateProject.GetFiles("log.host.*.txt").Single())); - } + TestSDKVersion = "17.8.0"; } - public class TestSDK_16_5_0 : Collectors + private protected override void AssertCollectorsInjection(ClonedTemplateProject clonedTemplateProject) { - public TestSDK_16_5_0() - { - TestSDKVersion = "16.5.0"; - } + // Check out/in process collectors injection + Assert.Contains("[coverlet]", File.ReadAllText(clonedTemplateProject.GetFiles("log.datacollector.*.txt").Single())); + + // There is a bug in this SDK version https://github.com/microsoft/vstest/pull/2221 + // in-proc coverlet.collector.dll collector with version != 1.0.0.0 won't be loaded + // Assert.Contains("[coverlet]", File.ReadAllText(clonedTemplateProject.GetFiles("log.host.*.txt").Single())); + } + } + + public class TestSDK_17_6_0 : Collectors + { + public TestSDK_17_6_0() + { + TestSDKVersion = "17.6.0"; + } + } + + public class TestSDK_Preview : Collectors + { + public TestSDK_Preview() + { + TestSDKVersion = "17.9.0-preview-23531-01"; + } + } + + public abstract class Collectors : BaseTest + { + private readonly string _buildConfiguration; + private readonly string _buildTargetFramework; + + public Collectors() + { + _buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString(); + _buildTargetFramework = TestUtils.GetAssemblyTargetFramework(); + + } + + protected string? TestSDKVersion { get; set; } + + private ClonedTemplateProject PrepareTemplateProject() + { + if (TestSDKVersion is null) + { + throw new ArgumentNullException("Invalid TestSDKVersion"); + } + + ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(testSDKVersion: TestSDKVersion); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + AddCoverletCollectosRef(clonedTemplateProject.ProjectRootPath!); + return clonedTemplateProject; + } + + private protected virtual void AssertCollectorsInjection(ClonedTemplateProject clonedTemplateProject) + { + // Check out/in process collectors injection + Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", File.ReadAllText(clonedTemplateProject.GetFiles("log.datacollector.*.txt").Single())); + Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(clonedTemplateProject.GetFiles("log.host.*.txt").Single())); + } + + [Fact] + public void TestVsTest_Test() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); + // We don't have any result to check because tests and code to instrument are in same assembly so we need to pass + // IncludeTestAssembly=true we do it in other test + Assert.Contains("Passed!", standardOutput); + AssertCollectorsInjection(clonedTemplateProject); + } + + [Fact] + public void TestVsTest_Test_Settings() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); + Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError), standardOutput); + Assert.Contains("Passed!", standardOutput); + AssertCoverage(clonedTemplateProject); + AssertCollectorsInjection(clonedTemplateProject); } - public class TestSDK_Preview : Collectors + [Fact] + public void TestVsTest_VsTest() { - public TestSDK_Preview() - { - TestSDKVersion = "16.5.0-preview-20200203-01"; - } + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); + Assert.True(DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError), standardOutput); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish")); + Assert.NotNull(publishedTestFile); + Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput); + // We don't have any result to check because tests and code to instrument are in same assembly so we need to pass + // IncludeTestAssembly=true we do it in other test + Assert.Contains("Passed!", standardOutput); + AssertCollectorsInjection(clonedTemplateProject); } - public abstract class Collectors : BaseTest + [Fact] + public void TestVsTest_VsTest_Settings() { - private readonly string _buildConfiguration; - - public Collectors() - { - _buildConfiguration = GetAssemblyBuildConfiguration().ToString(); - } - - protected string? TestSDKVersion { get; set; } - - private ClonedTemplateProject PrepareTemplateProject() - { - if (TestSDKVersion is null) - { - throw new ArgumentNullException("Invalid TestSDKVersion"); - } - - ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(testSDKVersion: TestSDKVersion); - UpdateNugeConfigtWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); - AddCoverletCollectosRef(clonedTemplateProject.ProjectRootPath!); - return clonedTemplateProject; - } - - private protected virtual void AssertCollectorsInjection(ClonedTemplateProject clonedTemplateProject) - { - // Check out/in process collectors injection - Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", File.ReadAllText(clonedTemplateProject.GetFiles("log.datacollector.*.txt").Single())); - Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(clonedTemplateProject.GetFiles("log.host.*.txt").Single())); - } - - [Fact] - public void TestVsTest_Test() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - // We don't have any result to check because tests and code to instrument are in same assembly so we need to pass - // IncludeTestAssembly=true we do it in other test - Assert.Contains("Passed!", standardOutput); - AssertCollectorsInjection(clonedTemplateProject); - } - - [Fact] - public void TestVsTest_Test_Settings() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - AssertCoverage(clonedTemplateProject); - AssertCollectorsInjection(clonedTemplateProject); - } - - [Fact] - public void TestVsTest_VsTest() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); - Assert.True(DotnetCli($"publish -c {_buildConfiguration} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError), standardOutput); - string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish")); - Assert.NotNull(publishedTestFile); - Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput); - // We don't have any result to check because tests and code to instrument are in same assembly so we need to pass - // IncludeTestAssembly=true we do it in other test - Assert.Contains("Passed!", standardOutput); - AssertCollectorsInjection(clonedTemplateProject); - } - - [Fact] - public void TestVsTest_VsTest_Settings() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); - Assert.True(DotnetCli($"publish -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\"", out string standardOutput, out string standardError), standardOutput); - string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish")); - Assert.NotNull(publishedTestFile); - Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --ResultsDirectory:\"{clonedTemplateProject.ProjectRootPath}\" /settings:\"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - AssertCoverage(clonedTemplateProject); - AssertCollectorsInjection(clonedTemplateProject); - } + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!); + Assert.True(DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\"", out string standardOutput, out string standardError), standardOutput); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish")); + Assert.NotNull(publishedTestFile); + Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --ResultsDirectory:\"{clonedTemplateProject.ProjectRootPath}\" /settings:\"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput); + Assert.Contains("Passed!", standardOutput); + AssertCoverage(clonedTemplateProject); + AssertCollectorsInjection(clonedTemplateProject); } + } } diff --git a/test/coverlet.integration.tests/DeterministicBuild.cs b/test/coverlet.integration.tests/DeterministicBuild.cs index 2607b5e8e..cdef93c62 100644 --- a/test/coverlet.integration.tests/DeterministicBuild.cs +++ b/test/coverlet.integration.tests/DeterministicBuild.cs @@ -4,180 +4,382 @@ using System; using System.IO; using System.Linq; +using System.Reflection; using System.Xml.Linq; using Coverlet.Core; +using Coverlet.Tests.Utils; using Newtonsoft.Json; using Xunit; +using Xunit.Abstractions; namespace Coverlet.Integration.Tests { - public class DeterministicBuild : BaseTest, IDisposable + public class DeterministicBuild : BaseTest, IDisposable + { + private static readonly string s_projectName = "coverlet.integration.determisticbuild"; + //private readonly string _buildTargetFramework; + private string? _testProjectTfm; + private readonly string _testProjectPath = TestUtils.GetTestProjectPath(s_projectName); + private readonly string _testBinaryPath = TestUtils.GetTestBinaryPath(s_projectName); + private readonly string _testResultsPath = TestUtils.GetTestResultsPath(s_projectName); + private const string PropsFileName = "DeterministicTest.props"; + private readonly string _buildConfiguration; + private readonly ITestOutputHelper _output; + private readonly Type _type; + private readonly FieldInfo? _testMember; + + public DeterministicBuild(ITestOutputHelper output) { - private readonly string _testProjectPath = Path.GetFullPath("../../../../coverlet.integration.determisticbuild"); - private string? _testProjectTfm; - private const string PropsFileName = "DeterministicTest.props"; - private readonly string _buildConfiguration; + _buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString(); + //_buildTargetFramework = TestUtils.GetAssemblyTargetFramework(); + _output = output; + _type = output.GetType(); + _testMember = _type.GetField("test", BindingFlags.Instance | BindingFlags.NonPublic); + } - public DeterministicBuild() - { - _buildConfiguration = GetAssemblyBuildConfiguration().ToString(); - } + private void CreateDeterministicTestPropsFile() + { + var deterministicTestProps = new XDocument(); + deterministicTestProps.Add( + new XElement("Project", + new XElement("PropertyGroup", + new XElement("coverletMsbuildVersion", GetPackageVersion("*msbuild*.nupkg")), + new XElement("coverletCollectorsVersion", GetPackageVersion("*collector*.nupkg"))))); + _testProjectTfm = XElement.Load(Path.Combine(_testProjectPath, "coverlet.integration.determisticbuild.csproj"))!. + Descendants("PropertyGroup")!.Single().Element("TargetFramework")!.Value; + + deterministicTestProps.Save(Path.Combine(_testProjectPath, PropsFileName)); + } - private void CreateDeterministicTestPropsFile() + private protected void AssertCoverage(string standardOutput = "", bool checkDeterministicReport = true) + { + if (_buildConfiguration == "Debug") + { + bool coverageChecked = false; + string reportFilePath = ""; + foreach (string coverageFile in Directory.GetFiles(GetReportPath(standardOutput), "coverage.json", SearchOption.AllDirectories)) { - var deterministicTestProps = new XDocument(); - deterministicTestProps.Add( - new XElement("Project", - new XElement("PropertyGroup", - new XElement("coverletMsbuilVersion", GetPackageVersion("*msbuild*.nupkg")), - new XElement("coverletCollectorsVersion", GetPackageVersion("*collector*.nupkg"))))); - _testProjectTfm = XElement.Load(Path.Combine(_testProjectPath, "coverlet.integration.determisticbuild.csproj"))!. - Descendants("PropertyGroup")!.Single().Element("TargetFramework")!.Value; - - deterministicTestProps.Save(Path.Combine(_testProjectPath, PropsFileName)); + Classes? document = JsonConvert.DeserializeObject(File.ReadAllText(coverageFile))?.Document("DeepThought.cs"); + if (document != null) + { + document.Class("Coverlet.Integration.DeterministicBuild.DeepThought") + .Method("System.Int32 Coverlet.Integration.DeterministicBuild.DeepThought::AnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()") + .AssertLinesCovered((6, 1), (7, 1), (8, 1)); + coverageChecked = true; + reportFilePath = coverageFile; + } } + Assert.True(coverageChecked, $"Coverage check fail\n{standardOutput}"); + File.Delete(reportFilePath); + Assert.False(File.Exists(reportFilePath)); - private protected void AssertCoverage(string standardOutput = "", bool checkDeterministicReport = true) + if (checkDeterministicReport) { - if (_buildConfiguration == "Debug") - { - bool coverageChecked = false; - string reportFilePath = ""; - foreach (string coverageFile in Directory.GetFiles(_testProjectPath, "coverage.json", SearchOption.AllDirectories)) - { - Classes? document = JsonConvert.DeserializeObject(File.ReadAllText(coverageFile))?.Document("DeepThought.cs"); - if (document != null) - { - document.Class("Coverlet.Integration.DeterministicBuild.DeepThought") - .Method("System.Int32 Coverlet.Integration.DeterministicBuild.DeepThought::AnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()") - .AssertLinesCovered((6, 1), (7, 1), (8, 1)); - coverageChecked = true; - reportFilePath = coverageFile; - } - } - Assert.True(coverageChecked, $"Coverage check fail\n{standardOutput}"); - File.Delete(reportFilePath); - Assert.False(File.Exists(reportFilePath)); - - if (checkDeterministicReport) - { - // Verify deterministic report - foreach (string coverageFile in Directory.GetFiles(_testProjectPath, "coverage.cobertura.xml", SearchOption.AllDirectories)) - { - Assert.Contains("/_/test/coverlet.integration.determisticbuild/DeepThought.cs", File.ReadAllText(coverageFile)); - File.Delete(coverageFile); - } - } - } + // Verify deterministic report + foreach (string coverageFile in Directory.GetFiles(GetReportPath(standardOutput), "coverage.cobertura.xml", SearchOption.AllDirectories)) + { + Assert.Contains("/_/test/coverlet.integration.determisticbuild/DeepThought.cs", File.ReadAllText(coverageFile)); + File.Delete(coverageFile); + } } + } + } + + [Fact] + public void Msbuild() + { + string testResultPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName); + string logFilename = string.Concat(((ITest)_testMember!.GetValue(_output)!).DisplayName, ".binlog"); + CreateDeterministicTestPropsFile(); + + DotnetCli($"build -c {_buildConfiguration} -bl:build.{logFilename} /p:DeterministicSourcePaths=true", out string standardOutput, out string standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Build succeeded.", standardOutput); + string sourceRootMappingFilePath = Path.Combine(_testBinaryPath, _buildConfiguration.ToLowerInvariant(), "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); + Assert.True(File.Exists(sourceRootMappingFilePath), $"File not found: {sourceRootMappingFilePath}"); + Assert.True(!string.IsNullOrEmpty(File.ReadAllText(sourceRootMappingFilePath)), "Empty CoverletSourceRootsMapping file"); + Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); + + string testResultFile = Path.Join(testResultPath, "coverage.json"); + string cmdArgument = $"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:CoverletOutput=\"{testResultFile}\" /p:DeterministicReport=true /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true"; + _output.WriteLine($"Command: dotnet {cmdArgument}"); + bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput); + Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput); + Assert.True(File.Exists(testResultFile)); + AssertCoverage(standardOutput); + + CleanupBuildOutput(); + } + + [Fact] + public void Msbuild_SourceLink() + { + string testResultPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName); + string logFilename = string.Concat(((ITest)_testMember!.GetValue(_output)!).DisplayName, ".binlog"); + CreateDeterministicTestPropsFile(); + + DotnetCli($"build -c {_buildConfiguration} -bl:build.{logFilename} --verbosity normal /p:DeterministicSourcePaths=true", out string standardOutput, out string standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Build succeeded.", standardOutput); + string sourceRootMappingFilePath = Path.Combine(_testBinaryPath, _buildConfiguration.ToLowerInvariant(), "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); + + Assert.True(File.Exists(sourceRootMappingFilePath), $"File not found: {sourceRootMappingFilePath}"); + Assert.True(!string.IsNullOrEmpty(File.ReadAllText(sourceRootMappingFilePath)), "Empty CoverletSourceRootsMapping file"); + Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); + + string testResultFile = Path.Join(testResultPath, "coverage.json"); + string cmdArgument = $"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:CoverletOutput=\"{testResultFile}\" /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:UseSourceLink=true /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true"; + _output.WriteLine($"Command: dotnet {cmdArgument}"); + bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput); + Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput); + Assert.True(File.Exists(testResultFile)); + Assert.Contains("raw.githubusercontent.com", File.ReadAllText(testResultFile)); + AssertCoverage(standardOutput, checkDeterministicReport: false); + + CleanupBuildOutput(); + } + + [Fact] + public void Collectors() + { + string testResultPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName); + string testLogFilesPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName, "log"); + string logFilename = string.Concat(((ITest)_testMember!.GetValue(_output)!).DisplayName, ".binlog"); + + CreateDeterministicTestPropsFile(); + DeleteLogFiles(testLogFilesPath); + DeleteCoverageFiles(testResultPath); + + DotnetCli($"build -c {_buildConfiguration} -bl:build.{logFilename} --verbosity normal /p:DeterministicSourcePaths=true", out string standardOutput, out string standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Build succeeded.", standardOutput); + string sourceRootMappingFilePath = Path.Combine(_testBinaryPath, _buildConfiguration.ToLowerInvariant(), "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); + + Assert.True(File.Exists(sourceRootMappingFilePath), $"File not found: {sourceRootMappingFilePath}"); + Assert.NotEmpty(File.ReadAllText(sourceRootMappingFilePath)); + Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); + + string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", deterministicReport: true); + string cmdArgument = $"test -c {_buildConfiguration} --no-build --collect:\"XPlat Code Coverage\" --results-directory:\"{testResultPath}\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(testLogFilesPath, "log.txt")}"; + _output.WriteLine($"Command: dotnet {cmdArgument}"); + bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput); + AssertCoverage(standardOutput); + + // delete irrelevant generated files + DeleteTestIntermediateFiles(testResultPath); + + // Check out/in process collectors injection + string dataCollectorLogContent = File.ReadAllText(Directory.GetFiles(testLogFilesPath, "log.datacollector.*.txt").Single()); + Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", dataCollectorLogContent); + Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(Directory.GetFiles(testLogFilesPath, "log.host.*.txt").Single())); + Assert.Contains("[coverlet]Mapping resolved", dataCollectorLogContent); - [Fact] - public void Msbuild() + CleanupBuildOutput(); + } + + [Fact] + public void Collectors_SourceLink() + { + string testResultPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName); + string testLogFilesPath = Path.Join(_testResultsPath, ((ITest)_testMember!.GetValue(_output)!).DisplayName, "log"); + string logFilename = string.Concat(((ITest)_testMember!.GetValue(_output)!).DisplayName, ".binlog"); + + CreateDeterministicTestPropsFile(); + DeleteLogFiles(testLogFilesPath); + DeleteCoverageFiles(testResultPath); + + DotnetCli($"build -c {_buildConfiguration} -bl:build.{logFilename} --verbosity normal /p:DeterministicSourcePaths=true", out string standardOutput, out string standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Build succeeded.", standardOutput); + string sourceRootMappingFilePath = Path.Combine(_testBinaryPath, _buildConfiguration.ToLowerInvariant(), "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); + + Assert.True(File.Exists(sourceRootMappingFilePath), $"File not found: {sourceRootMappingFilePath}"); + Assert.NotEmpty(File.ReadAllText(sourceRootMappingFilePath)); + Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); + + string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", sourceLink: true); + string cmdArgument = $"test -c {_buildConfiguration} --no-build --collect:\"XPlat Code Coverage\" --results-directory:\"{testResultPath}\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(testLogFilesPath, "log.txt")}"; + _output.WriteLine($"Command: dotnet {cmdArgument}"); + bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput); + AssertCoverage(standardOutput, checkDeterministicReport: false); + + // delete irrelevant generated files + DeleteTestIntermediateFiles(testResultPath); + + string[] fileList = Directory.GetFiles(testResultPath, "coverage.cobertura.xml", SearchOption.AllDirectories); + if (fileList.Length > 1) + { + _output.WriteLine("multiple coverage.cobertura.xml exist: "); + foreach (string file in fileList) { - CreateDeterministicTestPropsFile(); - DotnetCli($"build -c {_buildConfiguration} /p:DeterministicSourcePaths=true", out string standardOutput, out string _, _testProjectPath); - Assert.Contains("Build succeeded.", standardOutput); - string sourceRootMappingFilePath = Path.Combine(_testProjectPath, "bin", _buildConfiguration, _testProjectTfm!, "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); - Assert.True(File.Exists(sourceRootMappingFilePath), sourceRootMappingFilePath); - Assert.True(!string.IsNullOrEmpty(File.ReadAllText(sourceRootMappingFilePath)), "Empty CoverletSourceRootsMapping file"); - Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); - - DotnetCli($"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:DeterministicReport=true /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true", out standardOutput, out _, _testProjectPath); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(_testProjectPath, "coverage.json"))); - AssertCoverage(standardOutput); - - // Process exits hang on clean seem that process doesn't close, maybe some mbuild node reuse? btw manually tested - // DotnetCli("clean", out standardOutput, out standardError, _fixture.TestProjectPath); - // Assert.False(File.Exists(sourceRootMappingFilePath)); - RunCommand("git", "clean -fdx", out _, out _, _testProjectPath); + _output.WriteLine(file); } + } + + Assert.Single(fileList); + Assert.Contains("raw.githubusercontent.com", File.ReadAllText(fileList[0])); + + // Check out/in process collectors injection + string dataCollectorLogContent = File.ReadAllText(Directory.GetFiles(testLogFilesPath, "log.datacollector.*.txt").Single()); + Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", dataCollectorLogContent); + Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(Directory.GetFiles(testLogFilesPath, "log.host.*.txt").Single())); + Assert.Contains("[coverlet]Mapping resolved", dataCollectorLogContent); + + CleanupBuildOutput(); + } + + private static void DeleteTestIntermediateFiles(string testResultsPath) + { + if (Directory.Exists(testResultsPath)) + { + DirectoryInfo hdDirectory = new DirectoryInfo(testResultsPath); - [Fact] - public void Msbuild_SourceLink() + // search for directory "In" which has second copy e.g. '_fv-az365-374_2023-10-10_14_26_42\In\fv-az365-374\coverage.json' + DirectoryInfo[] intermediateFolder = hdDirectory.GetDirectories("In", SearchOption.AllDirectories); + foreach (DirectoryInfo foundDir in intermediateFolder) { - CreateDeterministicTestPropsFile(); - DotnetCli($"build -c {_buildConfiguration} /p:DeterministicSourcePaths=true", out string standardOutput, out string _, _testProjectPath); - Assert.Contains("Build succeeded.", standardOutput); - string sourceRootMappingFilePath = Path.Combine(_testProjectPath, "bin", _buildConfiguration, _testProjectTfm!, "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); - Assert.True(File.Exists(sourceRootMappingFilePath), sourceRootMappingFilePath); - Assert.True(!string.IsNullOrEmpty(File.ReadAllText(sourceRootMappingFilePath)), "Empty CoverletSourceRootsMapping file"); - Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); - - DotnetCli($"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:UseSourceLink=true /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true", out standardOutput, out _, _testProjectPath); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(_testProjectPath, "coverage.json"))); - Assert.Contains("raw.githubusercontent.com", File.ReadAllText(Path.Combine(_testProjectPath, "coverage.json"))); - AssertCoverage(standardOutput, checkDeterministicReport: false); - - // Process exits hang on clean seem that process doesn't close, maybe some mbuild node reuse? btw manually tested - // DotnetCli("clean", out standardOutput, out standardError, _fixture.TestProjectPath); - // Assert.False(File.Exists(sourceRootMappingFilePath)); - RunCommand("git", "clean -fdx", out _, out _, _testProjectPath); + DirectoryInfo? parentDir = Directory.GetParent(foundDir.FullName); + Directory.Delete(parentDir!.FullName, true); } + } + } + + private static void DeleteLogFiles(string directory) + { + if (Directory.Exists(directory)) + { + DirectoryInfo hdDirectory = new DirectoryInfo(directory); + FileInfo[] filesInDir = hdDirectory.GetFiles("log.*.txt"); - [Fact] - public void Collectors() + foreach (FileInfo foundFile in filesInDir) { - CreateDeterministicTestPropsFile(); - DotnetCli($"build -c {_buildConfiguration} /p:DeterministicSourcePaths=true", out string standardOutput, out string _, _testProjectPath); - Assert.Contains("Build succeeded.", standardOutput); - string sourceRootMappingFilePath = Path.Combine(_testProjectPath, "bin", GetAssemblyBuildConfiguration().ToString(), _testProjectTfm!, "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); - Assert.True(File.Exists(sourceRootMappingFilePath), sourceRootMappingFilePath); - Assert.NotEmpty(File.ReadAllText(sourceRootMappingFilePath)); - Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); - - string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", deterministicReport: true); - Assert.True(DotnetCli($"test -c {_buildConfiguration} --no-build \"{_testProjectPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(_testProjectPath, "log.txt")}", out standardOutput, out _), standardOutput); - Assert.Contains("Passed!", standardOutput); - AssertCoverage(standardOutput); - - // Check out/in process collectors injection - string dataCollectorLogContent = File.ReadAllText(Directory.GetFiles(_testProjectPath, "log.datacollector.*.txt").Single()); - Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", dataCollectorLogContent); - Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(Directory.GetFiles(_testProjectPath, "log.host.*.txt").Single())); - Assert.Contains("[coverlet]Mapping resolved", dataCollectorLogContent); - - // Process exits hang on clean seem that process doesn't close, maybe some mbuild node reuse? btw manually tested - // DotnetCli("clean", out standardOutput, out standardError, _fixture.TestProjectPath); - // Assert.False(File.Exists(sourceRootMappingFilePath)); - RunCommand("git", "clean -fdx", out _, out _, _testProjectPath); + string fullName = foundFile.FullName; + File.Delete(fullName); } + } + + } + private void CleanupBuildOutput() + { + if (Directory.Exists(_testBinaryPath)) + { + Directory.Delete(_testBinaryPath, recursive: true); + } - [Fact] - public void Collectors_SourceLink() + string intermediateBuildOutput = _testBinaryPath.Replace("bin", "obj"); + if (Directory.Exists(intermediateBuildOutput)) + { + Directory.Delete(intermediateBuildOutput, recursive: true); + } + } + private static void DeleteCoverageFiles(string directory) + { + if (Directory.Exists(directory)) + { + DirectoryInfo hdDirectory = new DirectoryInfo(directory); + FileInfo[] filesInDir = hdDirectory.GetFiles("coverage.cobertura.xml"); + + foreach (FileInfo foundFile in filesInDir) { - CreateDeterministicTestPropsFile(); - DotnetCli($"build -c {_buildConfiguration} /p:DeterministicSourcePaths=true", out string standardOutput, out string _, _testProjectPath); - Assert.Contains("Build succeeded.", standardOutput); - string sourceRootMappingFilePath = Path.Combine(_testProjectPath, "bin", GetAssemblyBuildConfiguration().ToString(), _testProjectTfm!, "CoverletSourceRootsMapping_coverletsample.integration.determisticbuild"); - Assert.True(File.Exists(sourceRootMappingFilePath), sourceRootMappingFilePath); - Assert.NotEmpty(File.ReadAllText(sourceRootMappingFilePath)); - Assert.Contains("=/_/", File.ReadAllText(sourceRootMappingFilePath)); - - string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", sourceLink: true); - Assert.True(DotnetCli($"test -c {_buildConfiguration} --no-build \"{_testProjectPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(_testProjectPath, "log.txt")}", out standardOutput, out _), standardOutput); - Assert.Contains("Passed!", standardOutput); - AssertCoverage(standardOutput, checkDeterministicReport: false); - Assert.Contains("raw.githubusercontent.com", File.ReadAllText(Directory.GetFiles(_testProjectPath, "coverage.cobertura.xml", SearchOption.AllDirectories).Single())); - - // Check out/in process collectors injection - string dataCollectorLogContent = File.ReadAllText(Directory.GetFiles(_testProjectPath, "log.datacollector.*.txt").Single()); - Assert.Contains("[coverlet]Initializing CoverletCoverageDataCollector with configuration:", dataCollectorLogContent); - Assert.Contains("[coverlet]Initialize CoverletInProcDataCollector", File.ReadAllText(Directory.GetFiles(_testProjectPath, "log.host.*.txt").Single())); - Assert.Contains("[coverlet]Mapping resolved", dataCollectorLogContent); - - // Process exits hang on clean seem that process doesn't close, maybe some mbuild node reuse? btw manually tested - // DotnetCli("clean", out standardOutput, out standardError, _fixture.TestProjectPath); - // Assert.False(File.Exists(sourceRootMappingFilePath)); - RunCommand("git", "clean -fdx", out _, out _, _testProjectPath); + string fullName = foundFile.FullName; + File.Delete(fullName); } - public void Dispose() + DirectoryInfo[] dirsInDir = hdDirectory.GetDirectories(); + + foreach (DirectoryInfo foundDir in dirsInDir) { - File.Delete(Path.Combine(_testProjectPath, PropsFileName)); + foreach (FileInfo foundFile in foundDir.GetFiles("coverage.cobertura.xml")) + { + string fullName = foundFile.FullName; + File.Delete(fullName); + } } + } + } + + private string GetReportPath(string standardOutput) + { + string reportPath = ""; + if (standardOutput.Contains("coverage.json")) + { + reportPath = standardOutput.Split('\n').FirstOrDefault(line => line.Contains("coverage.json"))!.TrimStart(); + reportPath = reportPath[reportPath.IndexOf(Directory.GetDirectoryRoot(_testProjectPath))..]; + reportPath = reportPath[..reportPath.IndexOf("coverage.json")]; + } + return reportPath; + } + public void Dispose() + { + File.Delete(Path.Combine(_testProjectPath, PropsFileName)); } + } } diff --git a/test/coverlet.integration.tests/DotnetTool.cs b/test/coverlet.integration.tests/DotnetTool.cs index 58f2521ac..14a8edc65 100644 --- a/test/coverlet.integration.tests/DotnetTool.cs +++ b/test/coverlet.integration.tests/DotnetTool.cs @@ -1,50 +1,144 @@ // Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Coverlet.Tests.Xunit.Extensions; using System.IO; using System.Linq; +using Coverlet.Tests.Utils; using Xunit; +using Xunit.Abstractions; namespace Coverlet.Integration.Tests { - public class DotnetGlobalTools : BaseTest + public class DotnetGlobalTools : BaseTest + { + private readonly ITestOutputHelper _output; + private readonly string _buildTargetFramework; + + public DotnetGlobalTools(ITestOutputHelper output) + { + _output = output; + _buildTargetFramework = TestUtils.GetAssemblyTargetFramework(); + } + private string InstallTool(string projectPath) + { + _ = DotnetCli($"tool install coverlet.console --version {GetPackageVersion("*console*.nupkg")} --tool-path \"{Path.Combine(projectPath, "coverletTool")}\"", out string standardOutput, out _, projectPath); + Assert.Contains("was successfully installed.", standardOutput); + return Path.Combine(projectPath, "coverletTool", "coverlet"); + } + + [Fact] + public void DotnetTool() + { + using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); + string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json"; + DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); + RunCommand(coverletToolCommandPath, $"\"{publishedTestFile}\" --target \"dotnet\" --targetargs \"test {Path.Combine(clonedTemplateProject.ProjectRootPath, ClonedTemplateProject.ProjectFileName)} --no-build\" --include-test-assembly --output \"{outputPath}\"", out standardOutput, out standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + Assert.Contains("Passed!", standardOutput); + AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); + } + + [Fact] + public void StandAlone() + { + using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); + string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json"; + DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); + RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --output \"{outputPath}\"", out standardOutput, out standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + Assert.Contains("Hello World!", standardOutput); + Assert.True(File.Exists(outputPath)); + AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); + } + + [Fact] + public void StandAloneThreshold() + { + using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); + string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json"; + DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); + Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --output \"{outputPath}\"", out standardOutput, out standardError)); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + // make standard output available in trx file + _output.WriteLine(standardOutput); + } + Assert.Contains("Hello World!", standardOutput); + Assert.True(File.Exists(outputPath)); + AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); + Assert.Contains("The minimum line coverage is below the specified 80", standardOutput); + Assert.Contains("The minimum method coverage is below the specified 80", standardOutput); + } + + [Fact] + public void StandAloneThresholdLine() + { + using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); + string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json"; + DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); + Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --output \"{outputPath}\"", out standardOutput, out standardError)); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + // make standard output available in trx file + _output.WriteLine(standardOutput); + } + Assert.Contains("Hello World!", standardOutput); + Assert.True(File.Exists(outputPath)); + AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); + Assert.Contains("The minimum line coverage is below the specified 80", standardOutput); + Assert.DoesNotContain("The minimum method coverage is below the specified 80", standardOutput); + } + + [Fact] + public void StandAloneThresholdLineAndMethod() { - private string InstallTool(string projectPath) - { - _ = DotnetCli($"tool install coverlet.console --version {GetPackageVersion("*console*.nupkg")} --tool-path \"{Path.Combine(projectPath, "coverletTool")}\"", out string standardOutput, out _, projectPath); - Assert.Contains("was successfully installed.", standardOutput); - return Path.Combine(projectPath, "coverletTool", "coverlet "); - } - - [ConditionalFact] - [SkipOnOS(OS.Linux)] - [SkipOnOS(OS.MacOS)] - public void DotnetTool() - { - using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); - UpdateNugeConfigtWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); - string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); - DotnetCli($"build {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); - string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); - RunCommand(coverletToolCommandPath, $"\"{publishedTestFile}\" --target \"dotnet\" --targetargs \"test {Path.Combine(clonedTemplateProject.ProjectRootPath, ClonedTemplateProject.ProjectFileName)} --no-build\" --include-test-assembly --output \"{clonedTemplateProject.ProjectRootPath}\"\\", out standardOutput, out standardError); - Assert.Contains("Passed!", standardOutput); - AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); - } - - [ConditionalFact] - [SkipOnOS(OS.Linux)] - [SkipOnOS(OS.MacOS)] - public void StandAlone() - { - using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); - UpdateNugeConfigtWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); - string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); - DotnetCli($"build {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); - string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); - RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --output \"{clonedTemplateProject.ProjectRootPath}\"\\", out standardOutput, out standardError); - Assert.Contains("Hello World!", standardOutput); - AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); - } + using ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + string coverletToolCommandPath = InstallTool(clonedTemplateProject.ProjectRootPath!); + string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json"; + DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError); + string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref")); + Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --threshold-type method --output \"{outputPath}\"", out standardOutput, out standardError)); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + // make standard output available in trx file + _output.WriteLine(standardOutput); + } + Assert.Contains("Hello World!", standardOutput); + Assert.True(File.Exists(outputPath)); + AssertCoverage(clonedTemplateProject, standardOutput: standardOutput); + Assert.Contains("The minimum line coverage is below the specified 80", standardOutput); + Assert.Contains("The minimum method coverage is below the specified 80", standardOutput); } + } } diff --git a/test/coverlet.integration.tests/Msbuild.cs b/test/coverlet.integration.tests/Msbuild.cs index 83c635934..a0b53d369 100644 --- a/test/coverlet.integration.tests/Msbuild.cs +++ b/test/coverlet.integration.tests/Msbuild.cs @@ -1,215 +1,320 @@ // Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System; using System.IO; using System.Linq; +using Coverlet.Tests.Utils; using Xunit; +using Xunit.Abstractions; namespace Coverlet.Integration.Tests { - public class Msbuild : BaseTest + public class Msbuild : BaseTest + { + private readonly string _buildConfiguration; + private readonly string _buildTargetFramework; + private readonly ITestOutputHelper _output; + + public Msbuild(ITestOutputHelper output) { - private readonly string _buildConfiguration; + _buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString(); + _buildTargetFramework = TestUtils.GetAssemblyTargetFramework(); + _output = output; + } - public Msbuild() - { - _buildConfiguration = GetAssemblyBuildConfiguration().ToString(); - } + private ClonedTemplateProject PrepareTemplateProject() + { + ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); + UpdateNugetConfigWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); + AddCoverletMsbuildRef(clonedTemplateProject.ProjectRootPath!); + return clonedTemplateProject; + } - private ClonedTemplateProject PrepareTemplateProject() - { - ClonedTemplateProject clonedTemplateProject = CloneTemplateProject(); - UpdateNugeConfigtWithLocalPackageFolder(clonedTemplateProject.ProjectRootPath!); - AddCoverletMsbuildRef(clonedTemplateProject.ProjectRootPath!); - return clonedTemplateProject; - } + [Fact] + public void TestMsbuild() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + string coverageFileName = $"coverage.{_buildTargetFramework}.json"; + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName))); + AssertCoverage(clonedTemplateProject, coverageFileName); + } - [Fact] - public void TestMsbuild() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "coverage.json"))); - AssertCoverage(clonedTemplateProject); - } + [Fact] + public void TestMsbuild_NoCoverletOutput() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + string coverageFileName = $"coverage.{_buildTargetFramework}.json"; + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName))); + AssertCoverage(clonedTemplateProject, coverageFileName); + } - [Fact] - public void TestMsbuild_NoCoverletOutput() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "coverage.json"))); - AssertCoverage(clonedTemplateProject); - } + [Fact] + public void TestMsbuild_CoverletOutput_Folder_FileNameWithoutExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + string coverageFileName = $"file.{_buildTargetFramework}.json"; + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName))); + AssertCoverage(clonedTemplateProject, coverageFileName); + } - [Fact] - public void TestMsbuild_CoverletOutput_Folder_FileNameWithoutExtension() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.json"))); - AssertCoverage(clonedTemplateProject, "file.json"); - } + [Fact] + public void TestMsbuild_CoverletOutput_Folder_FileNameExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError), standardOutput); + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + string coverageFileName = $"file.{_buildTargetFramework}.ext"; + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName))); + AssertCoverage(clonedTemplateProject, coverageFileName); + } - [Fact] - public void TestMsbuild_CoverletOutput_Folder_FileNameExtension() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext"))); - AssertCoverage(clonedTemplateProject, "file.ext"); - } + [Fact] + public void TestMsbuild_CoverletOutput_Folder_FileNameExtension_SpecifyFramework() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + Assert.False(clonedTemplateProject.IsMultipleTargetFramework()); + string framework = clonedTemplateProject.GetTargetFrameworks().Single(); + DotnetCli($"test -c {_buildConfiguration} -f {framework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext"))); + AssertCoverage(clonedTemplateProject, "file.ext"); + } - [Fact] - public void TestMsbuild_CoverletOutput_Folder_FileNameExtension_SpecifyFramework() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.False(clonedTemplateProject.IsMultipleTargetFramework()); - string framework = clonedTemplateProject.GetTargetFrameworks().Single(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {framework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext"))); - AssertCoverage(clonedTemplateProject, "file.ext"); - } + [Fact] + public void TestMsbuild_CoverletOutput_Folder_FileNameWithDoubleExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext1.ext2", out string standardOutput, out string standardError); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + string coverageFileName = $"file.ext1.{_buildTargetFramework}.ext2"; + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName))); + AssertCoverage(clonedTemplateProject, coverageFileName); + } - [Fact] - public void TestMsbuild_CoverletOutput_Folder_FileNameWithDoubleExtension() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext1.ext2", out string standardOutput, out string standardError), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext1.ext2"))); - AssertCoverage(clonedTemplateProject, "file.ext1.ext2"); - } + [Fact] + public void Test_MultipleTargetFrameworkReport_NoCoverletOutput() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); - [Fact] - public void Test_MultipleTargetFrameworkReport_NoCoverletOutput() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] { "net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"coverage.{targetFramework}.json"))); - } - - AssertCoverage(clonedTemplateProject, "coverage.*.json"); - } + foreach (string targetFramework in targetFrameworks) + { + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"coverage.{targetFramework}.json"))); + } - [Fact] - public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] { "net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - string fileToCheck = Path.Combine(clonedTemplateProject.ProjectRootPath, $"coverage.{targetFramework}.json"); - Assert.True(File.Exists(fileToCheck), $"Expected file '{fileToCheck}'\nOutput:\n{standardOutput}"); - } - - AssertCoverage(clonedTemplateProject, "coverage.*.json"); - } + AssertCoverage(clonedTemplateProject, "coverage.*.json"); + } - [Fact] - public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithoutExtension() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] {"net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.json"))); - } - - AssertCoverage(clonedTemplateProject, "file.*.json"); - } + [Fact] + public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + bool result = DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.True(result); + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); - [Fact] - public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension_SpecifyFramework() - { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] {"net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(clonedTemplateProject.IsMultipleTargetFramework()); - string[] frameworks = clonedTemplateProject.GetTargetFrameworks(); - Assert.Equal(2, frameworks.Length); - string framework = frameworks.FirstOrDefault()!; - Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {framework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - if (framework == targetFramework) - { - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); - } - else - { - Assert.False(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); - } - } - - AssertCoverage(clonedTemplateProject, "file.*.ext"); - } + foreach (string targetFramework in targetFrameworks) + { + string fileToCheck = Path.Combine(clonedTemplateProject.ProjectRootPath, $"coverage.{targetFramework}.json"); + Assert.True(File.Exists(fileToCheck), $"Expected file '{fileToCheck}'\nOutput:\n{standardOutput}"); + } + + AssertCoverage(clonedTemplateProject, "coverage.*.json"); + } + + [Fact] + public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithoutExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + + foreach (string targetFramework in targetFrameworks) + { + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.json"))); + } - [Fact] - public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension() + AssertCoverage(clonedTemplateProject, "file.*.json"); + } + + [Fact] + public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension_SpecifyFramework() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + Assert.True(clonedTemplateProject.IsMultipleTargetFramework()); + string[] frameworks = clonedTemplateProject.GetTargetFrameworks(); + Assert.Equal(2, frameworks.Length); + string framework = frameworks.FirstOrDefault()!; + DotnetCli($"test -c {_buildConfiguration} -f {framework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + + foreach (string targetFramework in targetFrameworks) + { + if (framework == targetFramework) { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] {"net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); - } - - AssertCoverage(clonedTemplateProject, "file.*.ext"); + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); } - - [Fact] - public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithDoubleExtension() + else { - using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); - string[] targetFrameworks = new string[] {"net6.0", "net7.0" }; - UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); - Assert.True(DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext1.ext2", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput); - Assert.Contains("Passed!", standardOutput); - Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput); - - foreach (string targetFramework in targetFrameworks) - { - Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2"))); - } - - AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2"); + Assert.False(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); } + } + + AssertCoverage(clonedTemplateProject, "file.*.ext"); + } + + [Fact] + public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + + foreach (string targetFramework in targetFrameworks) + { + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext"))); + } + + AssertCoverage(clonedTemplateProject, "file.*.ext"); + } + + [Fact] + public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithDoubleExtension() + { + using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject(); + string[] targetFrameworks = new string[] { "net6.0", "net8.0" }; + UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks); + DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext1.ext2", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!); + if (!string.IsNullOrEmpty(standardError)) + { + _output.WriteLine(standardError); + } + else + { + _output.WriteLine(standardOutput); + } + Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal); + Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal); + + foreach (string targetFramework in targetFrameworks) + { + Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2"))); + } + + AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2"); } + } } diff --git a/test/coverlet.integration.tests/Properties/AssemblyInfo.cs b/test/coverlet.integration.tests/Properties/AssemblyInfo.cs index 73e98ccb6..af49d7698 100644 --- a/test/coverlet.integration.tests/Properties/AssemblyInfo.cs +++ b/test/coverlet.integration.tests/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; diff --git a/test/coverlet.integration.tests/WpfResolverTests.cs b/test/coverlet.integration.tests/WpfResolverTests.cs new file mode 100644 index 000000000..779cb1e1b --- /dev/null +++ b/test/coverlet.integration.tests/WpfResolverTests.cs @@ -0,0 +1,75 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Coverlet.Core.Abstractions; +using Coverlet.Core.Instrumentation; +using Coverlet.Tests.Utils; +using Coverlet.Tests.Xunit.Extensions; +using Microsoft.Extensions.DependencyModel; +using Moq; +using Xunit; + +namespace Coverlet.Integration.Tests +{ + public class WpfResolverTests : BaseTest + { + [ConditionalFact] + [SkipOnOS(OS.Linux, "WPF only runs on Windows")] + [SkipOnOS(OS.MacOS, "WPF only runs on Windows")] + public void TestInstrument_NetCoreSharedFrameworkResolver() + { + string buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant(); + string wpfProjectPath = TestUtils.GetTestProjectPath("coverlet.tests.projectsample.wpf8"); + string testBinaryPath = Path.Combine(TestUtils.GetTestBinaryPath("coverlet.tests.projectsample.wpf8"), buildConfiguration); + Assert.True(DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error)); + string assemblyLocation = Directory.GetFiles(testBinaryPath, "coverlet.tests.projectsample.wpf8.dll", SearchOption.AllDirectories).First(); + + var mockLogger = new Mock(); + var resolver = new NetCoreSharedFrameworkResolver(assemblyLocation, mockLogger.Object); + var compilationLibrary = new CompilationLibrary( + "package", + "System.Drawing", + "0.0.0.0", + "sha512-not-relevant", + Enumerable.Empty(), + Enumerable.Empty(), + true); + + var assemblies = new List(); + Assert.True(resolver.TryResolveAssemblyPaths(compilationLibrary, assemblies), + "sample assembly shall be resolved"); + Assert.NotEmpty(assemblies); + } + + [ConditionalFact] + [SkipOnOS(OS.Linux, "WPF only runs on Windows")] + [SkipOnOS(OS.MacOS, "WPF only runs on Windows")] + public void TestInstrument_NetCoreSharedFrameworkResolver_SelfContained() + { + string buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant(); + string wpfProjectPath = TestUtils.GetTestProjectPath("coverlet.tests.projectsample.wpf8.selfcontained"); + string testBinaryPath = Path.Combine(TestUtils.GetTestBinaryPath("coverlet.tests.projectsample.wpf8.selfcontained"), $"{buildConfiguration}_win-x64"); + Assert.True(DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error)); + string assemblyLocation = Directory.GetFiles(testBinaryPath, "coverlet.tests.projectsample.wpf8.selfcontained.dll", SearchOption.AllDirectories).First(); + + var mockLogger = new Mock(); + var resolver = new NetCoreSharedFrameworkResolver(assemblyLocation, mockLogger.Object); + var compilationLibrary = new CompilationLibrary( + "package", + "System.Drawing", + "0.0.0.0", + "sha512-not-relevant", + Enumerable.Empty(), + Enumerable.Empty(), + true); + + var assemblies = new List(); + Assert.True(resolver.TryResolveAssemblyPaths(compilationLibrary, assemblies), + "sample assembly shall be resolved"); + Assert.NotEmpty(assemblies); + } + } +} diff --git a/test/coverlet.integration.tests/coverlet.integration.tests.csproj b/test/coverlet.integration.tests/coverlet.integration.tests.csproj index 6de30285a..4d205fe64 100644 --- a/test/coverlet.integration.tests/coverlet.integration.tests.csproj +++ b/test/coverlet.integration.tests/coverlet.integration.tests.csproj @@ -1,20 +1,26 @@ - - + - net6.0 + net8.0 false enable + false + true - - - - + + + + + + + + + diff --git a/test/coverlet.msbuild.tasks.tests/CoverageResultTaskTests.cs b/test/coverlet.msbuild.tasks.tests/CoverageResultTaskTests.cs new file mode 100644 index 000000000..547fcdbfb --- /dev/null +++ b/test/coverlet.msbuild.tasks.tests/CoverageResultTaskTests.cs @@ -0,0 +1,136 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Coverlet.Core.Abstractions; +using Coverlet.Core.Helpers; +using Coverlet.MSbuild.Tasks; +using Microsoft.Build.Framework; +using Microsoft.Build.Locator; +using Microsoft.Build.Utilities; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using Xunit; + +namespace coverlet.msbuild.tasks.tests +{ + + public class MSBuildFixture + { + public MSBuildFixture() + { + MSBuildLocator.RegisterDefaults(); + } + } + public class CoverageResultTaskTests : IAssemblyFixture + { + private readonly Mock _buildEngine; + private readonly List _errors; + private readonly Mock _mockAssemblyAdapter; + + public CoverageResultTaskTests() + { + _buildEngine = new Mock(); + _errors = new List(); + _mockAssemblyAdapter = new Mock(); + _mockAssemblyAdapter.Setup(x => x.GetAssemblyName(It.IsAny())).Returns("abc"); + } + + [Fact] + public void Execute_StateUnderTest_MissingInstrumentationState() + { + // Arrange + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + + ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); + BaseTask.ServiceProvider = serviceProvider; + + _buildEngine.Setup(x => x.LogErrorEvent(It.IsAny())).Callback(e => _errors.Add(e)); + + var coverageResultTask = new CoverageResultTask + { + OutputFormat = "cobertura", + Output = "coverageDir", + Threshold = "50", + ThresholdType = "total", + ThresholdStat = "total", + InstrumenterState = null + }; + coverageResultTask.BuildEngine = _buildEngine.Object; + + // Act + bool success = coverageResultTask.Execute(); + + // Assert + Assert.Equal("[coverlet] Result of instrumentation task not found", _errors.FirstOrDefault()?.Message); + } + + [Fact] + public void Execute_StateUnderTest_WithInstrumentationState_Fake() + { + // Arrange + var mockFileSystem = new Mock(); + mockFileSystem.Setup(x => x.Exists(It.IsAny())).Returns(true); + mockFileSystem.Setup(x => x.Copy(It.IsAny(), It.IsAny(), It.IsAny())); + var log = new TaskLoggingHelper(_buildEngine.Object, "CoverageResultTask"); + + IServiceCollection serviceCollection = new ServiceCollection(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(_ => new MSBuildLogger(log)); + serviceCollection.AddTransient(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(serviceProvider => new SourceRootTranslator("empty", serviceProvider.GetRequiredService(), mockFileSystem.Object, _mockAssemblyAdapter.Object)); + ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); + BaseTask.ServiceProvider = serviceProvider; + _buildEngine.Setup(x => x.LogErrorEvent(It.IsAny())).Callback(e => _errors.Add(e)); + +#pragma warning disable CS8604 // Possible null reference argument for parameter.. +#pragma warning disable CS8602 // Dereference of a possibly null reference. + var InstrumenterState = new TaskItem(Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "TestAssets\\InstrumenterState.ItemSpec.data1.xml")); +#pragma warning restore CS8602 // Dereference of a possibly null reference. +#pragma warning restore C8S604 // Possible null reference argument for parameter. + + var coverageResultTask = new CoverageResultTask + { + OutputFormat = "cobertura", + Output = "coverageDir", + Threshold = "50", + ThresholdType = "total", + ThresholdStat = "total", + InstrumenterState = InstrumenterState + }; + coverageResultTask.BuildEngine = _buildEngine.Object; + + // Act + bool success = coverageResultTask.Execute(); + + // Assert + Assert.True(success); + Assert.False(coverageResultTask.Log.HasLoggedErrors); + + Assert.Contains("coverageDir.cobertura.xml", coverageResultTask.ReportItems[0].ItemSpec); + Assert.Equal(16, coverageResultTask.ReportItems[0].MetadataCount); + + } + + } + class InstrumentationHelperForDebugging : InstrumentationHelper + { + public InstrumentationHelperForDebugging(IProcessExitHandler processExitHandler, IRetryHelper retryHelper, IFileSystem fileSystem, Coverlet.Core.Abstractions.ILogger logger, ISourceRootTranslator sourceTranslator) + : base(processExitHandler, retryHelper, fileSystem, logger, sourceTranslator) + { + + } + + public override void RestoreOriginalModule(string module, string identifier) + { + // DO NOT RESTORE + } + + public override void RestoreOriginalModules() + { + // DO NOT RESTORE + } + } +} diff --git a/test/coverlet.msbuild.tasks.tests/Properties/AssemblyInfo.cs b/test/coverlet.msbuild.tasks.tests/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..7894b82a4 --- /dev/null +++ b/test/coverlet.msbuild.tasks.tests/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; + +[assembly: AssemblyKeyFile("coverlet.msbuild.tasks.tests.snk")] diff --git a/test/coverlet.msbuild.tasks.tests/Reporters.cs b/test/coverlet.msbuild.tasks.tests/Reporters.cs new file mode 100644 index 000000000..16450f1f7 --- /dev/null +++ b/test/coverlet.msbuild.tasks.tests/Reporters.cs @@ -0,0 +1,53 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Coverlet.Core; +using Coverlet.Core.Abstractions; +using Coverlet.Core.Reporters; +using Moq; +using Xunit; + +namespace Coverlet.MSbuild.Tasks.Reporters.Tests +{ + public class Reporters + { + // we use lcov with extension .info and cobertura with extension .cobertura.xml + // to have all possible extension format + // empty coverletOutput is not possible thank's to props default + [Theory] + // single tfm + [InlineData("", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.info")] + [InlineData(null, "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.cobertura.xml")] + [InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext")] + [InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2")] + [InlineData(null, "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.cobertura.xml")] + // multiple tfm + [InlineData("netcoreapp2.2", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.netcoreapp2.2.info")] + [InlineData("netcoreapp2.2", "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.netcoreapp2.2.cobertura.xml")] + [InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext")] + [InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2")] + [InlineData("netcoreapp2.2", "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.netcoreapp2.2.cobertura.xml")] + public void Msbuild_ReportWriter(string? coverletMultiTargetFrameworksCurrentTFM, string coverletOutput, string reportFormat, string expectedFileName) + { + var fileSystem = new Mock(); + + var reportWriter = new ReportWriter( + coverletMultiTargetFrameworksCurrentTFM, + // mimic code inside CoverageResultTask.cs + Path.GetDirectoryName(coverletOutput), + coverletOutput, + new ReporterFactory(reportFormat).CreateReporter(), + fileSystem.Object, + new CoverageResult() { Modules = new Modules(), Parameters = new CoverageParameters() }, null); + + string path = reportWriter.WriteReport(); + //remove drive for windows paths + if (path.Contains(':')) + { + path = path[2..]; + } + // Path.Combine depends on OS so we can change only win side to avoid duplication + Assert.Equal(path.Replace('/', Path.DirectorySeparatorChar), expectedFileName.Replace('/', Path.DirectorySeparatorChar)); + } + } +} diff --git a/test/coverlet.msbuild.tasks.tests/TestAssets/InstrumenterState.ItemSpec.data1.xml b/test/coverlet.msbuild.tasks.tests/TestAssets/InstrumenterState.ItemSpec.data1.xml new file mode 100644 index 000000000..600395b28 --- /dev/null +++ b/test/coverlet.msbuild.tasks.tests/TestAssets/InstrumenterState.ItemSpec.data1.xml @@ -0,0 +1,105330 @@ + + d78227cd-9f82-40be-a157-b9c17f1833bc + + C:\GitHub\coverlet\test\coverlet.collector.tests\bin\Debug\net6.0\coverlet.collector.tests.dll + + false + + + + + + + + false + + + false + false + false + + + + + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + Coverlet.Core.Abstractions.IReporter Coverlet.Collector.DataCollection.CoverageManager/<>c__DisplayClass6_0::<.ctor>b__0(System.String) + + + + C:\GitHub\coverlet\src\coverlet.collector\Resources\Resources.Designer.cs + + + + + 41 + 0 + + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 41 + 13 + 11 + 0 + 0 + + + + + 41 + 1 + + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 41 + 47 + 11 + 1 + 1 + + + + 0 + + + 40 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 40 + + + + 41 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 41 + + + + 42 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 42 + + + + 43 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 43 + + + + 44 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 44 + + + + 45 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 45 + + + + 46 + + coverlet.collector.Resources.Resources + 0 + System.Resources.ResourceManager coverlet.collector.Resources.Resources::get_ResourceManager() + 46 + + + + 55 + + coverlet.collector.Resources.Resources + 0 + System.Globalization.CultureInfo coverlet.collector.Resources.Resources::get_Culture() + 55 + + + + 56 + + coverlet.collector.Resources.Resources + 0 + System.Globalization.CultureInfo coverlet.collector.Resources.Resources::get_Culture() + 56 + + + + 57 + + coverlet.collector.Resources.Resources + 0 + System.Globalization.CultureInfo coverlet.collector.Resources.Resources::get_Culture() + 57 + + + + 58 + + coverlet.collector.Resources.Resources + 0 + System.Void coverlet.collector.Resources.Resources::set_Culture(System.Globalization.CultureInfo) + 58 + + + + 59 + + coverlet.collector.Resources.Resources + 0 + System.Void coverlet.collector.Resources.Resources::set_Culture(System.Globalization.CultureInfo) + 59 + + + + 60 + + coverlet.collector.Resources.Resources + 0 + System.Void coverlet.collector.Resources.Resources::set_Culture(System.Globalization.CultureInfo) + 60 + + + + 67 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageReportException() + 67 + + + + 68 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageReportException() + 68 + + + + 69 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageReportException() + 69 + + + + 76 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageResultException() + 76 + + + + 77 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageResultException() + 77 + + + + 78 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_CoverageResultException() + 78 + + + + 85 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToCleanupReportDirectory() + 85 + + + + 86 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToCleanupReportDirectory() + 86 + + + + 87 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToCleanupReportDirectory() + 87 + + + + 94 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToSaveCoverageReport() + 94 + + + + 95 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToSaveCoverageReport() + 95 + + + + 96 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToSaveCoverageReport() + 96 + + + + 103 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToUnloadModule() + 103 + + + + 104 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToUnloadModule() + 104 + + + + 105 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_FailedToUnloadModule() + 105 + + + + 112 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_InstrumentationException() + 112 + + + + 113 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_InstrumentationException() + 113 + + + + 114 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_InstrumentationException() + 114 + + + + 121 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_NoTestModulesFound() + 121 + + + + 122 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_NoTestModulesFound() + 122 + + + + 123 + + coverlet.collector.Resources.Resources + 0 + System.String coverlet.collector.Resources.Resources::get_NoTestModulesFound() + 123 + + + + 32 + + coverlet.collector.Resources.Resources + 0 + System.Void coverlet.collector.Resources.Resources::.ctor() + 32 + + + + 33 + + coverlet.collector.Resources.Resources + 0 + System.Void coverlet.collector.Resources.Resources::.ctor() + 33 + + + + C:\GitHub\coverlet\src\coverlet.collector\Resources\Resources.Designer.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\CountDownEvent.cs + + + + + 36 + 0 + + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 36 + 25 + 23 + 0 + 0 + + + + + 36 + 1 + + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 36 + 53 + 23 + 1 + 1 + + + + 1 + + + 13 + + Coverlet.Collector.Utilities.CollectorCountdownEventFactory + 0 + Coverlet.Collector.Utilities.Interfaces.ICountDownEvent Coverlet.Collector.Utilities.CollectorCountdownEventFactory::Create(System.Int32,System.TimeSpan) + 13 + + + + 14 + + Coverlet.Collector.Utilities.CollectorCountdownEventFactory + 0 + Coverlet.Collector.Utilities.Interfaces.ICountDownEvent Coverlet.Collector.Utilities.CollectorCountdownEventFactory::Create(System.Int32,System.TimeSpan) + 14 + + + + 15 + + Coverlet.Collector.Utilities.CollectorCountdownEventFactory + 0 + Coverlet.Collector.Utilities.Interfaces.ICountDownEvent Coverlet.Collector.Utilities.CollectorCountdownEventFactory::Create(System.Int32,System.TimeSpan) + 15 + + + + 30 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Signal() + 30 + + + + 31 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Signal() + 31 + + + + 32 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Signal() + 32 + + + + 35 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 35 + + + + 36 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 36 + + + + 37 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 37 + + + + 38 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 38 + + + + 40 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::Wait() + 40 + + + + 23 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::.ctor(System.Int32,System.TimeSpan) + 23 + + + + 24 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::.ctor(System.Int32,System.TimeSpan) + 24 + + + + 25 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::.ctor(System.Int32,System.TimeSpan) + 25 + + + + 26 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::.ctor(System.Int32,System.TimeSpan) + 26 + + + + 27 + + Coverlet.Collector.Utilities.CollectorCountdownEvent + 0 + System.Void Coverlet.Collector.Utilities.CollectorCountdownEvent::.ctor(System.Int32,System.TimeSpan) + 27 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\CountDownEvent.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\CoverletDataCollectorException.cs + + + 2 + + + 10 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String) + 10 + + + + 11 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String) + 11 + + + + 12 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String) + 12 + + + + 14 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String,System.Exception) + 14 + + + + 15 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String,System.Exception) + 15 + + + + 16 + + Coverlet.Collector.Utilities.CoverletDataCollectorException + 0 + System.Void Coverlet.Collector.Utilities.CoverletDataCollectorException::.ctor(System.String,System.Exception) + 16 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\CoverletDataCollectorException.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\DirectoryHelper.cs + + + 3 + + + 14 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Boolean Coverlet.Collector.Utilities.DirectoryHelper::Exists(System.String) + 14 + + + + 15 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Boolean Coverlet.Collector.Utilities.DirectoryHelper::Exists(System.String) + 15 + + + + 16 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Boolean Coverlet.Collector.Utilities.DirectoryHelper::Exists(System.String) + 16 + + + + 20 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::CreateDirectory(System.String) + 20 + + + + 21 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::CreateDirectory(System.String) + 21 + + + + 22 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::CreateDirectory(System.String) + 22 + + + + 26 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::Delete(System.String,System.Boolean) + 26 + + + + 27 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::Delete(System.String,System.Boolean) + 27 + + + + 28 + + Coverlet.Collector.Utilities.DirectoryHelper + 0 + System.Void Coverlet.Collector.Utilities.DirectoryHelper::Delete(System.String,System.Boolean) + 28 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\DirectoryHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\FileHelper.cs + + + 4 + + + 14 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Boolean Coverlet.Collector.Utilities.FileHelper::Exists(System.String) + 14 + + + + 15 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Boolean Coverlet.Collector.Utilities.FileHelper::Exists(System.String) + 15 + + + + 16 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Boolean Coverlet.Collector.Utilities.FileHelper::Exists(System.String) + 16 + + + + 20 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Void Coverlet.Collector.Utilities.FileHelper::WriteAllText(System.String,System.String) + 20 + + + + 21 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Void Coverlet.Collector.Utilities.FileHelper::WriteAllText(System.String,System.String) + 21 + + + + 22 + + Coverlet.Collector.Utilities.FileHelper + 0 + System.Void Coverlet.Collector.Utilities.FileHelper::WriteAllText(System.String,System.String) + 22 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\FileHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\TestPlatformEqtTrace.cs + + + 5 + + + 13 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Boolean Coverlet.Collector.Utilities.TestPlatformEqtTrace::get_IsInfoEnabled() + 13 + + + + 14 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Boolean Coverlet.Collector.Utilities.TestPlatformEqtTrace::get_IsVerboseEnabled() + 14 + + + + 22 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Verbose(System.String,System.Object[]) + 22 + + + + 23 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Verbose(System.String,System.Object[]) + 23 + + + + 24 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Verbose(System.String,System.Object[]) + 24 + + + + 32 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Warning(System.String,System.Object[]) + 32 + + + + 33 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Warning(System.String,System.Object[]) + 33 + + + + 34 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Warning(System.String,System.Object[]) + 34 + + + + 42 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Info(System.String,System.Object[]) + 42 + + + + 43 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Info(System.String,System.Object[]) + 43 + + + + 44 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Info(System.String,System.Object[]) + 44 + + + + 52 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Error(System.String,System.Object[]) + 52 + + + + 53 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Error(System.String,System.Object[]) + 53 + + + + 54 + + Coverlet.Collector.Utilities.TestPlatformEqtTrace + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformEqtTrace::Error(System.String,System.Object[]) + 54 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\TestPlatformEqtTrace.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\TestPlatformLogger.cs + + + 6 + + + 27 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::LogWarning(System.String) + 27 + + + + 28 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::LogWarning(System.String) + 28 + + + + 29 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::LogWarning(System.String) + 29 + + + + 16 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext) + 16 + + + + 17 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext) + 17 + + + + 18 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext) + 18 + + + + 19 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext) + 19 + + + + 20 + + Coverlet.Collector.Utilities.TestPlatformLogger + 0 + System.Void Coverlet.Collector.Utilities.TestPlatformLogger::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext) + 20 + + + + C:\GitHub\coverlet\src\coverlet.collector\Utilities\TestPlatformLogger.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\AttachmentManager.cs + + + + + 81 + 0 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 81 + 27 + 25 + 0 + 0 + + + + + 81 + 1 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 81 + 53 + 25 + 1 + 1 + + + + + 144 + 0 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 144 + 17 + 15 + 0 + 0 + + + + + 144 + 1 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 144 + 72 + 15 + 1 + 1 + + + + + 163 + 0 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 163 + 23 + 21 + 0 + 0 + + + + + 163 + 1 + + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 163 + 84 + 21 + 1 + 1 + + + + 7 + + + 64 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendCoverageReport(System.String,System.String) + 64 + + + + 66 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendCoverageReport(System.String,System.String) + 66 + + + + 69 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendCoverageReport(System.String,System.String) + 69 + + + + 70 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendCoverageReport(System.String,System.String) + 70 + + + + 76 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 76 + + + + 79 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 79 + + + + 80 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 80 + + + + 81 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 81 + + + + 82 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 82 + + + + 83 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 83 + + + + 84 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 84 + + + + 85 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 85 + + + + 86 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 86 + + + + 87 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 87 + + + + 88 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 88 + + + + 89 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 89 + + + + 90 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 90 + + + + 91 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::Dispose() + 91 + + + + 100 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 100 + + + + 102 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 102 + + + + 103 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 103 + + + + 104 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 104 + + + + 105 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 105 + + + + 106 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 106 + + + + 108 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 108 + + + + 110 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 110 + + + + 111 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 111 + + + + 112 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 112 + + + + 113 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 113 + + + + 115 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.String Coverlet.Collector.DataCollection.AttachmentManager::SaveCoverageReport(System.String,System.String) + 115 + + + + 123 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 123 + + + + 125 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 125 + + + + 126 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 126 + + + + 127 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 127 + + + + 128 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 128 + + + + 129 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 129 + + + + 130 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 130 + + + + 131 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 131 + + + + 133 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 133 + + + + 134 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 134 + + + + 135 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 135 + + + + 136 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::OnSendFileCompleted(System.Object,System.ComponentModel.AsyncCompletedEventArgs) + 136 + + + + 143 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 143 + + + + 144 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 144 + + + + 145 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 145 + + + + 147 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 147 + + + + 148 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 148 + + + + 149 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 149 + + + + 151 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 151 + + + + 152 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 152 + + + + 153 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 153 + + + + 154 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::SendAttachment(System.String) + 154 + + + + 160 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 160 + + + + 162 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 162 + + + + 163 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 163 + + + + 164 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 164 + + + + 165 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 165 + + + + 166 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 166 + + + + 167 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 167 + + + + 168 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 168 + + + + 169 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 169 + + + + 170 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 170 + + + + 171 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 171 + + + + 172 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 172 + + + + 174 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::CleanupReportDirectory() + 174 + + + + 29 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 29 + + + + 30 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 30 + + + + 31 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 31 + + + + 32 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 32 + + + + 33 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 33 + + + + 34 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 34 + + + + 35 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 35 + + + + 36 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 36 + + + + 37 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 37 + + + + 38 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 38 + + + + 40 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 40 + + + + 41 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 41 + + + + 43 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 43 + + + + 44 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 46 + + + + 47 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 47 + + + + 48 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 49 + + + + 52 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 52 + + + + 55 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 55 + + + + 56 + + Coverlet.Collector.DataCollection.AttachmentManager + 0 + System.Void Coverlet.Collector.DataCollection.AttachmentManager::.ctor(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionContext,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.TestPlatformEqtTrace,System.String,Coverlet.Collector.Utilities.Interfaces.IFileHelper,Coverlet.Collector.Utilities.Interfaces.IDirectoryHelper,Coverlet.Collector.Utilities.Interfaces.ICountDownEvent) + 56 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\AttachmentManager.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverageManager.cs + + + + + 33 + 0 + + + Coverlet.Collector.DataCollection.CoverageManager/<>c__DisplayClass6_0 + 0 + Coverlet.Core.Abstractions.IReporter Coverlet.Collector.DataCollection.CoverageManager/<>c__DisplayClass6_0::<.ctor>b__0(System.String) + 33 + 21 + 19 + 0 + 0 + + + + + 33 + 1 + + + Coverlet.Collector.DataCollection.CoverageManager/<>c__DisplayClass6_0 + 0 + Coverlet.Core.Abstractions.IReporter Coverlet.Collector.DataCollection.CoverageManager/<>c__DisplayClass6_0::<.ctor>b__0(System.String) + 33 + 59 + 19 + 1 + 1 + + + + 8 + + + 25 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.Abstractions.IReporter[] Coverlet.Collector.DataCollection.CoverageManager::get_Reporters() + 25 + + + + 63 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 63 + + + + 65 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 65 + + + + 67 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 67 + + + + 68 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 68 + + + + 69 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 69 + + + + 70 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 70 + + + + 71 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 71 + + + + 72 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 72 + + + + 74 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::InstrumentModules() + 74 + + + + 81 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports() + 81 + + + + 83 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports() + 83 + + + + 84 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports() + 84 + + + + 85 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports() + 85 + + + + 92 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 92 + + + + 94 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 94 + + + + 95 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 95 + + + + 97 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 97 + + + + 98 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 98 + + + + 99 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 99 + + + + 100 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 100 + + + + 102 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageManager::GetCoverageResult() + 102 + + + + 110 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 110 + + + + 112 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 112 + + + + 113 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 113 + + + + 115 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 115 + + + + 116 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 116 + + + + 117 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 117 + + + + 118 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 118 + + + + 120 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Collector.DataCollection.CoverageManager::GetCoverageReports(Coverlet.Core.CoverageResult) + 120 + + + + 29 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 29 + + + + 30 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 30 + + + + 31 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 31 + + + + 32 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 32 + + + + 33 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 33 + + + + 34 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 34 + + + + 35 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 35 + + + + 36 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 36 + + + + 37 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 37 + + + + 38 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 38 + + + + 39 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 39 + + + + 40 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 40 + + + + 41 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 41 + + + + 42 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 42 + + + + 43 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 43 + + + + 44 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 46 + + + + 48 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 49 + + + + 50 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 50 + + + + 52 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 52 + + + + 53 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 53 + + + + 54 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 54 + + + + 56 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 56 + + + + 57 + + Coverlet.Collector.DataCollection.CoverageManager + 0 + System.Void Coverlet.Collector.DataCollection.CoverageManager::.ctor(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.IReporter[],Coverlet.Core.Abstractions.ILogger,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 57 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverageManager.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverageWrapper.cs + + + 9 + + + 26 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 26 + + + + 27 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 27 + + + + 28 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 28 + + + + 29 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 29 + + + + 30 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 30 + + + + 31 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 31 + + + + 32 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 32 + + + + 33 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 33 + + + + 34 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 34 + + + + 35 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 35 + + + + 36 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 36 + + + + 37 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 37 + + + + 38 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 38 + + + + 39 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 39 + + + + 40 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 40 + + + + 41 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 41 + + + + 42 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 42 + + + + 44 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 46 + + + + 47 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 47 + + + + 48 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 49 + + + + 50 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 50 + + + + 51 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 51 + + + + 52 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.Coverage Coverlet.Collector.DataCollection.CoverageWrapper::CreateCoverage(Coverlet.Collector.DataCollection.CoverletSettings,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 52 + + + + 60 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageWrapper::GetCoverageResult(Coverlet.Core.Coverage) + 60 + + + + 61 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageWrapper::GetCoverageResult(Coverlet.Core.Coverage) + 61 + + + + 62 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + Coverlet.Core.CoverageResult Coverlet.Collector.DataCollection.CoverageWrapper::GetCoverageResult(Coverlet.Core.Coverage) + 62 + + + + 70 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + System.Void Coverlet.Collector.DataCollection.CoverageWrapper::PrepareModules(Coverlet.Core.Coverage) + 70 + + + + 71 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + System.Void Coverlet.Collector.DataCollection.CoverageWrapper::PrepareModules(Coverlet.Core.Coverage) + 71 + + + + 72 + + Coverlet.Collector.DataCollection.CoverageWrapper + 0 + System.Void Coverlet.Collector.DataCollection.CoverageWrapper::PrepareModules(Coverlet.Core.Coverage) + 72 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverageWrapper.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletCoverageCollector.cs + + + + + 53 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 53 + 20 + 18 + 0 + 0 + + + + + 53 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 53 + 26 + 18 + 1 + 1 + + + + + 53 + 2 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 53 + 31 + 29 + 2 + 0 + + + + + 53 + 3 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 53 + 45 + 29 + 3 + 1 + + + + + 78 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 78 + 23 + 21 + 0 + 0 + + + + + 80 + 2 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 80 + 54 + 52 + 2 + 0 + + + + + 80 + 3 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 80 + 57 + 52 + 3 + 1 + + + + + 78 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 78 + 71 + 21 + 1 + 1 + + + + + 104 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 104 + 45 + 43 + 0 + 0 + + + + + 104 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 104 + 95 + 43 + 1 + 1 + + + + + 164 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 164 + 42 + 40 + 0 + 0 + + + + + 164 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 164 + 46 + 40 + 1 + 1 + + + + + 166 + 2 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 166 + 55 + 53 + 2 + 0 + + + + + 166 + 3 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 166 + 63 + 53 + 3 + 1 + + + + + 166 + 4 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 166 + 71 + 66 + 4 + 0 + + + + + 170 + 7 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 170 + 143 + 183 + 7 + 1 + + + + + 170 + 6 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 170 + 185 + 183 + 6 + 0 + + + + + 166 + 5 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 166 + 214 + 66 + 5 + 1 + + + + + 197 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 197 + 24 + 22 + 0 + 0 + + + + + 199 + 2 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 199 + 61 + 59 + 2 + 0 + + + + + 199 + 3 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 199 + 67 + 59 + 3 + 1 + + + + + 197 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 197 + 80 + 22 + 1 + 1 + + + + + 39 + 0 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor() + 39 + 24 + 22 + 0 + 0 + + + + + 39 + 1 + + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor() + 39 + 43 + 22 + 1 + 1 + + + + 10 + + + 52 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 52 + + + + 53 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 53 + + + + 54 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 54 + + + + 55 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 55 + + + + 56 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 56 + + + + 57 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 57 + + + + 58 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::AttachDebugger() + 58 + + + + 74 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 74 + + + + 76 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 76 + + + + 78 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 78 + + + + 79 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 79 + + + + 80 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 80 + + + + 81 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 81 + + + + 84 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 84 + + + + 85 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 85 + + + + 86 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 86 + + + + 87 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 87 + + + + 88 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 88 + + + + 91 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 91 + + + + 92 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 92 + + + + 93 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Initialize(System.Xml.XmlElement,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEvents,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionSink,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionLogger,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.DataCollectionEnvironmentContext) + 93 + + + + 100 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 100 + + + + 101 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 101 + + + + 104 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 104 + + + + 105 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 105 + + + + 106 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 106 + + + + 107 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 107 + + + + 108 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 108 + + + + 111 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 111 + + + + 112 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 112 + + + + 113 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 113 + + + + 115 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 115 + + + + 116 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::Dispose(System.Boolean) + 116 + + + + 124 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 124 + + + + 125 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 125 + + + + 128 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 128 + + + + 130 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 130 + + + + 131 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 131 + + + + 132 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 132 + + + + 135 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 135 + + + + 138 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 138 + + + + 139 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 139 + + + + 140 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 140 + + + + 143 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 143 + + + + 144 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 144 + + + + 145 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 145 + + + + 146 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 146 + + + + 147 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 147 + + + + 148 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 148 + + + + 149 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 149 + + + + 150 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionStart(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 150 + + + + 158 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 158 + + + + 160 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 160 + + + + 161 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 161 + + + + 164 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 164 + + + + 166 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 166 + + + + 167 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 167 + + + + 169 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 169 + + + + 170 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 170 + + + + 171 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 171 + + + + 172 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 172 + + + + 173 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 173 + + + + 174 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 174 + + + + 176 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 176 + + + + 177 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 177 + + + + 178 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 178 + + + + 179 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 179 + + + + 180 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 180 + + + + 181 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 181 + + + + 182 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 182 + + + + 183 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 183 + + + + 184 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 184 + + + + 185 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::OnSessionEnd(System.Object,Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionEndEventArgs) + 185 + + + + 193 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 193 + + + + 195 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 195 + + + + 196 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 196 + + + + 197 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 197 + + + + 198 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 198 + + + + 199 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 199 + + + + 200 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 200 + + + + 201 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 201 + + + + 202 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 202 + + + + 203 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 203 + + + + 205 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 205 + + + + 206 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 206 + + + + 207 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 207 + + + + 209 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetTestModules(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 209 + + + + 217 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetPropertyValueWrapper(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 217 + + + + 218 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetPropertyValueWrapper(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 218 + + + + 219 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetPropertyValueWrapper(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.SessionStartEventArgs) + 219 + + + + 222 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 222 + + + + 223 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 223 + + + + 224 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 224 + + + + 225 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 225 + + + + 226 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 226 + + + + 227 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 227 + + + + 228 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 228 + + + + 230 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 230 + + + + 232 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 232 + + + + 233 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 233 + + + + 234 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 234 + + + + 235 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 235 + + + + 236 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + Microsoft.Extensions.DependencyInjection.IServiceCollection Coverlet.Collector.DataCollection.CoverletCoverageCollector::GetDefaultServiceCollection(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String) + 236 + + + + 39 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor() + 39 + + + + 40 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor() + 40 + + + + 41 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor() + 41 + + + + 43 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 43 + + + + 44 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 46 + + + + 47 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 47 + + + + 48 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.CoverletCoverageCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletCoverageCollector::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.Interfaces.ICoverageWrapper,Coverlet.Collector.Utilities.Interfaces.ICountDownEventFactory,System.Func`4<Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger,System.String,Microsoft.Extensions.DependencyInjection.IServiceCollection>) + 49 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletCoverageCollector.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletLogger.cs + + + 11 + + + 29 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.String) + 29 + + + + 30 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.String) + 30 + + + + 31 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.String) + 31 + + + + 38 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.Exception) + 38 + + + + 39 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.Exception) + 39 + + + + 40 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogError(System.Exception) + 40 + + + + 48 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogInformation(System.String,System.Boolean) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogInformation(System.String,System.Boolean) + 49 + + + + 50 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogInformation(System.String,System.Boolean) + 50 + + + + 57 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogVerbose(System.String) + 57 + + + + 58 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogVerbose(System.String) + 58 + + + + 59 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogVerbose(System.String) + 59 + + + + 66 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogWarning(System.String) + 66 + + + + 67 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogWarning(System.String) + 67 + + + + 68 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::LogWarning(System.String) + 68 + + + + 18 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger) + 18 + + + + 19 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger) + 19 + + + + 20 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger) + 20 + + + + 21 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger) + 21 + + + + 22 + + Coverlet.Collector.DataCollection.CoverletLogger + 0 + System.Void Coverlet.Collector.DataCollection.CoverletLogger::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace,Coverlet.Collector.Utilities.TestPlatformLogger) + 22 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletLogger.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletSettings.cs + + + + + 94 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 94 + 47 + 45 + 0 + 0 + + + + + 94 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 94 + 53 + 45 + 1 + 1 + + + + + 95 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 95 + 86 + 84 + 2 + 0 + + + + + 95 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 95 + 92 + 84 + 3 + 1 + + + + + 96 + 4 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 96 + 125 + 123 + 4 + 0 + + + + + 96 + 5 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 96 + 131 + 123 + 5 + 1 + + + + + 97 + 6 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 97 + 164 + 162 + 6 + 0 + + + + + 97 + 7 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 97 + 170 + 162 + 7 + 1 + + + + + 98 + 8 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 98 + 203 + 201 + 8 + 0 + + + + + 98 + 9 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 98 + 209 + 201 + 9 + 1 + + + + + 104 + 10 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 104 + 352 + 350 + 10 + 0 + + + + + 104 + 11 + + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 104 + 358 + 350 + 11 + 1 + + + + 12 + + + 17 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::get_TestModule() + 17 + + + + 22 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_ReportFormats() + 22 + + + + 27 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_IncludeFilters() + 27 + + + + 32 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_IncludeDirectories() + 32 + + + + 37 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_ExcludeFilters() + 37 + + + + 42 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_ExcludeSourceFiles() + 42 + + + + 47 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_ExcludeAttributes() + 47 + + + + 52 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::get_MergeWith() + 52 + + + + 57 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettings::get_UseSourceLink() + 57 + + + + 62 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettings::get_SingleHit() + 62 + + + + 67 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettings::get_IncludeTestAssembly() + 67 + + + + 72 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettings::get_SkipAutoProps() + 72 + + + + 77 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettings::get_DoesNotReturnAttributes() + 77 + + + + 82 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettings::get_DeterministicReport() + 82 + + + + 87 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::get_ExcludeAssembliesWithoutSources() + 87 + + + + 90 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 90 + + + + 91 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 91 + + + + 93 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 93 + + + + 94 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 94 + + + + 95 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 95 + + + + 96 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 96 + + + + 97 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 97 + + + + 98 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 98 + + + + 99 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 99 + + + + 100 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 100 + + + + 101 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 101 + + + + 102 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 102 + + + + 103 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 103 + + + + 104 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 104 + + + + 105 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 105 + + + + 106 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 106 + + + + 108 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 108 + + + + 109 + + Coverlet.Collector.DataCollection.CoverletSettings + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettings::ToString() + 109 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletSettings.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletSettingsParser.cs + + + + + 38 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 38 + 31 + 26 + 0 + 0 + + + + + 38 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 38 + 189 + 26 + 1 + 1 + + + + + 57 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 57 + 230 + 228 + 2 + 0 + + + + + 57 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 57 + 272 + 228 + 3 + 1 + + + + + 73 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 73 + 4 + 2 + 0 + 0 + + + + + 73 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 73 + 15 + 2 + 1 + 1 + + + + + 73 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 73 + 20 + 18 + 2 + 0 + + + + + 73 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 73 + 44 + 18 + 3 + 1 + + + + + 93 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 93 + 15 + 13 + 0 + 0 + + + + + 93 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 93 + 36 + 13 + 1 + 1 + + + + + 99 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 99 + 39 + 37 + 2 + 0 + + + + + 99 + 4 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 99 + 43 + 41 + 4 + 0 + + + + + 99 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 99 + 46 + 37 + 3 + 1 + + + + + 99 + 5 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 99 + 46 + 41 + 5 + 1 + + + + + 133 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 133 + 27 + 25 + 0 + 0 + + + + + 137 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 137 + 57 + 55 + 2 + 0 + + + + + 137 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 137 + 67 + 55 + 3 + 1 + + + + + 133 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 133 + 68 + 25 + 1 + 1 + + + + + 176 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 176 + 16 + 14 + 0 + 0 + + + + + 176 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 176 + 19 + 14 + 1 + 1 + + + + + 187 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 187 + 16 + 14 + 0 + 0 + + + + + 187 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 187 + 19 + 14 + 1 + 1 + + + + + 199 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 199 + 16 + 14 + 0 + 0 + + + + + 199 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 199 + 19 + 14 + 1 + 1 + + + + + 211 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 211 + 16 + 14 + 0 + 0 + + + + + 211 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 211 + 19 + 14 + 1 + 1 + + + + + 223 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 223 + 16 + 14 + 0 + 0 + + + + + 223 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 223 + 19 + 14 + 1 + 1 + + + + + 234 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 234 + 16 + 14 + 0 + 0 + + + + + 234 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 234 + 19 + 14 + 1 + 1 + + + + + 246 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 246 + 16 + 14 + 0 + 0 + + + + + 246 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 246 + 19 + 14 + 1 + 1 + + + + + 268 + 0 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 268 + 4 + 2 + 0 + 0 + + + + + 268 + 1 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 268 + 7 + 2 + 1 + 1 + + + + + 268 + 2 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 268 + 16 + 14 + 2 + 0 + + + + + 268 + 3 + + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 268 + 20 + 14 + 3 + 1 + + + + 13 + + + 32 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 32 + + + + 33 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 33 + + + + 34 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 34 + + + + 35 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 35 + + + + 36 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 36 + + + + 38 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 38 + + + + 39 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 39 + + + + 40 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 40 + + + + 41 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 41 + + + + 42 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 42 + + + + 43 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 43 + + + + 44 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 46 + + + + 47 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 47 + + + + 48 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 48 + + + + 49 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 49 + + + + 50 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 50 + + + + 51 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 51 + + + + 52 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 52 + + + + 54 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 54 + + + + 55 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 55 + + + + 57 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 57 + + + + 58 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 58 + + + + 59 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 59 + + + + 60 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 60 + + + + 62 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 62 + + + + 63 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + Coverlet.Collector.DataCollection.CoverletSettings Coverlet.Collector.DataCollection.CoverletSettingsParser::Parse(System.Xml.XmlElement,System.Collections.Generic.IEnumerable`1<System.String>) + 63 + + + + 71 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 71 + + + + 73 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 73 + + + + 74 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 74 + + + + 75 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 75 + + + + 76 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 76 + + + + 82 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 82 + + + + 83 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseTestModule(System.Collections.Generic.IEnumerable`1<System.String>) + 83 + + + + 91 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 91 + + + + 92 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 92 + + + + 93 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 93 + + + + 94 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 94 + + + + 95 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 95 + + + + 96 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 96 + + + + 97 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 97 + + + + 99 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 99 + + + + 100 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseReportFormats(System.Xml.XmlElement) + 100 + + + + 108 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeFilters(System.Xml.XmlElement) + 108 + + + + 109 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeFilters(System.Xml.XmlElement) + 109 + + + + 110 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeFilters(System.Xml.XmlElement) + 110 + + + + 111 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeFilters(System.Xml.XmlElement) + 111 + + + + 119 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeDirectories(System.Xml.XmlElement) + 119 + + + + 120 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeDirectories(System.Xml.XmlElement) + 120 + + + + 121 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeDirectories(System.Xml.XmlElement) + 121 + + + + 122 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeDirectories(System.Xml.XmlElement) + 122 + + + + 130 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 130 + + + + 131 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 131 + + + + 133 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 133 + + + + 134 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 134 + + + + 135 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 135 + + + + 136 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 136 + + + + 137 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 137 + + + + 138 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 138 + + + + 139 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 139 + + + + 140 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 140 + + + + 141 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 141 + + + + 143 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 143 + + + + 144 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeFilters(System.Xml.XmlElement) + 144 + + + + 152 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeSourceFiles(System.Xml.XmlElement) + 152 + + + + 153 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeSourceFiles(System.Xml.XmlElement) + 153 + + + + 154 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeSourceFiles(System.Xml.XmlElement) + 154 + + + + 155 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeSourceFiles(System.Xml.XmlElement) + 155 + + + + 163 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAttributes(System.Xml.XmlElement) + 163 + + + + 164 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAttributes(System.Xml.XmlElement) + 164 + + + + 165 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAttributes(System.Xml.XmlElement) + 165 + + + + 166 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAttributes(System.Xml.XmlElement) + 166 + + + + 174 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 174 + + + + 175 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 175 + + + + 176 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 176 + + + + 177 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseMergeWith(System.Xml.XmlElement) + 177 + + + + 185 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 185 + + + + 186 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 186 + + + + 187 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 187 + + + + 188 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 188 + + + + 189 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseUseSourceLink(System.Xml.XmlElement) + 189 + + + + 197 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 197 + + + + 198 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 198 + + + + 199 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 199 + + + + 200 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 200 + + + + 201 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSingleHit(System.Xml.XmlElement) + 201 + + + + 209 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 209 + + + + 210 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 210 + + + + 211 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 211 + + + + 212 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 212 + + + + 213 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDeterministicReport(System.Xml.XmlElement) + 213 + + + + 221 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 221 + + + + 222 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 222 + + + + 223 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 223 + + + + 224 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseExcludeAssembliesWithoutSources(System.Xml.XmlElement) + 224 + + + + 232 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 232 + + + + 233 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 233 + + + + 234 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 234 + + + + 235 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 235 + + + + 236 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseIncludeTestAssembly(System.Xml.XmlElement) + 236 + + + + 244 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 244 + + + + 245 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 245 + + + + 246 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 246 + + + + 247 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 247 + + + + 248 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Boolean Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseSkipAutoProps(System.Xml.XmlElement) + 248 + + + + 256 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDoesNotReturnAttributes(System.Xml.XmlElement) + 256 + + + + 257 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDoesNotReturnAttributes(System.Xml.XmlElement) + 257 + + + + 258 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDoesNotReturnAttributes(System.Xml.XmlElement) + 258 + + + + 259 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::ParseDoesNotReturnAttributes(System.Xml.XmlElement) + 259 + + + + 267 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 267 + + + + 268 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 268 + + + + 269 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.String[] Coverlet.Collector.DataCollection.CoverletSettingsParser::SplitElement(System.Xml.XmlElement) + 269 + + + + 20 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Void Coverlet.Collector.DataCollection.CoverletSettingsParser::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace) + 20 + + + + 21 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Void Coverlet.Collector.DataCollection.CoverletSettingsParser::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace) + 21 + + + + 22 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Void Coverlet.Collector.DataCollection.CoverletSettingsParser::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace) + 22 + + + + 23 + + Coverlet.Collector.DataCollection.CoverletSettingsParser + 0 + System.Void Coverlet.Collector.DataCollection.CoverletSettingsParser::.ctor(Coverlet.Collector.Utilities.TestPlatformEqtTrace) + 23 + + + + C:\GitHub\coverlet\src\coverlet.collector\DataCollection\CoverletSettingsParser.cs + + + + C:\GitHub\coverlet\src\coverlet.collector\InProcDataCollection\CoverletInProcDataCollector.cs + + + + + 24 + 0 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 24 + 20 + 18 + 0 + 0 + + + + + 24 + 1 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 24 + 26 + 18 + 1 + 1 + + + + + 24 + 2 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 24 + 31 + 29 + 2 + 0 + + + + + 24 + 3 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 24 + 45 + 29 + 3 + 1 + + + + + 33 + 0 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 33 + 20 + 18 + 0 + 0 + + + + + 33 + 1 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 33 + 26 + 18 + 1 + 1 + + + + + 33 + 2 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 33 + 31 + 29 + 2 + 0 + + + + + 33 + 3 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 33 + 40 + 29 + 3 + 1 + + + + + 58 + 5 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 58 + 20 + 329 + 5 + 1 + + + + + 61 + 0 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 61 + 43 + 41 + 0 + 0 + + + + + 61 + 1 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 61 + 49 + 41 + 1 + 1 + + + + + 76 + 2 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 76 + 253 + 251 + 2 + 0 + + + + + 76 + 3 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 76 + 317 + 251 + 3 + 1 + + + + + 58 + 4 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 58 + 334 + 329 + 4 + 0 + + + + + 94 + 5 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 94 + 14 + 94 + 5 + 1 + + + + + 96 + 0 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 96 + 37 + 35 + 0 + 0 + + + + + 96 + 1 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 96 + 71 + 35 + 1 + 1 + + + + + 96 + 2 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 96 + 76 + 74 + 2 + 0 + + + + + 96 + 3 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 96 + 85 + 74 + 3 + 1 + + + + + 94 + 4 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 94 + 96 + 94 + 4 + 0 + + + + + 107 + 6 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 107 + 122 + 117 + 6 + 0 + + + + + 114 + 8 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 114 + 179 + 177 + 8 + 0 + + + + + 117 + 11 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 117 + 208 + 244 + 11 + 1 + + + + + 117 + 10 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 117 + 246 + 244 + 10 + 0 + + + + + 114 + 9 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 114 + 247 + 177 + 9 + 1 + + + + + 107 + 7 + + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 107 + 272 + 117 + 7 + 1 + + + + 14 + + + 23 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 23 + + + + 24 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 24 + + + + 25 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 25 + + + + 26 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 26 + + + + 27 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 27 + + + + 28 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 28 + + + + 29 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::AttachDebugger() + 29 + + + + 32 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 32 + + + + 33 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 33 + + + + 34 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 34 + + + + 35 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 35 + + + + 36 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 36 + + + + 37 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::EnableExceptionLog() + 37 + + + + 40 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 40 + + + + 41 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 41 + + + + 42 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 42 + + + + 44 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 44 + + + + 45 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 45 + + + + 46 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::Initialize(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.IDataCollectionSink) + 46 + + + + 49 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestCaseEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestCaseEndArgs) + 49 + + + + 50 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestCaseEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestCaseEndArgs) + 50 + + + + 53 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestCaseStart(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestCaseStartArgs) + 53 + + + + 54 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestCaseStart(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestCaseStartArgs) + 54 + + + + 57 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 57 + + + + 58 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 58 + + + + 59 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 59 + + + + 60 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 60 + + + + 61 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 61 + + + + 62 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 62 + + + + 63 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 63 + + + + 67 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 67 + + + + 68 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 68 + + + + 69 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 69 + + + + 70 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 70 + + + + 71 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 71 + + + + 72 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 72 + + + + 73 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 73 + + + + 74 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 74 + + + + 75 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 75 + + + + 76 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 76 + + + + 77 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 77 + + + + 78 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 78 + + + + 79 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 79 + + + + 80 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 80 + + + + 82 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 82 + + + + 83 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 83 + + + + 84 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionEnd(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionEndArgs) + 84 + + + + 87 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionStart(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionStartArgs) + 87 + + + + 88 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Void Coverlet.Collector.DataCollection.CoverletInProcDataCollector::TestSessionStart(Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector.TestSessionStartArgs) + 88 + + + + 91 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 91 + + + + 93 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 93 + + + + 94 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 94 + + + + 95 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 95 + + + + 96 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 96 + + + + 97 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 97 + + + + 98 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 98 + + + + 99 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 99 + + + + 101 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 101 + + + + 103 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 103 + + + + 105 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 105 + + + + 106 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 106 + + + + 107 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 107 + + + + 108 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 108 + + + + 109 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 109 + + + + 110 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 110 + + + + 111 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 111 + + + + 112 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 112 + + + + 114 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 114 + + + + 115 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 115 + + + + 116 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 116 + + + + 117 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 117 + + + + 118 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 118 + + + + 119 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 119 + + + + 120 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 120 + + + + 121 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 121 + + + + 123 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 123 + + + + 124 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 124 + + + + 126 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 126 + + + + 128 + + Coverlet.Collector.DataCollection.CoverletInProcDataCollector + 0 + System.Type Coverlet.Collector.DataCollection.CoverletInProcDataCollector::GetInstrumentationClass(System.Reflection.Assembly) + 128 + + + + C:\GitHub\coverlet\src\coverlet.collector\InProcDataCollection\CoverletInProcDataCollector.cs + + + + + + 0 + 40 + false + 40 + + + 0 + 41 + false + 41 + + + 0 + 41 + false + 41 + + + 0 + 0 + true + 41 + + + 0 + 42 + false + 42 + + + 0 + 43 + false + 43 + + + 0 + 44 + false + 44 + + + 0 + 45 + false + 45 + + + 0 + 1 + true + 41 + + + 0 + 46 + false + 46 + + + 0 + 55 + false + 55 + + + 0 + 56 + false + 56 + + + 0 + 57 + false + 57 + + + 0 + 58 + false + 58 + + + 0 + 59 + false + 59 + + + 0 + 60 + false + 60 + + + 0 + 67 + false + 67 + + + 0 + 68 + false + 68 + + + 0 + 69 + false + 69 + + + 0 + 76 + false + 76 + + + 0 + 77 + false + 77 + + + 0 + 78 + false + 78 + + + 0 + 85 + false + 85 + + + 0 + 86 + false + 86 + + + 0 + 87 + false + 87 + + + 0 + 94 + false + 94 + + + 0 + 95 + false + 95 + + + 0 + 96 + false + 96 + + + 0 + 103 + false + 103 + + + 0 + 104 + false + 104 + + + 0 + 105 + false + 105 + + + 0 + 112 + false + 112 + + + 0 + 113 + false + 113 + + + 0 + 114 + false + 114 + + + 0 + 121 + false + 121 + + + 0 + 122 + false + 122 + + + 0 + 123 + false + 123 + + + 0 + 32 + false + 32 + + + 0 + 32 + false + 32 + + + 0 + 33 + false + 33 + + + 1 + 13 + false + 13 + + + 1 + 14 + false + 14 + + + 1 + 15 + false + 15 + + + 1 + 30 + false + 30 + + + 1 + 31 + false + 31 + + + 1 + 32 + false + 32 + + + 1 + 35 + false + 35 + + + 1 + 36 + false + 36 + + + 1 + 37 + false + 37 + + + 1 + 0 + true + 36 + + + 1 + 38 + false + 38 + + + 1 + 40 + false + 40 + + + 1 + 1 + true + 36 + + + 1 + 23 + false + 23 + + + 1 + 24 + false + 24 + + + 1 + 25 + false + 25 + + + 1 + 26 + false + 26 + + + 1 + 27 + false + 27 + + + 2 + 10 + false + 10 + + + 2 + 11 + false + 11 + + + 2 + 12 + false + 12 + + + 2 + 14 + false + 14 + + + 2 + 15 + false + 15 + + + 2 + 16 + false + 16 + + + 3 + 14 + false + 14 + + + 3 + 15 + false + 15 + + + 3 + 16 + false + 16 + + + 3 + 20 + false + 20 + + + 3 + 21 + false + 21 + + + 3 + 22 + false + 22 + + + 3 + 26 + false + 26 + + + 3 + 27 + false + 27 + + + 3 + 28 + false + 28 + + + 4 + 14 + false + 14 + + + 4 + 15 + false + 15 + + + 4 + 16 + false + 16 + + + 4 + 20 + false + 20 + + + 4 + 21 + false + 21 + + + 4 + 22 + false + 22 + + + 5 + 13 + false + 13 + + + 5 + 14 + false + 14 + + + 5 + 22 + false + 22 + + + 5 + 23 + false + 23 + + + 5 + 24 + false + 24 + + + 5 + 32 + false + 32 + + + 5 + 33 + false + 33 + + + 5 + 34 + false + 34 + + + 5 + 42 + false + 42 + + + 5 + 43 + false + 43 + + + 5 + 44 + false + 44 + + + 5 + 52 + false + 52 + + + 5 + 53 + false + 53 + + + 5 + 54 + false + 54 + + + 6 + 27 + false + 27 + + + 6 + 28 + false + 28 + + + 6 + 29 + false + 29 + + + 6 + 16 + false + 16 + + + 6 + 17 + false + 17 + + + 6 + 18 + false + 18 + + + 6 + 19 + false + 19 + + + 6 + 20 + false + 20 + + + 7 + 64 + false + 64 + + + 7 + 66 + false + 66 + + + 7 + 69 + false + 69 + + + 7 + 70 + false + 70 + + + 7 + 76 + false + 76 + + + 7 + 79 + false + 79 + + + 7 + 80 + false + 80 + + + 7 + 81 + false + 81 + + + 7 + 82 + false + 82 + + + 7 + 0 + true + 81 + + + 7 + 83 + false + 83 + + + 7 + 84 + false + 84 + + + 7 + 85 + false + 85 + + + 7 + 1 + true + 81 + + + 7 + 86 + false + 86 + + + 7 + 87 + false + 87 + + + 7 + 88 + false + 88 + + + 7 + 89 + false + 89 + + + 7 + 90 + false + 90 + + + 7 + 91 + false + 91 + + + 7 + 100 + false + 100 + + + 7 + 102 + false + 102 + + + 7 + 103 + false + 103 + + + 7 + 104 + false + 104 + + + 7 + 105 + false + 105 + + + 7 + 106 + false + 106 + + + 7 + 108 + false + 108 + + + 7 + 110 + false + 110 + + + 7 + 111 + false + 111 + + + 7 + 112 + false + 112 + + + 7 + 113 + false + 113 + + + 7 + 115 + false + 115 + + + 7 + 123 + false + 123 + + + 7 + 125 + false + 125 + + + 7 + 126 + false + 126 + + + 7 + 127 + false + 127 + + + 7 + 128 + false + 128 + + + 7 + 129 + false + 129 + + + 7 + 130 + false + 130 + + + 7 + 131 + false + 131 + + + 7 + 133 + false + 133 + + + 7 + 134 + false + 134 + + + 7 + 135 + false + 135 + + + 7 + 136 + false + 136 + + + 7 + 143 + false + 143 + + + 7 + 144 + false + 144 + + + 7 + 145 + false + 145 + + + 7 + 0 + true + 144 + + + 7 + 147 + false + 147 + + + 7 + 148 + false + 148 + + + 7 + 149 + false + 149 + + + 7 + 151 + false + 151 + + + 7 + 1 + true + 144 + + + 7 + 152 + false + 152 + + + 7 + 153 + false + 153 + + + 7 + 154 + false + 154 + + + 7 + 160 + false + 160 + + + 7 + 162 + false + 162 + + + 7 + 163 + false + 163 + + + 7 + 164 + false + 164 + + + 7 + 0 + true + 163 + + + 7 + 165 + false + 165 + + + 7 + 166 + false + 166 + + + 7 + 167 + false + 167 + + + 7 + 168 + false + 168 + + + 7 + 1 + true + 163 + + + 7 + 169 + false + 169 + + + 7 + 170 + false + 170 + + + 7 + 171 + false + 171 + + + 7 + 172 + false + 172 + + + 7 + 174 + false + 174 + + + 7 + 36 + false + 29 + + + 7 + 37 + false + 37 + + + 7 + 38 + false + 38 + + + 7 + 40 + false + 40 + + + 7 + 41 + false + 41 + + + 7 + 43 + false + 43 + + + 7 + 44 + false + 44 + + + 7 + 45 + false + 45 + + + 7 + 46 + false + 46 + + + 7 + 47 + false + 47 + + + 7 + 48 + false + 48 + + + 7 + 49 + false + 49 + + + 7 + 52 + false + 52 + + + 7 + 55 + false + 55 + + + 7 + 56 + false + 56 + + + 8 + 25 + false + 25 + + + 8 + 63 + false + 63 + + + 8 + 65 + false + 65 + + + 8 + 67 + false + 67 + + + 8 + 68 + false + 68 + + + 8 + 69 + false + 69 + + + 8 + 70 + false + 70 + + + 8 + 71 + false + 71 + + + 8 + 72 + false + 72 + + + 8 + 74 + false + 74 + + + 8 + 81 + false + 81 + + + 8 + 83 + false + 83 + + + 8 + 84 + false + 84 + + + 8 + 85 + false + 85 + + + 8 + 92 + false + 92 + + + 8 + 94 + false + 94 + + + 8 + 95 + false + 95 + + + 8 + 97 + false + 97 + + + 8 + 98 + false + 98 + + + 8 + 99 + false + 99 + + + 8 + 100 + false + 100 + + + 8 + 102 + false + 102 + + + 8 + 110 + false + 110 + + + 8 + 112 + false + 112 + + + 8 + 113 + false + 113 + + + 8 + 115 + false + 115 + + + 8 + 116 + false + 116 + + + 8 + 117 + false + 117 + + + 8 + 118 + false + 118 + + + 8 + 120 + false + 120 + + + 8 + 44 + false + 29 + + + 8 + 45 + false + 45 + + + 8 + 46 + false + 46 + + + 8 + 49 + false + 48 + + + 8 + 50 + false + 50 + + + 8 + 52 + false + 52 + + + 8 + 53 + false + 53 + + + 8 + 54 + false + 54 + + + 8 + 56 + false + 56 + + + 8 + 57 + false + 57 + + + 8 + 42 + false + 42 + + + 8 + 113 + false + 113 + + + 8 + 31 + false + 31 + + + 8 + 32 + false + 32 + + + 8 + 33 + false + 33 + + + 8 + 34 + false + 34 + + + 8 + 0 + true + 33 + + + 8 + 35 + false + 35 + + + 8 + 36 + false + 36 + + + 8 + 39 + false + 39 + + + 8 + 1 + true + 33 + + + 8 + 40 + false + 40 + + + 8 + 42 + false + 42 + + + 9 + 26 + false + 26 + + + 9 + 42 + false + 27 + + + 9 + 51 + false + 44 + + + 9 + 52 + false + 52 + + + 9 + 60 + false + 60 + + + 9 + 61 + false + 61 + + + 9 + 62 + false + 62 + + + 9 + 70 + false + 70 + + + 9 + 71 + false + 71 + + + 9 + 72 + false + 72 + + + 10 + 52 + false + 52 + + + 10 + 53 + false + 53 + + + 10 + 0 + true + 53 + + + 10 + 1 + true + 53 + + + 10 + 54 + false + 54 + + + 10 + 2 + true + 53 + + + 10 + 55 + false + 55 + + + 10 + 56 + false + 56 + + + 10 + 57 + false + 57 + + + 10 + 58 + false + 58 + + + 10 + 3 + true + 53 + + + 10 + 74 + false + 74 + + + 10 + 76 + false + 76 + + + 10 + 78 + false + 78 + + + 10 + 79 + false + 79 + + + 10 + 0 + true + 78 + + + 10 + 80 + false + 80 + + + 10 + 2 + true + 80 + + + 10 + 3 + true + 80 + + + 10 + 81 + false + 81 + + + 10 + 84 + false + 84 + + + 10 + 1 + true + 78 + + + 10 + 85 + false + 85 + + + 10 + 86 + false + 86 + + + 10 + 87 + false + 87 + + + 10 + 88 + false + 88 + + + 10 + 91 + false + 91 + + + 10 + 92 + false + 92 + + + 10 + 93 + false + 93 + + + 10 + 100 + false + 100 + + + 10 + 101 + false + 101 + + + 10 + 104 + false + 104 + + + 10 + 105 + false + 105 + + + 10 + 0 + true + 104 + + + 10 + 106 + false + 106 + + + 10 + 107 + false + 107 + + + 10 + 108 + false + 108 + + + 10 + 111 + false + 111 + + + 10 + 1 + true + 104 + + + 10 + 112 + false + 112 + + + 10 + 113 + false + 113 + + + 10 + 115 + false + 115 + + + 10 + 116 + false + 116 + + + 10 + 124 + false + 124 + + + 10 + 125 + false + 125 + + + 10 + 128 + false + 128 + + + 10 + 130 + false + 130 + + + 10 + 131 + false + 131 + + + 10 + 132 + false + 132 + + + 10 + 135 + false + 135 + + + 10 + 140 + false + 138 + + + 10 + 143 + false + 143 + + + 10 + 144 + false + 144 + + + 10 + 145 + false + 145 + + + 10 + 146 + false + 146 + + + 10 + 147 + false + 147 + + + 10 + 148 + false + 148 + + + 10 + 149 + false + 149 + + + 10 + 150 + false + 150 + + + 10 + 158 + false + 158 + + + 10 + 160 + false + 160 + + + 10 + 161 + false + 161 + + + 10 + 164 + false + 164 + + + 10 + 0 + true + 164 + + + 10 + 1 + true + 164 + + + 10 + 166 + false + 166 + + + 10 + 2 + true + 166 + + + 10 + 3 + true + 166 + + + 10 + 167 + false + 167 + + + 10 + 4 + true + 166 + + + 10 + 169 + false + 169 + + + 10 + 170 + false + 170 + + + 10 + 170 + false + 170 + + + 10 + 170 + false + 170 + + + 10 + 7 + true + 170 + + + 10 + 171 + false + 171 + + + 10 + 172 + false + 172 + + + 10 + 173 + false + 173 + + + 10 + 170 + false + 170 + + + 10 + 6 + true + 170 + + + 10 + 174 + false + 174 + + + 10 + 176 + false + 176 + + + 10 + 5 + true + 166 + + + 10 + 177 + false + 177 + + + 10 + 178 + false + 178 + + + 10 + 179 + false + 179 + + + 10 + 180 + false + 180 + + + 10 + 181 + false + 181 + + + 10 + 182 + false + 182 + + + 10 + 183 + false + 183 + + + 10 + 184 + false + 184 + + + 10 + 185 + false + 185 + + + 10 + 193 + false + 193 + + + 10 + 195 + false + 195 + + + 10 + 196 + false + 196 + + + 10 + 197 + false + 197 + + + 10 + 198 + false + 198 + + + 10 + 0 + true + 197 + + + 10 + 201 + false + 199 + + + 10 + 2 + true + 199 + + + 10 + 3 + true + 199 + + + 10 + 202 + false + 202 + + + 10 + 203 + false + 203 + + + 10 + 1 + true + 197 + + + 10 + 205 + false + 205 + + + 10 + 206 + false + 206 + + + 10 + 207 + false + 207 + + + 10 + 209 + false + 209 + + + 10 + 217 + false + 217 + + + 10 + 218 + false + 218 + + + 10 + 219 + false + 219 + + + 10 + 222 + false + 222 + + + 10 + 223 + false + 223 + + + 10 + 224 + false + 224 + + + 10 + 225 + false + 225 + + + 10 + 226 + false + 226 + + + 10 + 227 + false + 227 + + + 10 + 228 + false + 228 + + + 10 + 230 + false + 230 + + + 10 + 233 + false + 232 + + + 10 + 234 + false + 234 + + + 10 + 235 + false + 235 + + + 10 + 236 + false + 236 + + + 10 + 39 + false + 39 + + + 10 + 0 + true + 39 + + + 10 + 1 + true + 39 + + + 10 + 40 + false + 40 + + + 10 + 41 + false + 41 + + + 10 + 43 + false + 43 + + + 10 + 44 + false + 44 + + + 10 + 45 + false + 45 + + + 10 + 46 + false + 46 + + + 10 + 47 + false + 47 + + + 10 + 48 + false + 48 + + + 10 + 49 + false + 49 + + + 10 + 228 + false + 228 + + + 10 + 233 + false + 233 + + + 11 + 29 + false + 29 + + + 11 + 30 + false + 30 + + + 11 + 31 + false + 31 + + + 11 + 38 + false + 38 + + + 11 + 39 + false + 39 + + + 11 + 40 + false + 40 + + + 11 + 48 + false + 48 + + + 11 + 49 + false + 49 + + + 11 + 50 + false + 50 + + + 11 + 57 + false + 57 + + + 11 + 58 + false + 58 + + + 11 + 59 + false + 59 + + + 11 + 66 + false + 66 + + + 11 + 67 + false + 67 + + + 11 + 68 + false + 68 + + + 11 + 18 + false + 18 + + + 11 + 19 + false + 19 + + + 11 + 20 + false + 20 + + + 11 + 21 + false + 21 + + + 11 + 22 + false + 22 + + + 12 + 17 + false + 17 + + + 12 + 17 + false + 17 + + + 12 + 22 + false + 22 + + + 12 + 22 + false + 22 + + + 12 + 27 + false + 27 + + + 12 + 27 + false + 27 + + + 12 + 32 + false + 32 + + + 12 + 32 + false + 32 + + + 12 + 37 + false + 37 + + + 12 + 37 + false + 37 + + + 12 + 42 + false + 42 + + + 12 + 42 + false + 42 + + + 12 + 47 + false + 47 + + + 12 + 47 + false + 47 + + + 12 + 52 + false + 52 + + + 12 + 52 + false + 52 + + + 12 + 57 + false + 57 + + + 12 + 57 + false + 57 + + + 12 + 62 + false + 62 + + + 12 + 62 + false + 62 + + + 12 + 67 + false + 67 + + + 12 + 67 + false + 67 + + + 12 + 72 + false + 72 + + + 12 + 72 + false + 72 + + + 12 + 77 + false + 77 + + + 12 + 77 + false + 77 + + + 12 + 82 + false + 82 + + + 12 + 82 + false + 82 + + + 12 + 87 + false + 87 + + + 12 + 87 + false + 87 + + + 12 + 90 + false + 90 + + + 12 + 91 + false + 91 + + + 12 + 93 + false + 93 + + + 12 + 94 + false + 94 + + + 12 + 0 + true + 94 + + + 12 + 1 + true + 94 + + + 12 + 95 + false + 95 + + + 12 + 2 + true + 95 + + + 12 + 3 + true + 95 + + + 12 + 96 + false + 96 + + + 12 + 4 + true + 96 + + + 12 + 5 + true + 96 + + + 12 + 97 + false + 97 + + + 12 + 6 + true + 97 + + + 12 + 7 + true + 97 + + + 12 + 98 + false + 98 + + + 12 + 8 + true + 98 + + + 12 + 9 + true + 98 + + + 12 + 99 + false + 99 + + + 12 + 100 + false + 100 + + + 12 + 101 + false + 101 + + + 12 + 102 + false + 102 + + + 12 + 103 + false + 103 + + + 12 + 104 + false + 104 + + + 12 + 10 + true + 104 + + + 12 + 11 + true + 104 + + + 12 + 105 + false + 105 + + + 12 + 106 + false + 106 + + + 12 + 108 + false + 108 + + + 12 + 109 + false + 109 + + + 13 + 32 + false + 32 + + + 13 + 36 + false + 33 + + + 13 + 38 + false + 38 + + + 13 + 39 + false + 39 + + + 13 + 0 + true + 38 + + + 13 + 40 + false + 40 + + + 13 + 41 + false + 41 + + + 13 + 42 + false + 42 + + + 13 + 43 + false + 43 + + + 13 + 44 + false + 44 + + + 13 + 45 + false + 45 + + + 13 + 46 + false + 46 + + + 13 + 47 + false + 47 + + + 13 + 48 + false + 48 + + + 13 + 49 + false + 49 + + + 13 + 50 + false + 50 + + + 13 + 51 + false + 51 + + + 13 + 52 + false + 52 + + + 13 + 54 + false + 54 + + + 13 + 1 + true + 38 + + + 13 + 55 + false + 55 + + + 13 + 57 + false + 57 + + + 13 + 58 + false + 58 + + + 13 + 2 + true + 57 + + + 13 + 59 + false + 59 + + + 13 + 60 + false + 60 + + + 13 + 62 + false + 62 + + + 13 + 3 + true + 57 + + + 13 + 63 + false + 63 + + + 13 + 71 + false + 71 + + + 13 + 73 + false + 73 + + + 13 + 0 + true + 73 + + + 13 + 1 + true + 73 + + + 13 + 74 + false + 74 + + + 13 + 2 + true + 73 + + + 13 + 75 + false + 75 + + + 13 + 76 + false + 76 + + + 13 + 82 + false + 82 + + + 13 + 3 + true + 73 + + + 13 + 83 + false + 83 + + + 13 + 91 + false + 91 + + + 13 + 92 + false + 92 + + + 13 + 93 + false + 93 + + + 13 + 94 + false + 94 + + + 13 + 0 + true + 93 + + + 13 + 95 + false + 95 + + + 13 + 96 + false + 96 + + + 13 + 97 + false + 97 + + + 13 + 99 + false + 99 + + + 13 + 1 + true + 93 + + + 13 + 2 + true + 99 + + + 13 + 4 + true + 99 + + + 13 + 3 + true + 99 + + + 13 + 5 + true + 99 + + + 13 + 100 + false + 100 + + + 13 + 108 + false + 108 + + + 13 + 109 + false + 109 + + + 13 + 110 + false + 110 + + + 13 + 111 + false + 111 + + + 13 + 119 + false + 119 + + + 13 + 120 + false + 120 + + + 13 + 121 + false + 121 + + + 13 + 122 + false + 122 + + + 13 + 130 + false + 130 + + + 13 + 131 + false + 131 + + + 13 + 133 + false + 133 + + + 13 + 134 + false + 134 + + + 13 + 0 + true + 133 + + + 13 + 135 + false + 135 + + + 13 + 136 + false + 136 + + + 13 + 137 + false + 137 + + + 13 + 138 + false + 138 + + + 13 + 2 + true + 137 + + + 13 + 139 + false + 139 + + + 13 + 140 + false + 140 + + + 13 + 141 + false + 141 + + + 13 + 3 + true + 137 + + + 13 + 143 + false + 143 + + + 13 + 1 + true + 133 + + + 13 + 144 + false + 144 + + + 13 + 152 + false + 152 + + + 13 + 153 + false + 153 + + + 13 + 154 + false + 154 + + + 13 + 155 + false + 155 + + + 13 + 163 + false + 163 + + + 13 + 164 + false + 164 + + + 13 + 165 + false + 165 + + + 13 + 166 + false + 166 + + + 13 + 174 + false + 174 + + + 13 + 175 + false + 175 + + + 13 + 176 + false + 176 + + + 13 + 0 + true + 176 + + + 13 + 1 + true + 176 + + + 13 + 177 + false + 177 + + + 13 + 185 + false + 185 + + + 13 + 186 + false + 186 + + + 13 + 187 + false + 187 + + + 13 + 0 + true + 187 + + + 13 + 1 + true + 187 + + + 13 + 188 + false + 188 + + + 13 + 189 + false + 189 + + + 13 + 197 + false + 197 + + + 13 + 198 + false + 198 + + + 13 + 199 + false + 199 + + + 13 + 0 + true + 199 + + + 13 + 1 + true + 199 + + + 13 + 200 + false + 200 + + + 13 + 201 + false + 201 + + + 13 + 209 + false + 209 + + + 13 + 210 + false + 210 + + + 13 + 211 + false + 211 + + + 13 + 0 + true + 211 + + + 13 + 1 + true + 211 + + + 13 + 212 + false + 212 + + + 13 + 213 + false + 213 + + + 13 + 221 + false + 221 + + + 13 + 222 + false + 222 + + + 13 + 223 + false + 223 + + + 13 + 0 + true + 223 + + + 13 + 1 + true + 223 + + + 13 + 224 + false + 224 + + + 13 + 232 + false + 232 + + + 13 + 233 + false + 233 + + + 13 + 234 + false + 234 + + + 13 + 0 + true + 234 + + + 13 + 1 + true + 234 + + + 13 + 235 + false + 235 + + + 13 + 236 + false + 236 + + + 13 + 244 + false + 244 + + + 13 + 245 + false + 245 + + + 13 + 246 + false + 246 + + + 13 + 0 + true + 246 + + + 13 + 1 + true + 246 + + + 13 + 247 + false + 247 + + + 13 + 248 + false + 248 + + + 13 + 256 + false + 256 + + + 13 + 257 + false + 257 + + + 13 + 258 + false + 258 + + + 13 + 259 + false + 259 + + + 13 + 267 + false + 267 + + + 13 + 268 + false + 268 + + + 13 + 0 + true + 268 + + + 13 + 1 + true + 268 + + + 13 + 2 + true + 268 + + + 13 + 3 + true + 268 + + + 13 + 269 + false + 269 + + + 13 + 20 + false + 20 + + + 13 + 21 + false + 21 + + + 13 + 22 + false + 22 + + + 13 + 23 + false + 23 + + + 13 + 268 + false + 268 + + + 13 + 268 + false + 268 + + + 14 + 23 + false + 23 + + + 14 + 24 + false + 24 + + + 14 + 0 + true + 24 + + + 14 + 1 + true + 24 + + + 14 + 25 + false + 25 + + + 14 + 2 + true + 24 + + + 14 + 26 + false + 26 + + + 14 + 27 + false + 27 + + + 14 + 28 + false + 28 + + + 14 + 29 + false + 29 + + + 14 + 3 + true + 24 + + + 14 + 32 + false + 32 + + + 14 + 33 + false + 33 + + + 14 + 0 + true + 33 + + + 14 + 1 + true + 33 + + + 14 + 34 + false + 34 + + + 14 + 2 + true + 33 + + + 14 + 35 + false + 35 + + + 14 + 36 + false + 36 + + + 14 + 37 + false + 37 + + + 14 + 3 + true + 33 + + + 14 + 40 + false + 40 + + + 14 + 41 + false + 41 + + + 14 + 42 + false + 42 + + + 14 + 44 + false + 44 + + + 14 + 45 + false + 45 + + + 14 + 46 + false + 46 + + + 14 + 49 + false + 49 + + + 14 + 50 + false + 50 + + + 14 + 53 + false + 53 + + + 14 + 54 + false + 54 + + + 14 + 57 + false + 57 + + + 14 + 58 + false + 58 + + + 14 + 58 + false + 58 + + + 14 + 58 + false + 58 + + + 14 + 5 + true + 58 + + + 14 + 59 + false + 59 + + + 14 + 60 + false + 60 + + + 14 + 61 + false + 61 + + + 14 + 62 + false + 62 + + + 14 + 0 + true + 61 + + + 14 + 63 + false + 63 + + + 14 + 1 + true + 61 + + + 14 + 67 + false + 67 + + + 14 + 68 + false + 68 + + + 14 + 69 + false + 69 + + + 14 + 70 + false + 70 + + + 14 + 71 + false + 71 + + + 14 + 72 + false + 72 + + + 14 + 73 + false + 73 + + + 14 + 74 + false + 74 + + + 14 + 75 + false + 75 + + + 14 + 76 + false + 76 + + + 14 + 77 + false + 77 + + + 14 + 2 + true + 76 + + + 14 + 78 + false + 78 + + + 14 + 79 + false + 79 + + + 14 + 80 + false + 80 + + + 14 + 82 + false + 82 + + + 14 + 3 + true + 76 + + + 14 + 83 + false + 83 + + + 14 + 58 + false + 58 + + + 14 + 84 + false + 84 + + + 14 + 4 + true + 58 + + + 14 + 87 + false + 87 + + + 14 + 88 + false + 88 + + + 14 + 91 + false + 91 + + + 14 + 93 + false + 93 + + + 14 + 94 + false + 94 + + + 14 + 94 + false + 94 + + + 14 + 94 + false + 94 + + + 14 + 5 + true + 94 + + + 14 + 95 + false + 95 + + + 14 + 97 + false + 96 + + + 14 + 0 + true + 96 + + + 14 + 1 + true + 96 + + + 14 + 98 + false + 98 + + + 14 + 2 + true + 96 + + + 14 + 99 + false + 99 + + + 14 + 101 + false + 101 + + + 14 + 3 + true + 96 + + + 14 + 94 + false + 94 + + + 14 + 103 + false + 103 + + + 14 + 4 + true + 94 + + + 14 + 105 + false + 105 + + + 14 + 106 + false + 106 + + + 14 + 107 + false + 107 + + + 14 + 108 + false + 108 + + + 14 + 6 + true + 107 + + + 14 + 109 + false + 109 + + + 14 + 111 + false + 110 + + + 14 + 112 + false + 112 + + + 14 + 114 + false + 114 + + + 14 + 115 + false + 115 + + + 14 + 8 + true + 114 + + + 14 + 116 + false + 116 + + + 14 + 117 + false + 117 + + + 14 + 117 + false + 117 + + + 14 + 117 + false + 117 + + + 14 + 11 + true + 117 + + + 14 + 118 + false + 118 + + + 14 + 119 + false + 119 + + + 14 + 120 + false + 120 + + + 14 + 117 + false + 117 + + + 14 + 121 + false + 121 + + + 14 + 10 + true + 117 + + + 14 + 123 + false + 123 + + + 14 + 9 + true + 114 + + + 14 + 124 + false + 124 + + + 14 + 126 + false + 126 + + + 14 + 7 + true + 107 + + + 14 + 128 + false + 128 + + + C:\Users\bertk\AppData\Local\Temp\coverlet.collector_d78227cd-9f82-40be-a157-b9c17f1833bc + coverlet.collector + C:\GitHub\coverlet\test\coverlet.collector.tests\bin\Debug\net6.0\coverlet.collector.dll + {"documents":{"C:\\GitHub\\coverlet\\*":"https://raw.githubusercontent.com/Bertk/coverlet/a0ad0b1b27a8f6e54f34fbb0c9d6a9be375ed833/*"}} + + + + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c::<SkipGeneratedBackingFieldAssignment>b__27_0(Mono.Cecil.FieldDefinition) + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2::<SkipGeneratedBranchesForExceptionHandlers>b__1(System.Int32) + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass21_0::<BuildPointsForBranch>b__0(Mono.Cecil.Cil.Instruction) + Coverlet.Core.Symbols.BranchPoint Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass22_0::<BuildPointsForSwitchCases>b__0(System.Collections.Generic.List`1<System.Int32>) + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass30_1::<SkipBranchGeneratedFinallyBlock>b__7(System.Collections.Generic.KeyValuePair`2<Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint>) + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass31_0::<GetOffsetOfNextEndfinally>b__1(Mono.Cecil.Cil.Instruction) + System.String Coverlet.Core.Reporters.CoberturaReporter/<>c::<GetBasePaths>b__7_1(System.Linq.IGrouping`2<System.String,System.String>) + System.Void Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0::<GetBasePaths>b__5(System.ValueTuple`2<System.String,System.Int32>) + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Instrumentation.Instrumenter/<>c::<PrepareAttributes>b__34_0(System.String) + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + System.Void Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass16_0::<RestoreOriginalModule>b__1() + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass7_0::<GetCoverableModules>b__1(System.String) + + + + C:\GitHub\coverlet\src\coverlet.core\Coverage.cs + + + + + 103 + 0 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 103 + 55 + 53 + 0 + 0 + + + + + 103 + 1 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 103 + 61 + 53 + 1 + 1 + + + + + 104 + 2 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 104 + 93 + 91 + 2 + 0 + + + + + 104 + 3 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 104 + 99 + 91 + 3 + 1 + + + + + 105 + 4 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 105 + 131 + 129 + 4 + 0 + + + + + 105 + 5 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 105 + 137 + 129 + 5 + 1 + + + + + 107 + 6 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 107 + 175 + 173 + 6 + 0 + + + + + 107 + 7 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 107 + 179 + 173 + 7 + 1 + + + + + 108 + 8 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 108 + 227 + 225 + 8 + 0 + + + + + 108 + 9 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 108 + 231 + 225 + 9 + 1 + + + + + 110 + 19 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 110 + 269 + 587 + 19 + 1 + + + + + 112 + 10 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 112 + 299 + 297 + 10 + 0 + + + + + 112 + 11 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 112 + 327 + 297 + 11 + 1 + + + + + 112 + 12 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 112 + 334 + 332 + 12 + 0 + + + + + 112 + 13 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 112 + 368 + 332 + 13 + 1 + + + + + 128 + 14 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 128 + 434 + 429 + 14 + 0 + + + + + 136 + 16 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 136 + 480 + 478 + 16 + 0 + + + + + 136 + 17 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 136 + 524 + 478 + 17 + 1 + + + + + 128 + 15 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 128 + 578 + 429 + 15 + 1 + + + + + 110 + 18 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 110 + 592 + 587 + 18 + 0 + + + + + 164 + 19 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 164 + 32 + 1693 + 19 + 1 + + + + + 167 + 17 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 167 + 74 + 1617 + 17 + 1 + + + + + 170 + 7 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 170 + 109 + 691 + 7 + 1 + + + + + 172 + 0 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 172 + 144 + 139 + 0 + 0 + + + + + 174 + 2 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 174 + 170 + 165 + 2 + 0 + + + + + 176 + 4 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 176 + 193 + 191 + 4 + 0 + + + + + 176 + 5 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 176 + 260 + 191 + 5 + 1 + + + + + 174 + 3 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 174 + 375 + 165 + 3 + 1 + + + + + 172 + 1 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 172 + 522 + 139 + 1 + 1 + + + + + 170 + 6 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 170 + 696 + 691 + 6 + 0 + + + + + 203 + 15 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 203 + 738 + 1587 + 15 + 1 + + + + + 205 + 8 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 205 + 773 + 768 + 8 + 0 + + + + + 207 + 10 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 207 + 799 + 794 + 10 + 0 + + + + + 209 + 12 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 209 + 822 + 820 + 12 + 0 + + + + + 209 + 13 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 209 + 931 + 820 + 13 + 1 + + + + + 207 + 11 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 207 + 1121 + 794 + 11 + 1 + + + + + 205 + 9 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 205 + 1343 + 768 + 9 + 1 + + + + + 203 + 14 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 203 + 1592 + 1587 + 14 + 0 + + + + + 167 + 16 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 167 + 1622 + 1617 + 16 + 0 + + + + + 164 + 18 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 164 + 1698 + 1693 + 18 + 0 + + + + + 253 + 39 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 253 + 1731 + 2160 + 39 + 1 + + + + + 255 + 37 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 255 + 1761 + 2130 + 37 + 1 + + + + + 257 + 35 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 257 + 1791 + 2100 + 35 + 1 + + + + + 261 + 20 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 261 + 1827 + 1825 + 20 + 0 + + + + + 261 + 21 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 261 + 1833 + 1825 + 21 + 1 + + + + + 266 + 33 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 266 + 1853 + 2070 + 33 + 1 + + + + + 268 + 31 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 268 + 1888 + 2040 + 31 + 1 + + + + + 270 + 22 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 270 + 1917 + 1915 + 22 + 0 + + + + + 274 + 24 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 274 + 1957 + 1955 + 24 + 0 + + + + + 274 + 25 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 274 + 1960 + 1955 + 25 + 1 + + + + + 281 + 26 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 281 + 1985 + 1983 + 26 + 0 + + + + + 281 + 27 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 281 + 1993 + 1983 + 27 + 1 + + + + + 286 + 28 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 286 + 2015 + 2013 + 28 + 0 + + + + + 286 + 29 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 286 + 2031 + 2013 + 29 + 1 + + + + + 270 + 23 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 270 + 2032 + 1915 + 23 + 1 + + + + + 268 + 30 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 268 + 2045 + 2040 + 30 + 0 + + + + + 266 + 32 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 266 + 2075 + 2070 + 32 + 0 + + + + + 257 + 34 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 257 + 2105 + 2100 + 34 + 0 + + + + + 255 + 36 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 255 + 2135 + 2130 + 36 + 0 + + + + + 253 + 38 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 253 + 2165 + 2160 + 38 + 0 + + + + + 298 + 40 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 298 + 2195 + 2190 + 40 + 0 + + + + + 300 + 47 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 300 + 2210 + 2345 + 47 + 1 + + + + + 302 + 45 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 302 + 2237 + 2318 + 45 + 1 + + + + + 304 + 43 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 304 + 2258 + 2291 + 43 + 1 + + + + + 304 + 42 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 304 + 2293 + 2291 + 42 + 0 + + + + + 302 + 44 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 302 + 2320 + 2318 + 44 + 0 + + + + + 300 + 46 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 300 + 2350 + 2345 + 46 + 0 + + + + + 298 + 41 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 298 + 2368 + 2190 + 41 + 1 + + + + + 314 + 48 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2439 + 2437 + 48 + 0 + + + + + 314 + 50 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2457 + 2455 + 50 + 0 + + + + + 314 + 49 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2481 + 2437 + 49 + 1 + + + + + 314 + 51 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2481 + 2455 + 51 + 1 + + + + + 314 + 52 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2488 + 2486 + 52 + 0 + + + + + 314 + 53 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + 2528 + 2486 + 53 + 1 + + + + + 325 + 3 + + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 325 + 16 + 54 + 3 + 1 + + + + + 327 + 0 + + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 327 + 41 + 39 + 0 + 0 + + + + + 327 + 1 + + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 327 + 46 + 39 + 1 + 1 + + + + + 325 + 2 + + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 325 + 56 + 54 + 2 + 0 + + + + + 337 + 9 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 337 + 14 + 194 + 9 + 1 + + + + + 339 + 0 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 339 + 40 + 38 + 0 + 0 + + + + + 339 + 1 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 339 + 46 + 38 + 1 + 1 + + + + + 344 + 7 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 344 + 62 + 167 + 7 + 1 + + + + + 346 + 5 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 346 + 94 + 140 + 5 + 1 + + + + + 348 + 2 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 348 + 120 + 118 + 2 + 0 + + + + + 348 + 3 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 348 + 132 + 118 + 3 + 1 + + + + + 346 + 4 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 346 + 142 + 140 + 4 + 0 + + + + + 344 + 6 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 344 + 169 + 167 + 6 + 0 + + + + + 337 + 8 + + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 337 + 199 + 194 + 8 + 0 + + + + + 360 + 51 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 360 + 19 + 1225 + 51 + 1 + + + + + 362 + 0 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 362 + 54 + 52 + 0 + 0 + + + + + 362 + 1 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 362 + 125 + 52 + 1 + 1 + + + + + 373 + 2 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 373 + 155 + 153 + 2 + 0 + + + + + 373 + 3 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 373 + 166 + 153 + 3 + 1 + + + + + 373 + 4 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 373 + 173 + 171 + 4 + 0 + + + + + 377 + 7 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 377 + 222 + 262 + 7 + 1 + + + + + 377 + 6 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 377 + 264 + 262 + 6 + 0 + + + + + 373 + 5 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 373 + 282 + 171 + 5 + 1 + + + + + 385 + 31 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 385 + 301 + 675 + 31 + 1 + + + + + 387 + 8 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 387 + 337 + 335 + 8 + 0 + + + + + 387 + 9 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 387 + 365 + 335 + 9 + 1 + + + + + 387 + 10 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 387 + 372 + 370 + 10 + 0 + + + + + 387 + 11 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 387 + 378 + 370 + 11 + 1 + + + + + 392 + 12 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 392 + 395 + 393 + 12 + 0 + + + + + 392 + 13 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 392 + 421 + 393 + 13 + 1 + + + + + 392 + 29 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 392 + 438 + 647 + 29 + 1 + + + + + 394 + 14 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 394 + 459 + 457 + 14 + 0 + + + + + 394 + 15 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 394 + 471 + 457 + 15 + 1 + + + + + 394 + 16 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 394 + 481 + 476 + 16 + 0 + + + + + 396 + 18 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 396 + 503 + 501 + 18 + 0 + + + + + 396 + 19 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 396 + 526 + 501 + 19 + 1 + + + + + 396 + 20 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 396 + 533 + 531 + 20 + 0 + + + + + 400 + 27 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 400 + 545 + 635 + 27 + 1 + + + + + 403 + 22 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 403 + 565 + 563 + 22 + 0 + + + + + 403 + 23 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 403 + 584 + 563 + 23 + 1 + + + + + 400 + 24 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 400 + 610 + 608 + 24 + 0 + + + + + 400 + 25 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 400 + 619 + 608 + 25 + 1 + + + + + 400 + 26 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 400 + 637 + 635 + 26 + 0 + + + + + 396 + 21 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 396 + 638 + 531 + 21 + 1 + + + + + 394 + 17 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 394 + 639 + 476 + 17 + 1 + + + + + 392 + 28 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 392 + 652 + 647 + 28 + 0 + + + + + 385 + 30 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 385 + 680 + 675 + 30 + 0 + + + + + 418 + 49 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 418 + 762 + 1079 + 49 + 1 + + + + + 424 + 33 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 424 + 818 + 811 + 33 + 1 + + + + + 427 + 34 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 427 + 823 + 821 + 34 + 0 + + + + + 427 + 35 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 427 + 827 + 821 + 35 + 1 + + + + + 429 + 36 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 429 + 847 + 845 + 36 + 0 + + + + + 434 + 38 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 434 + 913 + 911 + 38 + 0 + + + + + 434 + 39 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 434 + 925 + 911 + 39 + 1 + + + + + 429 + 37 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 429 + 931 + 845 + 37 + 1 + + + + + 439 + 47 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 439 + 943 + 1059 + 47 + 1 + + + + + 441 + 40 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 441 + 954 + 952 + 40 + 0 + + + + + 441 + 41 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 441 + 958 + 952 + 41 + 1 + + + + + 441 + 42 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 441 + 971 + 969 + 42 + 0 + + + + + 441 + 43 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 441 + 974 + 969 + 43 + 1 + + + + + 449 + 44 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 449 + 1022 + 1020 + 44 + 0 + + + + + 449 + 45 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 449 + 1034 + 1020 + 45 + 1 + + + + + 439 + 46 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 439 + 1061 + 1059 + 46 + 0 + + + + + 424 + 32 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 424 + 1063 + 811 + 32 + 0 + + + + + 418 + 48 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 418 + 1084 + 1079 + 48 + 0 + + + + + 360 + 50 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 360 + 1230 + 1225 + 50 + 0 + + + + + 470 + 0 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 470 + 16 + 14 + 0 + 0 + + + + + 470 + 1 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 470 + 25 + 14 + 1 + 1 + + + + + 478 + 17 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 478 + 51 + 412 + 17 + 1 + + + + + 481 + 3 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 481 + 98 + 91 + 3 + 1 + + + + + 484 + 4 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 484 + 133 + 131 + 4 + 0 + + + + + 484 + 5 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 484 + 178 + 131 + 5 + 1 + + + + + 484 + 15 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 484 + 204 + 382 + 15 + 1 + + + + + 491 + 6 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 491 + 253 + 251 + 6 + 0 + + + + + 493 + 9 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 493 + 293 + 289 + 9 + 1 + + + + + 491 + 7 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 491 + 312 + 251 + 7 + 1 + + + + + 499 + 10 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 499 + 327 + 325 + 10 + 0 + + + + + 499 + 11 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 499 + 340 + 325 + 11 + 1 + + + + + 505 + 12 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 505 + 361 + 359 + 12 + 0 + + + + + 505 + 13 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 505 + 374 + 359 + 13 + 1 + + + + + 493 + 8 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 493 + 375 + 289 + 8 + 0 + + + + + 484 + 14 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 484 + 387 + 382 + 14 + 0 + + + + + 481 + 2 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 481 + 405 + 91 + 2 + 0 + + + + + 478 + 16 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 478 + 417 + 412 + 16 + 0 + + + + + 513 + 18 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 513 + 447 + 445 + 18 + 0 + + + + + 513 + 19 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 513 + 450 + 445 + 19 + 1 + + + + + 518 + 20 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 518 + 495 + 493 + 20 + 0 + + + + + 518 + 21 + + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 518 + 512 + 493 + 21 + 1 + + + + + 72 + 0 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 72 + 25 + 23 + 0 + 0 + + + + + 72 + 1 + + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 72 + 39 + 23 + 1 + 1 + + + + 0 + + + 21 + + Coverlet.Core.CoverageParameters + 0 + System.String Coverlet.Core.CoverageParameters::get_Module() + 21 + + + + 23 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_IncludeFilters() + 23 + + + + 25 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_IncludeDirectories() + 25 + + + + 27 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_ExcludeFilters() + 27 + + + + 29 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_ExcludedSourceFiles() + 29 + + + + 31 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_ExcludeAttributes() + 31 + + + + 33 + + Coverlet.Core.CoverageParameters + 0 + System.Boolean Coverlet.Core.CoverageParameters::get_IncludeTestAssembly() + 33 + + + + 35 + + Coverlet.Core.CoverageParameters + 0 + System.Boolean Coverlet.Core.CoverageParameters::get_SingleHit() + 35 + + + + 37 + + Coverlet.Core.CoverageParameters + 0 + System.String Coverlet.Core.CoverageParameters::get_MergeWith() + 37 + + + + 39 + + Coverlet.Core.CoverageParameters + 0 + System.Boolean Coverlet.Core.CoverageParameters::get_UseSourceLink() + 39 + + + + 41 + + Coverlet.Core.CoverageParameters + 0 + System.String[] Coverlet.Core.CoverageParameters::get_DoesNotReturnAttributes() + 41 + + + + 43 + + Coverlet.Core.CoverageParameters + 0 + System.Boolean Coverlet.Core.CoverageParameters::get_SkipAutoProps() + 43 + + + + 45 + + Coverlet.Core.CoverageParameters + 0 + System.Boolean Coverlet.Core.CoverageParameters::get_DeterministicReport() + 45 + + + + 47 + + Coverlet.Core.CoverageParameters + 0 + System.String Coverlet.Core.CoverageParameters::get_ExcludeAssembliesWithoutSources() + 47 + + + + 61 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::get_Identifier() + 61 + + + + 100 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 100 + + + + 101 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 101 + + + + 103 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 103 + + + + 104 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 104 + + + + 105 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 105 + + + + 107 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 107 + + + + 108 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 108 + + + + 110 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 110 + + + + 111 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 111 + + + + 112 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 112 + + + + 113 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 113 + + + + 114 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 114 + + + + 115 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 115 + + + + 116 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 116 + + + + 119 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 119 + + + + 120 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 120 + + + + 121 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 121 + + + + 122 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 122 + + + + 123 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 123 + + + + 124 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 124 + + + + 125 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 125 + + + + 126 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 126 + + + + 128 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 128 + + + + 129 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 129 + + + + 130 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 130 + + + + 134 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 134 + + + + 135 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 135 + + + + 136 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 136 + + + + 137 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 137 + + + + 138 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 138 + + + + 139 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 139 + + + + 140 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 140 + + + + 141 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 141 + + + + 142 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 142 + + + + 143 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 143 + + + + 144 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 144 + + + + 145 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 145 + + + + 146 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 146 + + + + 147 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 147 + + + + 148 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 148 + + + + 150 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 150 + + + + 151 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 151 + + + + 152 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 152 + + + + 153 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 153 + + + + 154 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 154 + + + + 155 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 155 + + + + 156 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 156 + + + + 157 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.Coverage::PrepareModules() + 157 + + + + 160 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 160 + + + + 161 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 161 + + + + 163 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 163 + + + + 164 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 164 + + + + 165 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 165 + + + + 166 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 166 + + + + 167 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 167 + + + + 168 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 168 + + + + 170 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 170 + + + + 171 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 171 + + + + 172 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 172 + + + + 173 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 173 + + + + 174 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 174 + + + + 175 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 175 + + + + 176 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 176 + + + + 177 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 177 + + + + 178 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 178 + + + + 179 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 179 + + + + 181 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 181 + + + + 182 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 182 + + + + 183 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 183 + + + + 184 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 184 + + + + 185 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 185 + + + + 187 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 187 + + + + 188 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 188 + + + + 189 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 189 + + + + 190 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 190 + + + + 191 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 191 + + + + 192 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 192 + + + + 194 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 194 + + + + 195 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 195 + + + + 196 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 196 + + + + 197 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 197 + + + + 198 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 198 + + + + 199 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 199 + + + + 200 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 200 + + + + 203 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 203 + + + + 204 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 204 + + + + 205 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 205 + + + + 206 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 206 + + + + 207 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 207 + + + + 208 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 208 + + + + 209 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 209 + + + + 210 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 210 + + + + 211 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 211 + + + + 212 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 212 + + + + 213 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 213 + + + + 214 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 214 + + + + 216 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 216 + + + + 217 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 217 + + + + 218 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 218 + + + + 219 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 219 + + + + 220 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 220 + + + + 221 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 221 + + + + 222 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 222 + + + + 224 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 224 + + + + 225 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 225 + + + + 226 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 226 + + + + 227 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 227 + + + + 228 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 228 + + + + 229 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 229 + + + + 230 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 230 + + + + 231 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 231 + + + + 233 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 233 + + + + 234 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 234 + + + + 235 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 235 + + + + 236 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 236 + + + + 237 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 237 + + + + 238 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 238 + + + + 239 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 239 + + + + 240 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 240 + + + + 241 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 241 + + + + 242 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 242 + + + + 244 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 244 + + + + 245 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 245 + + + + 246 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 246 + + + + 252 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 252 + + + + 253 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 253 + + + + 254 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 254 + + + + 255 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 255 + + + + 256 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 256 + + + + 257 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 257 + + + + 258 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 258 + + + + 261 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 261 + + + + 262 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 262 + + + + 263 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 263 + + + + 266 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 266 + + + + 267 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 267 + + + + 268 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 268 + + + + 269 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 269 + + + + 270 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 270 + + + + 271 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 271 + + + + 272 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 272 + + + + 274 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 274 + + + + 275 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 275 + + + + 276 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 276 + + + + 279 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 279 + + + + 281 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 281 + + + + 282 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 282 + + + + 283 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 283 + + + + 284 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 284 + + + + 286 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 286 + + + + 287 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 287 + + + + 288 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 288 + + + + 289 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 289 + + + + 290 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 290 + + + + 291 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 291 + + + + 292 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 292 + + + + 293 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 293 + + + + 294 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 294 + + + + 295 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 295 + + + + 298 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 298 + + + + 299 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 299 + + + + 300 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 300 + + + + 301 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 301 + + + + 302 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 302 + + + + 303 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 303 + + + + 304 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 304 + + + + 305 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 305 + + + + 306 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 306 + + + + 307 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 307 + + + + 308 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 308 + + + + 309 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 309 + + + + 310 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 310 + + + + 312 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 312 + + + + 314 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 314 + + + + 315 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 315 + + + + 316 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 316 + + + + 317 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 317 + + + + 318 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 318 + + + + 320 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 320 + + + + 321 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.CoverageResult Coverlet.Core.Coverage::GetCoverageResult() + 321 + + + + 324 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 324 + + + + 325 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 325 + + + + 326 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 326 + + + + 327 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 327 + + + + 328 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 328 + + + + 329 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 329 + + + + 331 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 331 + + + + 332 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 332 + + + + 333 + + Coverlet.Core.Coverage + 0 + System.Boolean Coverlet.Core.Coverage::BranchInCompilerGeneratedClass(System.String) + 333 + + + + 336 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 336 + + + + 337 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 337 + + + + 338 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 338 + + + + 339 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 339 + + + + 340 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 340 + + + + 341 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 341 + + + + 344 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 344 + + + + 345 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 345 + + + + 346 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 346 + + + + 347 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 347 + + + + 348 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 348 + + + + 349 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 349 + + + + 350 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 350 + + + + 352 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 352 + + + + 353 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 353 + + + + 354 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 354 + + + + 355 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 355 + + + + 356 + + Coverlet.Core.Coverage + 0 + Coverlet.Core.Method Coverlet.Core.Coverage::GetMethodWithSameLineInSameDocument(Coverlet.Core.Classes,System.String,System.Int32) + 356 + + + + 359 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 359 + + + + 360 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 360 + + + + 361 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 361 + + + + 362 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 362 + + + + 363 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 363 + + + + 368 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 368 + + + + 369 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 369 + + + + 372 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 372 + + + + 373 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 373 + + + + 374 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 374 + + + + 375 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 375 + + + + 376 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 376 + + + + 377 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 377 + + + + 378 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 378 + + + + 379 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 379 + + + + 380 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 380 + + + + 381 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 381 + + + + 385 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 385 + + + + 386 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 386 + + + + 387 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 387 + + + + 388 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 388 + + + + 389 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 389 + + + + 392 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 392 + + + + 393 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 393 + + + + 394 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 394 + + + + 395 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 395 + + + + 396 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 396 + + + + 397 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 397 + + + + 398 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 398 + + + + 399 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 399 + + + + 402 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 402 + + + + 403 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 403 + + + + 404 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 404 + + + + 401 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 401 + + + + 400 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 400 + + + + 405 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 405 + + + + 406 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 406 + + + + 407 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 407 + + + + 408 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 408 + + + + 410 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 410 + + + + 411 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 411 + + + + 412 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 412 + + + + 413 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 413 + + + + 414 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 414 + + + + 418 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 418 + + + + 419 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 419 + + + + 420 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 420 + + + + 421 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 421 + + + + 422 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 422 + + + + 424 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 424 + + + + 425 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 425 + + + + 427 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 427 + + + + 429 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 429 + + + + 430 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 430 + + + + 431 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 431 + + + + 432 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 432 + + + + 434 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 434 + + + + 435 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 435 + + + + 436 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 436 + + + + 438 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 438 + + + + 439 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 439 + + + + 440 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 440 + + + + 441 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 441 + + + + 442 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 442 + + + + 443 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 443 + + + + 446 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 446 + + + + 447 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 447 + + + + 449 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 449 + + + + 450 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 450 + + + + 451 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 451 + + + + 452 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 452 + + + + 453 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 453 + + + + 454 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 454 + + + + 457 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 457 + + + + 458 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 458 + + + + 459 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 459 + + + + 460 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 460 + + + + 461 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 461 + + + + 462 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 462 + + + + 463 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 463 + + + + 464 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 464 + + + + 465 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 465 + + + + 466 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::CalculateCoverage() + 466 + + + + 469 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 469 + + + + 470 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 470 + + + + 471 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 471 + + + + 472 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 472 + + + + 475 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 475 + + + + 476 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 476 + + + + 478 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 478 + + + + 479 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 479 + + + + 480 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 480 + + + + 481 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 481 + + + + 483 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 483 + + + + 484 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 484 + + + + 485 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 485 + + + + 486 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 486 + + + + 487 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 487 + + + + 488 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 488 + + + + 491 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 491 + + + + 492 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 492 + + + + 493 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 493 + + + + 494 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 494 + + + + 496 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 496 + + + + 497 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 497 + + + + 499 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 499 + + + + 500 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 500 + + + + 501 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 501 + + + + 502 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 502 + + + + 503 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 503 + + + + 505 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 505 + + + + 506 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 506 + + + + 507 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 507 + + + + 508 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 508 + + + + 509 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 509 + + + + 510 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 510 + + + + 511 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 511 + + + + 513 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 513 + + + + 515 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 515 + + + + 516 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 516 + + + + 518 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 518 + + + + 519 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 519 + + + + 520 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 520 + + + + 523 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 523 + + + + 524 + + Coverlet.Core.Coverage + 0 + System.String Coverlet.Core.Coverage::GetSourceLinkUrl(System.Collections.Generic.Dictionary`2<System.String,System.String>,System.String) + 524 + + + + 63 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 63 + + + + 64 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 64 + + + + 65 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 65 + + + + 66 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 66 + + + + 67 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 67 + + + + 68 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 68 + + + + 69 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 69 + + + + 70 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 70 + + + + 71 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 71 + + + + 72 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 72 + + + + 73 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 73 + + + + 74 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 74 + + + + 75 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 75 + + + + 76 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 76 + + + + 77 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 77 + + + + 78 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 78 + + + + 79 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 79 + + + + 80 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 80 + + + + 81 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 81 + + + + 83 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 83 + + + + 84 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 84 + + + + 85 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 85 + + + + 86 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 86 + + + + 87 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 87 + + + + 88 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 88 + + + + 89 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 89 + + + + 90 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 90 + + + + 91 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 91 + + + + 92 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 92 + + + + 93 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 93 + + + + 94 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + + + + 95 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 95 + + + + 96 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 96 + + + + 97 + + Coverlet.Core.Coverage + 0 + System.Void Coverlet.Core.Coverage::.ctor(Coverlet.Core.CoveragePrepareResult,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator) + 97 + + + + C:\GitHub\coverlet\src\coverlet.core\Coverage.cs + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageDetails.cs + + + + + 19 + 0 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 19 + 10 + 8 + 0 + 0 + + + + + 19 + 1 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 19 + 14 + 8 + 1 + 1 + + + + + 19 + 2 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 19 + 26 + 24 + 2 + 0 + + + + + 19 + 3 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 19 + 38 + 24 + 3 + 1 + + + + + 20 + 4 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 20 + 46 + 44 + 4 + 0 + + + + + 20 + 5 + + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 20 + 87 + 44 + 5 + 1 + + + + 1 + + + 12 + + Coverlet.Core.CoverageDetails + 0 + Coverlet.Core.Modules Coverlet.Core.CoverageDetails::get_Modules() + 12 + + + + 13 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Covered() + 13 + + + + 14 + + Coverlet.Core.CoverageDetails + 0 + System.Int32 Coverlet.Core.CoverageDetails::get_Total() + 14 + + + + 18 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 18 + + + + 19 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 19 + + + + 20 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 20 + + + + 21 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_Percent() + 21 + + + + 26 + + Coverlet.Core.CoverageDetails + 0 + System.Double Coverlet.Core.CoverageDetails::get_AverageModulePercent() + 26 + + + + 27 + + Coverlet.Core.CoverageDetails + 0 + System.Void Coverlet.Core.CoverageDetails::set_AverageModulePercent(System.Double) + 27 + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageDetails.cs + + + + C:\GitHub\coverlet\src\coverlet.core\CoveragePrepareResult.cs + + + 2 + + + 17 + + Coverlet.Core.CoveragePrepareResult + 0 + System.String Coverlet.Core.CoveragePrepareResult::get_Identifier() + 17 + + + + 19 + + Coverlet.Core.CoveragePrepareResult + 0 + System.String Coverlet.Core.CoveragePrepareResult::get_ModuleOrDirectory() + 19 + + + + 21 + + Coverlet.Core.CoveragePrepareResult + 0 + System.String Coverlet.Core.CoveragePrepareResult::get_MergeWith() + 21 + + + + 23 + + Coverlet.Core.CoveragePrepareResult + 0 + System.Boolean Coverlet.Core.CoveragePrepareResult::get_UseSourceLink() + 23 + + + + 25 + + Coverlet.Core.CoveragePrepareResult + 0 + Coverlet.Core.Instrumentation.InstrumenterResult[] Coverlet.Core.CoveragePrepareResult::get_Results() + 25 + + + + 27 + + Coverlet.Core.CoveragePrepareResult + 0 + Coverlet.Core.CoverageParameters Coverlet.Core.CoveragePrepareResult::get_Parameters() + 27 + + + + 30 + + Coverlet.Core.CoveragePrepareResult + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.CoveragePrepareResult::Deserialize(System.IO.Stream) + 30 + + + + 31 + + Coverlet.Core.CoveragePrepareResult + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.CoveragePrepareResult::Deserialize(System.IO.Stream) + 31 + + + + 32 + + Coverlet.Core.CoveragePrepareResult + 0 + Coverlet.Core.CoveragePrepareResult Coverlet.Core.CoveragePrepareResult::Deserialize(System.IO.Stream) + 32 + + + + 35 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 35 + + + + 36 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 36 + + + + 37 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 37 + + + + 38 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 38 + + + + 39 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 39 + + + + 40 + + Coverlet.Core.CoveragePrepareResult + 0 + System.IO.Stream Coverlet.Core.CoveragePrepareResult::Serialize(Coverlet.Core.CoveragePrepareResult) + 40 + + + + C:\GitHub\coverlet\src\coverlet.core\CoveragePrepareResult.cs + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageResult.cs + + + + + 51 + 23 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 51 + 14 + 1147 + 23 + 1 + + + + + 53 + 0 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 53 + 53 + 51 + 0 + 0 + + + + + 53 + 1 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 53 + 86 + 51 + 1 + 1 + + + + + 59 + 21 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 59 + 106 + 1116 + 21 + 1 + + + + + 61 + 2 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 61 + 155 + 153 + 2 + 0 + + + + + 61 + 3 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 61 + 200 + 153 + 3 + 1 + + + + + 67 + 19 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 67 + 221 + 1085 + 19 + 1 + + + + + 69 + 4 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 69 + 282 + 280 + 4 + 0 + + + + + 69 + 5 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 69 + 339 + 280 + 5 + 1 + + + + + 75 + 17 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 75 + 360 + 1054 + 17 + 1 + + + + + 77 + 6 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 77 + 433 + 431 + 6 + 0 + + + + + 77 + 7 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 77 + 502 + 431 + 7 + 1 + + + + + 83 + 11 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 83 + 528 + 808 + 11 + 1 + + + + + 85 + 8 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 85 + 618 + 616 + 8 + 0 + + + + + 85 + 9 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 85 + 701 + 616 + 9 + 1 + + + + + 83 + 10 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 83 + 813 + 808 + 10 + 0 + + + + + 95 + 15 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 95 + 855 + 1023 + 15 + 1 + + + + + 99 + 12 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 99 + 971 + 969 + 12 + 0 + + + + + 99 + 13 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 99 + 988 + 969 + 13 + 1 + + + + + 95 + 14 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 95 + 1028 + 1023 + 14 + 0 + + + + + 75 + 16 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 75 + 1059 + 1054 + 16 + 0 + + + + + 67 + 18 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 67 + 1090 + 1085 + 18 + 0 + + + + + 59 + 20 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 59 + 1121 + 1116 + 20 + 0 + + + + + 51 + 22 + + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 51 + 1152 + 1147 + 22 + 0 + + + + + 117 + 1 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 117 + 30 + 8 + 1 + 1 + + + + + 121 + 4 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 121 + 49 + 47 + 4 + 0 + + + + + 121 + 5 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 121 + 84 + 47 + 5 + 1 + + + + + 124 + 7 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 124 + 100 + 192 + 7 + 1 + + + + + 124 + 6 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 124 + 194 + 192 + 6 + 0 + + + + + 117 + 2 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 117 + 217 + 8 + 2 + 2 + + + + + 117 + 3 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 117 + 292 + 8 + 3 + 3 + + + + + 117 + 0 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 117 + 367 + 8 + 0 + 0 + + + + + 161 + 0 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 161 + 12 + 10 + 0 + 0 + + + + + 161 + 1 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 161 + 18 + 10 + 1 + 1 + + + + + 161 + 2 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 161 + 23 + 21 + 2 + 0 + + + + + 161 + 3 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 161 + 30 + 21 + 3 + 1 + + + + + 167 + 4 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 167 + 41 + 39 + 4 + 0 + + + + + 167 + 5 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 167 + 47 + 39 + 5 + 1 + + + + + 167 + 6 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 167 + 54 + 52 + 6 + 0 + + + + + 167 + 7 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 167 + 61 + 52 + 7 + 1 + + + + + 173 + 8 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 173 + 72 + 70 + 8 + 0 + + + + + 173 + 9 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 173 + 79 + 70 + 9 + 1 + + + + + 173 + 10 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 173 + 86 + 84 + 10 + 0 + + + + + 173 + 11 + + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 173 + 93 + 84 + 11 + 1 + + + + + 98 + 0 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 19 + 17 + 0 + 0 + + + + + 98 + 2 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 38 + 36 + 2 + 0 + + + + + 98 + 4 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 57 + 55 + 4 + 0 + + + + + 98 + 6 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 76 + 74 + 6 + 0 + + + + + 98 + 1 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 97 + 17 + 1 + 1 + + + + + 98 + 3 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 97 + 36 + 3 + 1 + + + + + 98 + 5 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 97 + 55 + 5 + 1 + + + + + 98 + 7 + + + Coverlet.Core.CoverageResult/<>c__DisplayClass17_0 + 0 + System.Boolean Coverlet.Core.CoverageResult/<>c__DisplayClass17_0::<Merge>b__0(Coverlet.Core.BranchInfo) + 98 + 97 + 74 + 7 + 1 + + + + 3 + + + 13 + + Coverlet.Core.BranchInfo + 0 + System.Int32 Coverlet.Core.BranchInfo::get_Line() + 13 + + + + 14 + + Coverlet.Core.BranchInfo + 0 + System.Int32 Coverlet.Core.BranchInfo::get_Offset() + 14 + + + + 15 + + Coverlet.Core.BranchInfo + 0 + System.Int32 Coverlet.Core.BranchInfo::get_EndOffset() + 15 + + + + 16 + + Coverlet.Core.BranchInfo + 0 + System.Int32 Coverlet.Core.BranchInfo::get_Path() + 16 + + + + 17 + + Coverlet.Core.BranchInfo + 0 + System.UInt32 Coverlet.Core.BranchInfo::get_Ordinal() + 17 + + + + 18 + + Coverlet.Core.BranchInfo + 0 + System.Int32 Coverlet.Core.BranchInfo::get_Hits() + 18 + + + + 27 + + Coverlet.Core.Method + 0 + System.Void Coverlet.Core.Method::.ctor() + 27 + + + + 28 + + Coverlet.Core.Method + 0 + System.Void Coverlet.Core.Method::.ctor() + 28 + + + + 29 + + Coverlet.Core.Method + 0 + System.Void Coverlet.Core.Method::.ctor() + 29 + + + + 30 + + Coverlet.Core.Method + 0 + System.Void Coverlet.Core.Method::.ctor() + 30 + + + + 31 + + Coverlet.Core.Method + 0 + System.Void Coverlet.Core.Method::.ctor() + 31 + + + + 42 + + Coverlet.Core.CoverageResult + 0 + System.String Coverlet.Core.CoverageResult::get_Identifier() + 42 + + + + 43 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Modules Coverlet.Core.CoverageResult::get_Modules() + 43 + + + + 44 + + Coverlet.Core.CoverageResult + 0 + System.Collections.Generic.List`1<Coverlet.Core.Instrumentation.InstrumenterResult> Coverlet.Core.CoverageResult::get_InstrumentedResults() + 44 + + + + 45 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.CoverageParameters Coverlet.Core.CoverageResult::get_Parameters() + 45 + + + + 50 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 50 + + + + 51 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 51 + + + + 52 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 52 + + + + 53 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 53 + + + + 54 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 54 + + + + 55 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 55 + + + + 56 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 56 + + + + 58 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 58 + + + + 59 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 59 + + + + 60 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 60 + + + + 61 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 61 + + + + 62 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 62 + + + + 63 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 63 + + + + 64 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 64 + + + + 66 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 66 + + + + 67 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 67 + + + + 68 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 68 + + + + 69 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 69 + + + + 70 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 70 + + + + 71 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 71 + + + + 72 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 72 + + + + 74 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 74 + + + + 75 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 75 + + + + 76 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 76 + + + + 77 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 77 + + + + 78 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 78 + + + + 79 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 79 + + + + 80 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 80 + + + + 82 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 82 + + + + 83 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 83 + + + + 84 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 84 + + + + 85 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 85 + + + + 86 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 86 + + + + 87 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 87 + + + + 88 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 88 + + + + 90 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 90 + + + + 91 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 91 + + + + 92 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 92 + + + + 93 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 93 + + + + 95 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 95 + + + + 96 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 96 + + + + 97 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 97 + + + + 98 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 98 + + + + 99 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 99 + + + + 100 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 100 + + + + 102 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 102 + + + + 103 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 103 + + + + 104 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 104 + + + + 105 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 105 + + + + 106 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 106 + + + + 107 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 107 + + + + 108 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 108 + + + + 109 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 109 + + + + 110 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 110 + + + + 111 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 111 + + + + 112 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::Merge(Coverlet.Core.Modules) + 112 + + + + 115 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 115 + + + + 116 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 116 + + + + 117 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 117 + + + + 120 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 120 + + + + 121 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 121 + + + + 122 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 122 + + + + 124 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 124 + + + + 125 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 125 + + + + 126 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 126 + + + + 127 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 127 + + + + 128 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 128 + + + + 130 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 130 + + + + 131 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 131 + + + + 132 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 132 + + + + 133 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 133 + + + + 135 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 135 + + + + 136 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 136 + + + + 137 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 137 + + + + 138 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 138 + + + + 140 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 140 + + + + 141 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 141 + + + + 142 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 142 + + + + 144 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 144 + + + + 145 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 145 + + + + 146 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 146 + + + + 147 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 147 + + + + 149 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 149 + + + + 150 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 150 + + + + 151 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 151 + + + + 154 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 154 + + + + 155 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::GetThresholdTypesBelowThreshold(Coverlet.Core.CoverageSummary,System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdStatistic) + 155 + + + + 160 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 160 + + + + 161 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 161 + + + + 162 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 162 + + + + 163 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 163 + + + + 164 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 164 + + + + 165 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 165 + + + + 167 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 167 + + + + 168 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 168 + + + + 169 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 169 + + + + 170 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 170 + + + + 171 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 171 + + + + 173 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 173 + + + + 174 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 174 + + + + 175 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 175 + + + + 176 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 176 + + + + 177 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 177 + + + + 179 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 179 + + + + 180 + + Coverlet.Core.CoverageResult + 0 + Coverlet.Core.Enums.ThresholdTypeFlags Coverlet.Core.CoverageResult::CompareThresholdValues(System.Collections.Generic.Dictionary`2<Coverlet.Core.Enums.ThresholdTypeFlags,System.Double>,Coverlet.Core.Enums.ThresholdTypeFlags,System.Double,System.Double,System.Double) + 180 + + + + 47 + + Coverlet.Core.CoverageResult + 0 + System.Void Coverlet.Core.CoverageResult::.ctor() + 47 + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageResult.cs + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageSummary.cs + + + + + 23 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 23 + 17 + 93 + 1 + 1 + + + + + 23 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 23 + 95 + 93 + 0 + 0 + + + + + 35 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 35 + 17 + 88 + 1 + 1 + + + + + 35 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 35 + 90 + 88 + 0 + 0 + + + + + 47 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 47 + 17 + 88 + 1 + 1 + + + + + 47 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 47 + 90 + 88 + 0 + 0 + + + + + 61 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 61 + 38 + 36 + 0 + 0 + + + + + 61 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 61 + 45 + 36 + 1 + 1 + + + + + 64 + 3 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 64 + 56 + 141 + 3 + 1 + + + + + 64 + 2 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 64 + 143 + 141 + 2 + 0 + + + + + 86 + 0 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 86 + 14 + 12 + 0 + 0 + + + + + 86 + 1 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 86 + 22 + 12 + 1 + 1 + + + + + 92 + 5 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 92 + 39 + 107 + 5 + 1 + + + + + 94 + 2 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 94 + 73 + 71 + 2 + 0 + + + + + 94 + 3 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 94 + 78 + 71 + 3 + 1 + + + + + 92 + 4 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 92 + 109 + 107 + 4 + 0 + + + + + 102 + 7 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 102 + 142 + 179 + 7 + 1 + + + + + 102 + 6 + + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 102 + 181 + 179 + 6 + 0 + + + + + 160 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 160 + 17 + 93 + 1 + 1 + + + + + 160 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 160 + 95 + 93 + 0 + 0 + + + + + 172 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 172 + 17 + 88 + 1 + 1 + + + + + 172 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 172 + 90 + 88 + 0 + 0 + + + + + 184 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 184 + 17 + 88 + 1 + 1 + + + + + 184 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 184 + 90 + 88 + 0 + 0 + + + + + 198 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 198 + 38 + 36 + 0 + 0 + + + + + 198 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 198 + 45 + 36 + 1 + 1 + + + + + 201 + 3 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 201 + 56 + 141 + 3 + 1 + + + + + 201 + 2 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 201 + 143 + 141 + 2 + 0 + + + + + 208 + 4 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 208 + 169 + 167 + 4 + 0 + + + + + 208 + 5 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 208 + 180 + 167 + 5 + 1 + + + + + 215 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 215 + 47 + 45 + 0 + 0 + + + + + 215 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 215 + 50 + 45 + 1 + 1 + + + + + 224 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 224 + 55 + 111 + 1 + 1 + + + + + 224 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 224 + 113 + 111 + 0 + 0 + + + + + 236 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 236 + 17 + 88 + 1 + 1 + + + + + 236 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 236 + 90 + 88 + 0 + 0 + + + + + 248 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 248 + 17 + 88 + 1 + 1 + + + + + 248 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 248 + 90 + 88 + 0 + 0 + + + + + 262 + 0 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 262 + 38 + 36 + 0 + 0 + + + + + 262 + 1 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 262 + 45 + 36 + 1 + 1 + + + + + 265 + 3 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 265 + 56 + 141 + 3 + 1 + + + + + 265 + 2 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 265 + 143 + 141 + 2 + 0 + + + + + 272 + 4 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 272 + 169 + 167 + 4 + 0 + + + + + 272 + 5 + + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 272 + 180 + 167 + 5 + 1 + + + + 4 + + + 13 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 13 + + + + 14 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 14 + + + + 15 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 15 + + + + 16 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 16 + + + + 17 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 17 + + + + 18 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Lines) + 18 + + + + 21 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 21 + + + + 22 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 22 + + + + 23 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 23 + + + + 24 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 24 + + + + 25 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 25 + + + + 26 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 26 + + + + 27 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 27 + + + + 28 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 28 + + + + 29 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 29 + + + + 30 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Methods) + 30 + + + + 33 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 33 + + + + 34 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 34 + + + + 35 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 35 + + + + 36 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 36 + + + + 37 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 37 + + + + 38 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 38 + + + + 39 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 39 + + + + 40 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 40 + + + + 41 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 41 + + + + 42 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Classes) + 42 + + + + 45 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 45 + + + + 46 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 46 + + + + 47 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 47 + + + + 48 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 48 + + + + 49 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 49 + + + + 50 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 50 + + + + 51 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 51 + + + + 52 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 52 + + + + 53 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 53 + + + + 54 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Documents) + 54 + + + + 57 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 57 + + + + 58 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 58 + + + + 59 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 59 + + + + 61 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 61 + + + + 62 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 62 + + + + 64 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 64 + + + + 65 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 65 + + + + 66 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 66 + + + + 67 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 67 + + + + 68 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 68 + + + + 69 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 69 + + + + 70 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 70 + + + + 71 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 71 + + + + 72 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 72 + + + + 73 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateLineCoverage(Coverlet.Core.Modules) + 73 + + + + 76 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 76 + + + + 77 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 77 + + + + 78 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 78 + + + + 79 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 79 + + + + 80 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 80 + + + + 81 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 81 + + + + 84 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 84 + + + + 86 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 86 + + + + 87 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 87 + + + + 88 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 88 + + + + 91 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 91 + + + + 92 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 92 + + + + 93 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 93 + + + + 94 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 94 + + + + 95 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 95 + + + + 96 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 96 + + + + 97 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 97 + + + + 98 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 98 + + + + 99 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 99 + + + + 101 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 101 + + + + 102 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 102 + + + + 103 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 103 + + + + 105 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 105 + + + + 106 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 106 + + + + 107 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 107 + + + + 108 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 108 + + + + 109 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 109 + + + + 110 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 110 + + + + 111 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 111 + + + + 113 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 113 + + + + 114 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 114 + + + + 115 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateNpathComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 115 + + + + 118 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 118 + + + + 119 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 119 + + + + 120 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(System.Collections.Generic.IList`1<Coverlet.Core.BranchInfo>) + 120 + + + + 123 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Methods) + 123 + + + + 124 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Methods) + 124 + + + + 125 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Methods) + 125 + + + + 128 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Methods) + 128 + + + + 129 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Methods) + 129 + + + + 130 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Methods) + 130 + + + + 133 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Methods) + 133 + + + + 134 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Methods) + 134 + + + + 135 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Methods) + 135 + + + + 138 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Modules) + 138 + + + + 139 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Modules) + 139 + + + + 140 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Modules) + 140 + + + + 143 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Modules) + 143 + + + + 144 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Modules) + 144 + + + + 145 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMaxCyclomaticComplexity(Coverlet.Core.Modules) + 145 + + + + 148 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Modules) + 148 + + + + 149 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Modules) + 149 + + + + 150 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateMinCyclomaticComplexity(Coverlet.Core.Modules) + 150 + + + + 153 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Documents) + 153 + + + + 154 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Documents) + 154 + + + + 155 + + Coverlet.Core.CoverageSummary + 0 + System.Int32 Coverlet.Core.CoverageSummary::CalculateCyclomaticComplexity(Coverlet.Core.Documents) + 155 + + + + 158 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 158 + + + + 159 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 159 + + + + 160 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 160 + + + + 161 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 161 + + + + 162 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 162 + + + + 163 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 163 + + + + 164 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 164 + + + + 165 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 165 + + + + 166 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 166 + + + + 167 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Methods) + 167 + + + + 170 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 170 + + + + 171 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 171 + + + + 172 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 172 + + + + 173 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 173 + + + + 174 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 174 + + + + 175 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 175 + + + + 176 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 176 + + + + 177 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 177 + + + + 178 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 178 + + + + 179 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Classes) + 179 + + + + 182 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 182 + + + + 183 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 183 + + + + 184 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 184 + + + + 185 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 185 + + + + 186 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 186 + + + + 187 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 187 + + + + 188 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 188 + + + + 189 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 189 + + + + 190 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 190 + + + + 191 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Documents) + 191 + + + + 194 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 194 + + + + 195 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 195 + + + + 196 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 196 + + + + 198 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 198 + + + + 199 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 199 + + + + 201 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 201 + + + + 202 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 202 + + + + 203 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 203 + + + + 204 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 204 + + + + 205 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 205 + + + + 206 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 206 + + + + 207 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 207 + + + + 208 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 208 + + + + 209 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 209 + + + + 210 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateBranchCoverage(Coverlet.Core.Modules) + 210 + + + + 213 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 213 + + + + 214 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 214 + + + + 215 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 215 + + + + 216 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 216 + + + + 217 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 217 + + + + 218 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Lines) + 218 + + + + 221 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 221 + + + + 222 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 222 + + + + 223 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 223 + + + + 224 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 224 + + + + 225 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 225 + + + + 226 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 226 + + + + 227 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 227 + + + + 228 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 228 + + + + 229 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 229 + + + + 230 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 230 + + + + 231 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Methods) + 231 + + + + 234 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 234 + + + + 235 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 235 + + + + 236 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 236 + + + + 237 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 237 + + + + 238 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 238 + + + + 239 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 239 + + + + 240 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 240 + + + + 241 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 241 + + + + 242 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 242 + + + + 243 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Classes) + 243 + + + + 246 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 246 + + + + 247 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 247 + + + + 248 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 248 + + + + 249 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 249 + + + + 250 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 250 + + + + 251 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 251 + + + + 252 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 252 + + + + 253 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 253 + + + + 254 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 254 + + + + 255 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Documents) + 255 + + + + 258 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 258 + + + + 259 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 259 + + + + 260 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 260 + + + + 262 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 262 + + + + 263 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 263 + + + + 265 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 265 + + + + 266 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 266 + + + + 267 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 267 + + + + 268 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 268 + + + + 269 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 269 + + + + 270 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 270 + + + + 271 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 271 + + + + 272 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 272 + + + + 273 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 273 + + + + 274 + + Coverlet.Core.CoverageSummary + 0 + Coverlet.Core.CoverageDetails Coverlet.Core.CoverageSummary::CalculateMethodCoverage(Coverlet.Core.Modules) + 274 + + + + C:\GitHub\coverlet\src\coverlet.core\CoverageSummary.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Symbols\BranchPoint.cs + + + 5 + + + 18 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.Int32 Coverlet.Core.Symbols.BranchPoint::get_StartLine() + 18 + + + + 23 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.Int32 Coverlet.Core.Symbols.BranchPoint::get_Path() + 23 + + + + 28 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.UInt32 Coverlet.Core.Symbols.BranchPoint::get_Ordinal() + 28 + + + + 33 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.BranchPoint::get_OffsetPoints() + 33 + + + + 38 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.Int32 Coverlet.Core.Symbols.BranchPoint::get_Offset() + 38 + + + + 44 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.Int32 Coverlet.Core.Symbols.BranchPoint::get_EndOffset() + 44 + + + + 49 + + Coverlet.Core.Symbols.BranchPoint + 0 + System.String Coverlet.Core.Symbols.BranchPoint::get_Document() + 49 + + + + C:\GitHub\coverlet\src\coverlet.core\Symbols\BranchPoint.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Symbols\CecilSymbolHelper.cs + + + + + 31 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 31 + 10 + 76 + 3 + 1 + + + + + 33 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 33 + 57 + 55 + 0 + 0 + + + + + 33 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 33 + 62 + 55 + 1 + 1 + + + + + 31 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 31 + 78 + 76 + 2 + 0 + + + + + 50 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 50 + 19 + 17 + 0 + 0 + + + + + 50 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 50 + 27 + 17 + 1 + 1 + + + + + 50 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 50 + 32 + 30 + 2 + 0 + + + + + 52 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 52 + 53 + 101 + 7 + 1 + + + + + 54 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 54 + 87 + 85 + 4 + 0 + + + + + 54 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 54 + 93 + 85 + 5 + 1 + + + + + 52 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 52 + 103 + 101 + 6 + 0 + + + + + 50 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 50 + 121 + 30 + 3 + 1 + + + + + 66 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 66 + 19 + 17 + 0 + 0 + + + + + 66 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 66 + 27 + 17 + 1 + 1 + + + + + 66 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 66 + 32 + 30 + 2 + 0 + + + + + 68 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 68 + 53 + 101 + 7 + 1 + + + + + 70 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 70 + 87 + 85 + 4 + 0 + + + + + 70 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 70 + 93 + 85 + 5 + 1 + + + + + 68 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 68 + 103 + 101 + 6 + 0 + + + + + 66 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 66 + 121 + 30 + 3 + 1 + + + + + 82 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 82 + 24 + 22 + 0 + 0 + + + + + 82 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 82 + 32 + 22 + 1 + 1 + + + + + 87 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 87 + 83 + 81 + 2 + 0 + + + + + 89 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 89 + 104 + 155 + 7 + 1 + + + + + 91 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 91 + 142 + 140 + 4 + 0 + + + + + 91 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 91 + 147 + 140 + 5 + 1 + + + + + 89 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 89 + 157 + 155 + 6 + 0 + + + + + 87 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 87 + 175 + 81 + 3 + 1 + + + + + 110 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 35 + 33 + 0 + 0 + + + + + 110 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 72 + 33 + 1 + 1 + + + + + 110 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 72 + 67 + 2 + 0 + + + + + 110 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 109 + 104 + 4 + 0 + + + + + 110 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 140 + 138 + 6 + 0 + + + + + 110 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 158 + 138 + 7 + 1 + + + + + 110 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 158 + 156 + 8 + 0 + + + + + 110 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 189 + 187 + 10 + 0 + + + + + 110 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 207 + 156 + 9 + 1 + + + + + 110 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 207 + 205 + 12 + 0 + + + + + 110 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 241 + 239 + 14 + 0 + + + + + 110 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 272 + 270 + 16 + 0 + + + + + 110 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 67 + 3 + 1 + + + + + 110 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 104 + 5 + 1 + + + + + 110 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 187 + 11 + 1 + + + + + 110 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 205 + 13 + 1 + + + + + 110 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 239 + 15 + 1 + + + + + 110 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 270 + 17 + 1 + + + + + 110 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 280 + 278 + 18 + 0 + + + + + 110 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + 314 + 278 + 19 + 1 + + + + + 172 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 172 + 12 + 115 + 11 + 1 + + + + + 174 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 31 + 29 + 0 + 0 + + + + + 174 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 46 + 44 + 2 + 0 + + + + + 174 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 54 + 29 + 1 + 1 + + + + + 174 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 54 + 44 + 3 + 1 + + + + + 174 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 54 + 52 + 4 + 0 + + + + + 174 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 72 + 52 + 5 + 1 + + + + + 174 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 77 + 75 + 6 + 0 + + + + + 174 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + 83 + 75 + 7 + 1 + + + + + 172 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 172 + 99 + 97 + 8 + 0 + + + + + 172 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 172 + 110 + 97 + 9 + 1 + + + + + 172 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 172 + 117 + 115 + 10 + 0 + + + + + 188 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 24 + 19 + 0 + 0 + + + + + 188 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 45 + 40 + 2 + 0 + + + + + 188 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 68 + 66 + 4 + 0 + + + + + 188 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 91 + 89 + 6 + 0 + + + + + 188 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 114 + 112 + 8 + 0 + + + + + 188 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 140 + 66 + 5 + 1 + + + + + 188 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 140 + 89 + 7 + 1 + + + + + 188 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 140 + 112 + 9 + 1 + + + + + 188 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 140 + 135 + 10 + 0 + + + + + 188 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 168 + 166 + 12 + 0 + + + + + 188 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 196 + 194 + 14 + 0 + + + + + 188 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 224 + 222 + 16 + 0 + + + + + 188 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 252 + 250 + 18 + 0 + + + + + 188 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 280 + 166 + 13 + 1 + + + + + 188 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 280 + 194 + 15 + 1 + + + + + 188 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 280 + 222 + 17 + 1 + + + + + 188 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 280 + 250 + 19 + 1 + + + + + 188 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 283 + 19 + 1 + 1 + + + + + 188 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 283 + 40 + 3 + 1 + + + + + 188 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 283 + 135 + 11 + 1 + + + + + 188 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 288 + 286 + 20 + 0 + + + + + 188 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + 293 + 286 + 21 + 1 + + + + + 240 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 240 + 12 + 115 + 11 + 1 + + + + + 242 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 31 + 29 + 0 + 0 + + + + + 242 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 46 + 44 + 2 + 0 + + + + + 242 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 64 + 62 + 4 + 0 + + + + + 242 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 72 + 29 + 1 + 1 + + + + + 242 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 72 + 44 + 3 + 1 + + + + + 242 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 72 + 62 + 5 + 1 + + + + + 242 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 77 + 75 + 6 + 0 + + + + + 242 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + 83 + 75 + 7 + 1 + + + + + 240 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 240 + 99 + 97 + 8 + 0 + + + + + 240 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 240 + 110 + 97 + 9 + 1 + + + + + 240 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 240 + 117 + 115 + 10 + 0 + + + + + 277 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 73 + 68 + 0 + 0 + + + + + 277 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 94 + 92 + 2 + 0 + + + + + 277 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 130 + 128 + 4 + 0 + + + + + 277 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 166 + 164 + 6 + 0 + + + + + 277 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 202 + 68 + 1 + 1 + + + + + 277 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 202 + 92 + 3 + 1 + + + + + 277 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 202 + 128 + 5 + 1 + + + + + 277 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + 202 + 164 + 7 + 1 + + + + + 402 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 402 + 41 + 36 + 0 + 0 + + + + + 408 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 408 + 77 + 481 + 15 + 1 + + + + + 410 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 410 + 153 + 151 + 2 + 0 + + + + + 410 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 410 + 165 + 151 + 3 + 1 + + + + + 419 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 419 + 224 + 468 + 13 + 1 + + + + + 422 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 422 + 249 + 247 + 4 + 0 + + + + + 422 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 422 + 275 + 247 + 5 + 1 + + + + + 427 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 311 + 309 + 6 + 0 + + + + + 427 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 354 + 352 + 8 + 0 + + + + + 427 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 397 + 309 + 7 + 1 + + + + + 427 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 397 + 352 + 9 + 1 + + + + + 427 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 404 + 402 + 10 + 0 + + + + + 427 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + 442 + 402 + 11 + 1 + + + + + 419 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 419 + 473 + 468 + 12 + 0 + + + + + 408 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 408 + 486 + 481 + 14 + 0 + + + + + 402 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 402 + 528 + 36 + 1 + 1 + + + + + 466 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 466 + 24 + 22 + 0 + 0 + + + + + 466 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 466 + 34 + 32 + 2 + 0 + + + + + 466 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 466 + 44 + 22 + 1 + 1 + + + + + 466 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 466 + 44 + 32 + 3 + 1 + + + + + 620 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 620 + 24 + 22 + 0 + 0 + + + + + 620 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 620 + 34 + 22 + 1 + 1 + + + + + 813 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 813 + 24 + 22 + 0 + 0 + + + + + 813 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 813 + 34 + 22 + 1 + 1 + + + + + 910 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 910 + 32 + 30 + 0 + 0 + + + + + 910 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 910 + 50 + 30 + 1 + 1 + + + + + 910 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 910 + 55 + 53 + 2 + 0 + + + + + 910 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 910 + 63 + 53 + 3 + 1 + + + + + 916 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 70 + 65 + 4 + 0 + + + + + 916 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 96 + 94 + 6 + 0 + + + + + 916 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 119 + 117 + 8 + 0 + + + + + 916 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 142 + 140 + 10 + 0 + + + + + 916 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 160 + 158 + 12 + 0 + + + + + 916 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 186 + 184 + 14 + 0 + + + + + 916 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 212 + 184 + 15 + 1 + + + + + 916 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 215 + 65 + 5 + 1 + + + + + 916 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 215 + 94 + 7 + 1 + + + + + 916 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 215 + 117 + 9 + 1 + + + + + 916 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 215 + 140 + 11 + 1 + + + + + 916 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 215 + 158 + 13 + 1 + + + + + 916 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 222 + 220 + 16 + 0 + + + + + 916 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + 227 + 220 + 17 + 1 + + + + + 930 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 8 + 6 + 0 + 0 + + + + + 930 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 31 + 29 + 2 + 0 + + + + + 930 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 51 + 49 + 4 + 0 + + + + + 930 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 62 + 60 + 6 + 0 + + + + + 930 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 70 + 68 + 8 + 0 + + + + + 930 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 93 + 91 + 10 + 0 + + + + + 930 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 108 + 106 + 12 + 0 + + + + + 930 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 112 + 106 + 13 + 1 + + + + + 930 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 6 + 1 + 1 + + + + + 930 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 29 + 3 + 1 + + + + + 930 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 49 + 5 + 1 + + + + + 930 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 60 + 7 + 1 + + + + + 930 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 68 + 9 + 1 + + + + + 930 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + 121 + 91 + 11 + 1 + + + + + 938 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 938 + 35 + 33 + 0 + 0 + + + + + 938 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 938 + 44 + 33 + 1 + 1 + + + + + 947 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 947 + 85 + 83 + 2 + 0 + + + + + 947 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 947 + 98 + 83 + 3 + 1 + + + + + 948 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 948 + 105 + 103 + 4 + 0 + + + + + 948 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 948 + 118 + 103 + 5 + 1 + + + + + 957 + 47 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 957 + 187 + 736 + 47 + 1 + + + + + 961 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 961 + 206 + 204 + 6 + 0 + + + + + 961 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 961 + 240 + 204 + 7 + 1 + + + + + 968 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 968 + 248 + 246 + 8 + 0 + + + + + 968 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 968 + 257 + 246 + 9 + 1 + + + + + 974 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 974 + 265 + 263 + 10 + 0 + + + + + 976 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 976 + 275 + 273 + 12 + 0 + + + + + 976 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 976 + 284 + 273 + 13 + 1 + + + + + 976 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 976 + 291 + 289 + 14 + 0 + + + + + 976 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 976 + 297 + 289 + 15 + 1 + + + + + 974 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 974 + 298 + 263 + 11 + 1 + + + + + 982 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 982 + 311 + 309 + 16 + 0 + + + + + 982 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 982 + 317 + 309 + 17 + 1 + + + + + 987 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 987 + 330 + 328 + 18 + 0 + + + + + 987 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 987 + 336 + 328 + 19 + 1 + + + + + 992 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 992 + 344 + 342 + 20 + 0 + + + + + 994 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 362 + 360 + 22 + 0 + + + + + 994 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 372 + 370 + 24 + 0 + + + + + 994 + 26 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 382 + 380 + 26 + 0 + + + + + 994 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 392 + 360 + 23 + 1 + + + + + 994 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 392 + 370 + 25 + 1 + + + + + 994 + 27 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 392 + 380 + 27 + 1 + + + + + 994 + 28 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 399 + 397 + 28 + 0 + + + + + 994 + 29 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + 405 + 397 + 29 + 1 + + + + + 992 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 992 + 406 + 342 + 21 + 1 + + + + + 1003 + 30 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1003 + 414 + 412 + 30 + 0 + + + + + 1005 + 32 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1005 + 429 + 427 + 32 + 0 + + + + + 1005 + 33 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1005 + 435 + 427 + 33 + 1 + + + + + 1003 + 31 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1003 + 436 + 412 + 31 + 1 + + + + + 1011 + 34 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1011 + 450 + 448 + 34 + 0 + + + + + 1011 + 35 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1011 + 456 + 448 + 35 + 1 + + + + + 1016 + 36 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1016 + 475 + 473 + 36 + 0 + + + + + 1016 + 37 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1016 + 481 + 473 + 37 + 1 + + + + + 1021 + 38 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1021 + 500 + 498 + 38 + 0 + + + + + 1021 + 39 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1021 + 506 + 498 + 39 + 1 + + + + + 1030 + 40 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1030 + 545 + 543 + 40 + 0 + + + + + 1030 + 41 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1030 + 569 + 543 + 41 + 1 + + + + + 1034 + 42 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1034 + 675 + 673 + 42 + 0 + + + + + 1034 + 43 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1034 + 681 + 673 + 43 + 1 + + + + + 1039 + 44 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1039 + 715 + 713 + 44 + 0 + + + + + 1039 + 45 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1039 + 721 + 713 + 45 + 1 + + + + + 957 + 46 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 957 + 741 + 736 + 46 + 0 + + + + + 1064 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1064 + 87 + 85 + 0 + 0 + + + + + 1064 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1064 + 94 + 85 + 1 + 1 + + + + + 1079 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1079 + 157 + 155 + 2 + 0 + + + + + 1082 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1082 + 185 + 183 + 4 + 0 + + + + + 1082 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1082 + 190 + 183 + 5 + 1 + + + + + 1079 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1079 + 218 + 155 + 3 + 1 + + + + + 1090 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1090 + 236 + 234 + 6 + 0 + + + + + 1090 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1090 + 244 + 234 + 7 + 1 + + + + + 1090 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1090 + 251 + 249 + 8 + 0 + + + + + 1090 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1090 + 256 + 249 + 9 + 1 + + + + + 1105 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1105 + 85 + 83 + 0 + 0 + + + + + 1105 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1105 + 92 + 83 + 1 + 1 + + + + + 1148 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1148 + 321 + 319 + 2 + 0 + + + + + 1148 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1148 + 328 + 319 + 3 + 1 + + + + + 1148 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1148 + 335 + 333 + 4 + 0 + + + + + 1148 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1148 + 354 + 333 + 5 + 1 + + + + + 1162 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1162 + 65 + 63 + 0 + 0 + + + + + 1162 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1162 + 84 + 63 + 1 + 1 + + + + + 1181 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstruction(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1181 + 10 + 8 + 0 + 0 + + + + + 1181 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstruction(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1181 + 20 + 8 + 1 + 1 + + + + + 1226 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1226 + 14 + 12 + 0 + 0 + + + + + 1226 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1226 + 23 + 12 + 1 + 1 + + + + + 1231 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1231 + 45 + 43 + 2 + 0 + + + + + 1231 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1231 + 54 + 43 + 3 + 1 + + + + + 1238 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 64 + 62 + 4 + 0 + + + + + 1238 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 82 + 80 + 6 + 0 + + + + + 1238 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 97 + 95 + 8 + 0 + + + + + 1238 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 115 + 62 + 5 + 1 + + + + + 1238 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 115 + 80 + 7 + 1 + + + + + 1238 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 115 + 95 + 9 + 1 + + + + + 1238 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 122 + 120 + 10 + 0 + + + + + 1238 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + 131 + 120 + 11 + 1 + + + + + 1247 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1247 + 140 + 231 + 19 + 1 + + + + + 1249 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 158 + 156 + 12 + 0 + + + + + 1249 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 173 + 171 + 14 + 0 + + + + + 1249 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 195 + 171 + 15 + 1 + + + + + 1249 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 198 + 156 + 13 + 1 + + + + + 1249 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 205 + 203 + 16 + 0 + + + + + 1249 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + 215 + 203 + 17 + 1 + + + + + 1247 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1247 + 233 + 231 + 18 + 0 + + + + + 1257 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 236 + 234 + 20 + 0 + + + + + 1257 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 254 + 252 + 22 + 0 + + + + + 1257 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 269 + 267 + 24 + 0 + + + + + 1257 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 287 + 234 + 21 + 1 + + + + + 1257 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 287 + 252 + 23 + 1 + + + + + 1257 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + 287 + 267 + 25 + 1 + + + + + 1280 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 20 + 18 + 0 + 0 + + + + + 1280 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 50 + 48 + 2 + 0 + + + + + 1280 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 68 + 18 + 1 + 1 + + + + + 1280 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 68 + 48 + 3 + 1 + + + + + 1280 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 73 + 71 + 4 + 0 + + + + + 1280 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + 81 + 71 + 5 + 1 + + + + + 1296 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 102 + 97 + 6 + 0 + + + + + 1296 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 122 + 117 + 8 + 0 + + + + + 1296 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 137 + 132 + 10 + 0 + + + + + 1296 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 146 + 144 + 12 + 0 + + + + + 1296 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 159 + 144 + 13 + 1 + + + + + 1296 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 187 + 185 + 14 + 0 + + + + + 1296 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 190 + 185 + 15 + 1 + + + + + 1296 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 199 + 197 + 16 + 0 + + + + + 1296 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 202 + 197 + 17 + 1 + + + + + 1296 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 221 + 216 + 18 + 0 + + + + + 1296 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 230 + 228 + 20 + 0 + + + + + 1296 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 243 + 228 + 21 + 1 + + + + + 1296 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 251 + 249 + 22 + 0 + + + + + 1296 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 264 + 249 + 23 + 1 + + + + + 1296 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 292 + 290 + 24 + 0 + + + + + 1296 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 295 + 290 + 25 + 1 + + + + + 1296 + 26 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 304 + 302 + 26 + 0 + + + + + 1296 + 27 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 307 + 302 + 27 + 1 + + + + + 1296 + 28 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 323 + 321 + 28 + 0 + + + + + 1296 + 30 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 332 + 330 + 30 + 0 + + + + + 1296 + 31 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 336 + 330 + 31 + 1 + + + + + 1296 + 32 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 350 + 348 + 32 + 0 + + + + + 1296 + 33 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 354 + 348 + 33 + 1 + + + + + 1296 + 34 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 362 + 360 + 34 + 0 + + + + + 1296 + 35 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 366 + 360 + 35 + 1 + + + + + 1296 + 36 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 373 + 371 + 36 + 0 + + + + + 1296 + 38 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 388 + 386 + 38 + 0 + + + + + 1296 + 39 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 392 + 386 + 39 + 1 + + + + + 1296 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 97 + 7 + 1 + + + + + 1296 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 117 + 9 + 1 + + + + + 1296 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 132 + 11 + 1 + + + + + 1296 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 216 + 19 + 1 + + + + + 1296 + 29 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 321 + 29 + 1 + + + + + 1296 + 37 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 410 + 371 + 37 + 1 + + + + + 1296 + 40 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 418 + 413 + 40 + 0 + + + + + 1304 + 42 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1304 + 445 + 443 + 42 + 0 + + + + + 1304 + 43 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1304 + 470 + 443 + 43 + 1 + + + + + 1296 + 41 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + 573 + 413 + 41 + 1 + + + + + 1318 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1318 + 4 + 2 + 0 + 0 + + + + + 1318 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1318 + 15 + 2 + 1 + 1 + + + + + 1318 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1318 + 20 + 18 + 2 + 0 + + + + + 1318 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1318 + 24 + 18 + 3 + 1 + + + + + 1320 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1320 + 33 + 31 + 4 + 0 + + + + + 1320 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1320 + 41 + 31 + 5 + 1 + + + + + 1349 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 70 + 65 + 0 + 0 + + + + + 1349 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 79 + 77 + 2 + 0 + + + + + 1349 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 92 + 77 + 3 + 1 + + + + + 1349 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 100 + 98 + 4 + 0 + + + + + 1349 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 113 + 98 + 5 + 1 + + + + + 1349 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 139 + 137 + 6 + 0 + + + + + 1349 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 142 + 137 + 7 + 1 + + + + + 1349 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 151 + 149 + 8 + 0 + + + + + 1349 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 154 + 149 + 9 + 1 + + + + + 1349 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 169 + 167 + 10 + 0 + + + + + 1349 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 178 + 176 + 12 + 0 + + + + + 1349 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 182 + 176 + 13 + 1 + + + + + 1349 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 190 + 188 + 14 + 0 + + + + + 1349 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 194 + 188 + 15 + 1 + + + + + 1349 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 208 + 206 + 16 + 0 + + + + + 1349 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 258 + 65 + 1 + 1 + + + + + 1349 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 258 + 167 + 11 + 1 + + + + + 1349 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + 258 + 206 + 17 + 1 + + + + + 1366 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 22 + 17 + 0 + 0 + + + + + 1366 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 31 + 29 + 2 + 0 + + + + + 1366 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 43 + 29 + 3 + 1 + + + + + 1366 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 69 + 67 + 4 + 0 + + + + + 1366 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 72 + 67 + 5 + 1 + + + + + 1366 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 81 + 79 + 6 + 0 + + + + + 1366 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 84 + 79 + 7 + 1 + + + + + 1366 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 99 + 97 + 8 + 0 + + + + + 1366 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 108 + 106 + 10 + 0 + + + + + 1366 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 112 + 106 + 11 + 1 + + + + + 1366 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 126 + 124 + 12 + 0 + + + + + 1366 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 159 + 17 + 1 + 1 + + + + + 1366 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 159 + 97 + 9 + 1 + + + + + 1366 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + 159 + 124 + 13 + 1 + + + + + 1373 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1373 + 19 + 17 + 0 + 0 + + + + + 1373 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1373 + 26 + 17 + 1 + 1 + + + + + 1381 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1381 + 89 + 210 + 11 + 1 + + + + + 1386 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1386 + 114 + 153 + 5 + 1 + + + + + 1386 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1386 + 129 + 127 + 2 + 0 + + + + + 1386 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1386 + 148 + 127 + 3 + 1 + + + + + 1386 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1386 + 155 + 153 + 4 + 0 + + + + + 1391 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1391 + 170 + 168 + 6 + 0 + + + + + 1391 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1391 + 190 + 168 + 7 + 1 + + + + + 1391 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1391 + 197 + 195 + 8 + 0 + + + + + 1391 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1391 + 202 + 195 + 9 + 1 + + + + + 1381 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1381 + 212 + 210 + 10 + 0 + + + + + 1402 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1402 + 44 + 42 + 0 + 0 + + + + + 1402 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1402 + 51 + 42 + 1 + 1 + + + + + 1429 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1429 + 15 + 13 + 0 + 0 + + + + + 1433 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1433 + 33 + 120 + 7 + 1 + + + + + 1435 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1435 + 56 + 54 + 2 + 0 + + + + + 1435 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1435 + 75 + 54 + 3 + 1 + + + + + 1433 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1433 + 97 + 95 + 4 + 0 + + + + + 1433 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1433 + 115 + 95 + 5 + 1 + + + + + 1433 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1433 + 122 + 120 + 6 + 0 + + + + + 1429 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1429 + 123 + 13 + 1 + 1 + + + + + 1453 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1453 + 63 + 61 + 0 + 0 + + + + + 1453 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1453 + 68 + 61 + 1 + 1 + + + + + 1457 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1457 + 91 + 89 + 2 + 0 + + + + + 1457 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1457 + 116 + 89 + 3 + 1 + + + + + 1475 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1475 + 17 + 15 + 0 + 0 + + + + + 1475 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1475 + 35 + 15 + 1 + 1 + + + + + 490 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 490 + 19 + 17 + 0 + 0 + + + + + 490 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 490 + 37 + 17 + 1 + 1 + + + + + 490 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 490 + 42 + 40 + 2 + 0 + + + + + 490 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 490 + 50 + 40 + 3 + 1 + + + + + 496 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 57 + 52 + 4 + 0 + + + + + 496 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 83 + 81 + 6 + 0 + + + + + 496 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 112 + 81 + 7 + 1 + + + + + 496 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 112 + 107 + 8 + 0 + + + + + 496 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 138 + 136 + 10 + 0 + + + + + 496 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 161 + 159 + 12 + 0 + + + + + 496 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 169 + 167 + 14 + 0 + + + + + 496 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 192 + 159 + 13 + 1 + + + + + 496 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 192 + 167 + 15 + 1 + + + + + 496 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 192 + 190 + 16 + 0 + + + + + 496 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 215 + 213 + 18 + 0 + + + + + 496 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 228 + 226 + 20 + 0 + + + + + 496 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 251 + 213 + 19 + 1 + + + + + 496 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 251 + 226 + 21 + 1 + + + + + 496 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 254 + 190 + 17 + 1 + + + + + 496 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 257 + 52 + 5 + 1 + + + + + 496 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 257 + 107 + 9 + 1 + + + + + 496 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 257 + 136 + 11 + 1 + + + + + 496 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 264 + 262 + 22 + 0 + + + + + 496 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + 269 + 262 + 23 + 1 + + + + + 532 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 532 + 19 + 17 + 0 + 0 + + + + + 532 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 532 + 37 + 17 + 1 + 1 + + + + + 532 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 532 + 42 + 40 + 2 + 0 + + + + + 532 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 532 + 50 + 40 + 3 + 1 + + + + + 542 + 31 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 542 + 69 + 420 + 31 + 1 + + + + + 544 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 94 + 92 + 4 + 0 + + + + + 544 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 117 + 115 + 6 + 0 + + + + + 544 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 126 + 124 + 8 + 0 + + + + + 544 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 150 + 115 + 7 + 1 + + + + + 544 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 150 + 124 + 9 + 1 + + + + + 544 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 150 + 148 + 10 + 0 + + + + + 544 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 173 + 171 + 12 + 0 + + + + + 544 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 187 + 185 + 14 + 0 + + + + + 544 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 211 + 171 + 13 + 1 + + + + + 544 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 211 + 185 + 15 + 1 + + + + + 544 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 214 + 148 + 11 + 1 + + + + + 544 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 217 + 92 + 5 + 1 + + + + + 544 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 227 + 222 + 16 + 0 + + + + + 554 + 29 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 554 + 249 + 398 + 29 + 1 + + + + + 556 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 275 + 273 + 18 + 0 + + + + + 556 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 299 + 297 + 20 + 0 + + + + + 556 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 323 + 321 + 22 + 0 + + + + + 556 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 347 + 345 + 24 + 0 + + + + + 556 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 366 + 273 + 19 + 1 + + + + + 556 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 366 + 297 + 21 + 1 + + + + + 556 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 366 + 321 + 23 + 1 + + + + + 556 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 366 + 345 + 25 + 1 + + + + + 556 + 26 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 373 + 371 + 26 + 0 + + + + + 556 + 27 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + 378 + 371 + 27 + 1 + + + + + 554 + 28 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 554 + 403 + 398 + 28 + 0 + + + + + 544 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + 404 + 222 + 17 + 1 + + + + + 542 + 30 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 542 + 425 + 420 + 30 + 0 + + + + + 588 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 588 + 19 + 17 + 0 + 0 + + + + + 588 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 588 + 37 + 17 + 1 + 1 + + + + + 588 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 588 + 42 + 40 + 2 + 0 + + + + + 588 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 588 + 50 + 40 + 3 + 1 + + + + + 596 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 596 + 69 + 335 + 23 + 1 + + + + + 598 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 97 + 92 + 4 + 0 + + + + + 598 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 123 + 118 + 6 + 0 + + + + + 598 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 145 + 140 + 8 + 0 + + + + + 598 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 174 + 169 + 10 + 0 + + + + + 598 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 200 + 198 + 12 + 0 + + + + + 598 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 226 + 224 + 14 + 0 + + + + + 598 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 252 + 250 + 16 + 0 + + + + + 598 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 278 + 276 + 18 + 0 + + + + + 598 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 304 + 169 + 11 + 1 + + + + + 598 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 304 + 198 + 13 + 1 + + + + + 598 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 304 + 224 + 15 + 1 + + + + + 598 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 304 + 250 + 17 + 1 + + + + + 598 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 304 + 276 + 19 + 1 + + + + + 598 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 307 + 92 + 5 + 1 + + + + + 598 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 307 + 118 + 7 + 1 + + + + + 598 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 307 + 140 + 9 + 1 + + + + + 598 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 314 + 312 + 20 + 0 + + + + + 598 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + 319 + 312 + 21 + 1 + + + + + 596 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 596 + 340 + 335 + 22 + 0 + + + + + 663 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 663 + 19 + 17 + 0 + 0 + + + + + 663 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 663 + 37 + 17 + 1 + 1 + + + + + 663 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 663 + 42 + 40 + 2 + 0 + + + + + 663 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 663 + 50 + 40 + 3 + 1 + + + + + 671 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 78 + 76 + 4 + 0 + + + + + 671 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 101 + 99 + 6 + 0 + + + + + 671 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 109 + 76 + 5 + 1 + + + + + 671 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 109 + 99 + 7 + 1 + + + + + 671 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 119 + 114 + 8 + 0 + + + + + 677 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 677 + 148 + 339 + 25 + 1 + + + + + 679 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 177 + 172 + 10 + 0 + + + + + 679 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 201 + 199 + 12 + 0 + + + + + 679 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 211 + 209 + 14 + 0 + + + + + 679 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 238 + 236 + 16 + 0 + + + + + 679 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 264 + 262 + 18 + 0 + + + + + 679 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 288 + 286 + 20 + 0 + + + + + 679 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 172 + 11 + 1 + + + + + 679 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 199 + 13 + 1 + + + + + 679 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 209 + 15 + 1 + + + + + 679 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 236 + 17 + 1 + + + + + 679 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 262 + 19 + 1 + + + + + 679 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 307 + 286 + 21 + 1 + + + + + 679 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 314 + 312 + 22 + 0 + + + + + 679 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + 319 + 312 + 23 + 1 + + + + + 677 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 677 + 344 + 339 + 24 + 0 + + + + + 671 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + 350 + 114 + 9 + 1 + + + + + 692 + 26 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 379 + 374 + 26 + 0 + + + + + 692 + 28 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 405 + 403 + 28 + 0 + + + + + 692 + 30 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 431 + 429 + 30 + 0 + + + + + 692 + 32 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 457 + 455 + 32 + 0 + + + + + 692 + 34 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 483 + 481 + 34 + 0 + + + + + 692 + 27 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 374 + 27 + 1 + + + + + 692 + 29 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 403 + 29 + 1 + + + + + 692 + 31 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 429 + 31 + 1 + + + + + 692 + 33 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 455 + 33 + 1 + + + + + 692 + 35 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 481 + 35 + 1 + + + + + 692 + 36 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 512 + 507 + 36 + 0 + + + + + 692 + 38 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 541 + 536 + 38 + 0 + + + + + 692 + 40 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 567 + 565 + 40 + 0 + + + + + 692 + 42 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 593 + 591 + 42 + 0 + + + + + 692 + 44 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 619 + 617 + 44 + 0 + + + + + 692 + 46 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 645 + 643 + 46 + 0 + + + + + 692 + 39 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 536 + 39 + 1 + + + + + 692 + 41 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 565 + 41 + 1 + + + + + 692 + 43 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 591 + 43 + 1 + + + + + 692 + 45 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 617 + 45 + 1 + + + + + 692 + 47 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 643 + 47 + 1 + + + + + 692 + 48 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 671 + 669 + 48 + 0 + + + + + 692 + 50 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 697 + 695 + 50 + 0 + + + + + 692 + 52 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 722 + 720 + 52 + 0 + + + + + 692 + 54 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 746 + 744 + 54 + 0 + + + + + 692 + 37 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 765 + 507 + 37 + 1 + + + + + 692 + 49 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 765 + 669 + 49 + 1 + + + + + 692 + 51 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 765 + 695 + 51 + 1 + + + + + 692 + 53 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 765 + 720 + 53 + 1 + + + + + 692 + 55 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 765 + 744 + 55 + 1 + + + + + 692 + 56 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 772 + 770 + 56 + 0 + + + + + 692 + 57 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + 776 + 770 + 57 + 1 + + + + + 712 + 58 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 712 + 786 + 781 + 58 + 0 + + + + + 716 + 71 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + 808 + 953 + 71 + 1 + + + + + 718 + 60 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 834 + 832 + 60 + 0 + + + + + 718 + 61 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 859 + 832 + 61 + 1 + + + + + 718 + 62 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 859 + 857 + 62 + 0 + + + + + 718 + 64 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 886 + 884 + 64 + 0 + + + + + 718 + 66 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 912 + 910 + 66 + 0 + + + + + 718 + 63 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 921 + 857 + 63 + 1 + + + + + 718 + 65 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 921 + 884 + 65 + 1 + + + + + 718 + 67 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 921 + 910 + 67 + 1 + + + + + 718 + 68 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 928 + 926 + 68 + 0 + + + + + 718 + 69 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + 933 + 926 + 69 + 1 + + + + + 716 + 70 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + 958 + 953 + 70 + 0 + + + + + 712 + 59 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 712 + 959 + 781 + 59 + 1 + + + + + 758 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 19 + 17 + 0 + 0 + + + + + 758 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 37 + 35 + 2 + 0 + + + + + 758 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 55 + 53 + 4 + 0 + + + + + 758 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 73 + 17 + 1 + 1 + + + + + 758 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 73 + 35 + 3 + 1 + + + + + 758 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 73 + 53 + 5 + 1 + + + + + 758 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 78 + 76 + 6 + 0 + + + + + 758 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + 86 + 76 + 7 + 1 + + + + + 766 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 90 + 88 + 8 + 0 + + + + + 766 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 116 + 114 + 10 + 0 + + + + + 766 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 142 + 114 + 11 + 1 + + + + + 766 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 145 + 88 + 9 + 1 + + + + + 766 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 153 + 148 + 12 + 0 + + + + + 772 + 31 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 772 + 174 + 411 + 31 + 1 + + + + + 774 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 200 + 198 + 14 + 0 + + + + + 774 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 224 + 222 + 16 + 0 + + + + + 774 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 233 + 198 + 15 + 1 + + + + + 774 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 233 + 222 + 17 + 1 + + + + + 774 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 243 + 238 + 18 + 0 + + + + + 780 + 29 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 780 + 264 + 389 + 29 + 1 + + + + + 782 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 290 + 288 + 20 + 0 + + + + + 782 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 314 + 312 + 22 + 0 + + + + + 782 + 24 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 338 + 336 + 24 + 0 + + + + + 782 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 357 + 288 + 21 + 1 + + + + + 782 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 357 + 312 + 23 + 1 + + + + + 782 + 25 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 357 + 336 + 25 + 1 + + + + + 782 + 26 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 364 + 362 + 26 + 0 + + + + + 782 + 27 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + 369 + 362 + 27 + 1 + + + + + 780 + 28 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 780 + 391 + 389 + 28 + 0 + + + + + 774 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + 392 + 238 + 19 + 1 + + + + + 772 + 30 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 772 + 416 + 411 + 30 + 0 + + + + + 766 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + 417 + 148 + 13 + 1 + + + + + 836 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 836 + 21 + 19 + 0 + 0 + + + + + 836 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 836 + 29 + 19 + 1 + 1 + + + + + 843 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 843 + 48 + 207 + 15 + 1 + + + + + 845 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 73 + 71 + 2 + 0 + + + + + 845 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 96 + 94 + 4 + 0 + + + + + 845 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 105 + 103 + 6 + 0 + + + + + 845 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 124 + 122 + 8 + 0 + + + + + 845 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 150 + 148 + 10 + 0 + + + + + 845 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 176 + 148 + 11 + 1 + + + + + 845 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 179 + 71 + 3 + 1 + + + + + 845 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 179 + 94 + 5 + 1 + + + + + 845 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 179 + 103 + 7 + 1 + + + + + 845 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 179 + 122 + 9 + 1 + + + + + 845 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 186 + 184 + 12 + 0 + + + + + 845 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + 191 + 184 + 13 + 1 + + + + + 843 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 843 + 212 + 207 + 14 + 0 + + + + + 873 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 873 + 19 + 17 + 0 + 0 + + + + + 873 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 873 + 37 + 17 + 1 + 1 + + + + + 873 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 873 + 42 + 40 + 2 + 0 + + + + + 873 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 873 + 50 + 40 + 3 + 1 + + + + + 879 + 4 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 57 + 52 + 4 + 0 + + + + + 879 + 6 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 86 + 81 + 6 + 0 + + + + + 879 + 8 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 109 + 107 + 8 + 0 + + + + + 879 + 10 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 117 + 115 + 10 + 0 + + + + + 879 + 9 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 135 + 107 + 9 + 1 + + + + + 879 + 11 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 135 + 115 + 11 + 1 + + + + + 879 + 12 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 135 + 133 + 12 + 0 + + + + + 879 + 14 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 158 + 156 + 14 + 0 + + + + + 879 + 16 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 171 + 169 + 16 + 0 + + + + + 879 + 13 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 189 + 133 + 13 + 1 + + + + + 879 + 18 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 189 + 187 + 18 + 0 + + + + + 879 + 20 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 215 + 213 + 20 + 0 + + + + + 879 + 21 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 241 + 213 + 21 + 1 + + + + + 879 + 5 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 244 + 52 + 5 + 1 + + + + + 879 + 7 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 244 + 81 + 7 + 1 + + + + + 879 + 15 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 244 + 156 + 15 + 1 + + + + + 879 + 17 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 244 + 169 + 17 + 1 + + + + + 879 + 19 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 244 + 187 + 19 + 1 + + + + + 879 + 22 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 251 + 249 + 22 + 0 + + + + + 879 + 23 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + 256 + 249 + 23 + 1 + + + + + 1265 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1265 + 10 + 50 + 3 + 1 + + + + + 1267 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1267 + 31 + 29 + 0 + 0 + + + + + 1267 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1267 + 36 + 29 + 1 + 1 + + + + + 1265 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1265 + 52 + 50 + 2 + 0 + + + + + 1346 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c::<SkipGeneratedBackingFieldAssignment>b__27_0(Mono.Cecil.FieldDefinition) + 1346 + 44 + 42 + 0 + 0 + + + + + 1346 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c::<SkipGeneratedBackingFieldAssignment>b__27_0(Mono.Cecil.FieldDefinition) + 1346 + 62 + 42 + 1 + 1 + + + + + 423 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2::<SkipGeneratedBranchesForExceptionHandlers>b__1(System.Int32) + 423 + 31 + 29 + 0 + 0 + + + + + 423 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2::<SkipGeneratedBranchesForExceptionHandlers>b__1(System.Int32) + 423 + 77 + 29 + 1 + 1 + + + + + 423 + 2 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2::<SkipGeneratedBranchesForExceptionHandlers>b__1(System.Int32) + 423 + 77 + 75 + 2 + 0 + + + + + 423 + 3 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass13_2::<SkipGeneratedBranchesForExceptionHandlers>b__1(System.Int32) + 423 + 123 + 75 + 3 + 1 + + + + + 1139 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass21_0 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass21_0::<BuildPointsForBranch>b__0(Mono.Cecil.Cil.Instruction) + 1139 + 14 + 12 + 0 + 0 + + + + + 1139 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass21_0 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass21_0::<BuildPointsForBranch>b__0(Mono.Cecil.Cil.Instruction) + 1139 + 33 + 12 + 1 + 1 + + + + + 1163 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass22_0 + 0 + Coverlet.Core.Symbols.BranchPoint Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass22_0::<BuildPointsForSwitchCases>b__0(System.Collections.Generic.List`1<System.Int32>) + 1163 + 102 + 100 + 0 + 0 + + + + + 1163 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass22_0 + 0 + Coverlet.Core.Symbols.BranchPoint Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass22_0::<BuildPointsForSwitchCases>b__0(System.Collections.Generic.List`1<System.Int32>) + 1163 + 109 + 100 + 1 + 1 + + + + + 1416 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass30_1 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass30_1::<SkipBranchGeneratedFinallyBlock>b__7(System.Collections.Generic.KeyValuePair`2<Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint>) + 1416 + 30 + 28 + 0 + 0 + + + + + 1416 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass30_1 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass30_1::<SkipBranchGeneratedFinallyBlock>b__7(System.Collections.Generic.KeyValuePair`2<Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint>) + 1416 + 130 + 28 + 1 + 1 + + + + + 1422 + 0 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass31_0 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass31_0::<GetOffsetOfNextEndfinally>b__1(Mono.Cecil.Cil.Instruction) + 1422 + 14 + 12 + 0 + 0 + + + + + 1422 + 1 + + + Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass31_0 + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper/<>c__DisplayClass31_0::<GetOffsetOfNextEndfinally>b__1(Mono.Cecil.Cil.Instruction) + 1422 + 37 + 12 + 1 + 1 + + + + 6 + + + 29 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 29 + + + + 30 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 30 + + + + 32 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 32 + + + + 33 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 33 + + + + 34 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 34 + + + + 35 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 35 + + + + 37 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 37 + + + + 38 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 38 + + + + 31 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 31 + + + + 40 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 40 + + + + 41 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.MethodDefinition) + 41 + + + + 44 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.FieldDefinition) + 44 + + + + 45 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.FieldDefinition) + 45 + + + + 46 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsCompilerGenerated(Mono.Cecil.FieldDefinition) + 46 + + + + 49 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 49 + + + + 50 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 50 + + + + 51 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 51 + + + + 52 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 52 + + + + 53 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 53 + + + + 54 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 54 + + + + 55 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 55 + + + + 56 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 56 + + + + 58 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 58 + + + + 59 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 59 + + + + 61 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 61 + + + + 62 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachine(Mono.Cecil.MethodDefinition) + 62 + + + + 65 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 65 + + + + 66 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 66 + + + + 67 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 67 + + + + 68 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 68 + + + + 69 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 69 + + + + 70 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 70 + + + + 71 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 71 + + + + 72 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 72 + + + + 74 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 74 + + + + 75 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 75 + + + + 77 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 77 + + + + 78 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncIterator(Mono.Cecil.MethodDefinition) + 78 + + + + 81 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 81 + + + + 82 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 82 + + + + 83 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 83 + + + + 84 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 84 + + + + 87 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 87 + + + + 88 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 88 + + + + 89 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 89 + + + + 90 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 90 + + + + 91 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 91 + + + + 92 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 92 + + + + 93 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 93 + + + + 95 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 95 + + + + 96 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 96 + + + + 98 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 98 + + + + 99 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideEnumerator(Mono.Cecil.MethodDefinition) + 99 + + + + 102 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 102 + + + + 110 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 110 + + + + 111 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 111 + + + + 112 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 112 + + + + 113 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 113 + + + + 114 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 114 + + + + 115 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 115 + + + + 116 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 116 + + + + 117 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 117 + + + + 118 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 118 + + + + 119 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 119 + + + + 120 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::IsMoveNextInsideAsyncStateMachineProlog(Mono.Cecil.MethodDefinition) + 120 + + + + 123 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 123 + + + + 171 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 171 + + + + 172 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 172 + + + + 173 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 173 + + + + 174 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 174 + + + + 175 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 175 + + + + 176 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 176 + + + + 177 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 177 + + + + 178 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 178 + + + + 179 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 179 + + + + 181 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 181 + + + + 182 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 182 + + + + 183 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipMoveNextPrologueBranches(Mono.Cecil.Cil.Instruction) + 183 + + + + 186 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 186 + + + + 188 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 188 + + + + 189 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 189 + + + + 190 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 190 + + + + 191 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 191 + + + + 192 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 192 + + + + 193 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 193 + + + + 194 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 194 + + + + 195 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 195 + + + + 196 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 196 + + + + 197 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 197 + + + + 198 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 198 + + + + 199 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 199 + + + + 200 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 200 + + + + 201 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 201 + + + + 202 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 202 + + + + 203 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 203 + + + + 204 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 204 + + + + 205 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 205 + + + + 206 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 206 + + + + 207 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 207 + + + + 209 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 209 + + + + 210 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipIsCompleteAwaiters(Mono.Cecil.Cil.Instruction) + 210 + + + + 213 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 213 + + + + 239 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 239 + + + + 240 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 240 + + + + 241 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 241 + + + + 242 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 242 + + + + 243 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 243 + + + + 244 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 244 + + + + 245 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 245 + + + + 246 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 246 + + + + 247 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 247 + + + + 248 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 248 + + + + 250 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 250 + + + + 251 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 251 + + + + 252 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipLambdaCachedField(Mono.Cecil.Cil.Instruction) + 252 + + + + 255 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 255 + + + + 275 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 275 + + + + 277 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 277 + + + + 278 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 278 + + + + 279 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 279 + + + + 280 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 280 + + + + 281 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 281 + + + + 282 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 282 + + + + 283 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 283 + + + + 284 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 284 + + + + 285 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 285 + + + + 286 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 286 + + + + 287 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchForExceptionRethrown(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 287 + + + + 290 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 290 + + + + 402 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 402 + + + + 403 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 403 + + + + 404 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 404 + + + + 405 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 405 + + + + 407 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 407 + + + + 408 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 408 + + + + 409 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 409 + + + + 410 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 410 + + + + 411 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 411 + + + + 413 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 413 + + + + 414 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 414 + + + + 417 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 417 + + + + 419 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 419 + + + + 420 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 420 + + + + 422 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 422 + + + + 423 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 423 + + + + 424 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 424 + + + + 425 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 425 + + + + 427 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 427 + + + + 428 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 428 + + + + 429 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 429 + + + + 430 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 430 + + + + 431 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 431 + + + + 432 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 432 + + + + 434 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 434 + + + + 435 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 435 + + + + 436 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 436 + + + + 438 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 438 + + + + 439 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 439 + + + + 441 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 441 + + + + 442 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForExceptionHandlers(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>) + 442 + + + + 445 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 445 + + + + 464 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 464 + + + + 466 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 466 + + + + 467 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 467 + + + + 468 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 468 + + + + 614 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitForeach(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 614 + + + + 617 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 617 + + + + 618 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 618 + + + + 620 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 620 + + + + 621 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 621 + + + + 796 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAwaitUsing(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 796 + + + + 800 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 800 + + + + 811 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 811 + + + + 813 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 813 + + + + 814 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 814 + + + + 893 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForAsyncIterator(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 893 + + + + 896 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 896 + + + + 908 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 908 + + + + 910 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 910 + + + + 911 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 911 + + + + 912 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 912 + + + + 913 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 913 + + + + 916 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 916 + + + + 917 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 917 + + + + 918 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 918 + + + + 919 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 919 + + + + 920 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 920 + + + + 921 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 921 + + + + 922 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 922 + + + + 923 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 923 + + + + 924 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 924 + + + + 926 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 926 + + + + 927 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBranchesForEnumeratorCancellationAttribute(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction) + 927 + + + + 930 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 930 + + + + 931 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 931 + + + + 932 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 932 + + + + 933 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsBranches(Mono.Cecil.Cil.Instruction) + 933 + + + + 936 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 936 + + + + 937 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 937 + + + + 938 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 938 + + + + 939 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 939 + + + + 940 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 940 + + + + 943 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 943 + + + + 944 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 944 + + + + 946 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 946 + + + + 947 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 947 + + + + 948 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 948 + + + + 954 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 954 + + + + 955 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 955 + + + + 957 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 957 + + + + 958 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 958 + + + + 960 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 960 + + + + 961 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 961 + + + + 962 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 962 + + + + 963 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 963 + + + + 964 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 964 + + + + 965 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 965 + + + + 968 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 968 + + + + 969 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 969 + + + + 970 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 970 + + + + 971 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 971 + + + + 974 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 974 + + + + 975 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 975 + + + + 976 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 976 + + + + 977 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 977 + + + + 978 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 978 + + + + 980 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 980 + + + + 982 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 982 + + + + 983 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 983 + + + + 984 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 984 + + + + 987 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 987 + + + + 988 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 988 + + + + 989 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 989 + + + + 992 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 992 + + + + 993 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 993 + + + + 994 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 994 + + + + 995 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 995 + + + + 996 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 996 + + + + 997 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 997 + + + + 998 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 998 + + + + 999 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 999 + + + + 1001 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1001 + + + + 1003 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1003 + + + + 1004 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1004 + + + + 1005 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1005 + + + + 1006 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1006 + + + + 1007 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1007 + + + + 1009 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1009 + + + + 1011 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1011 + + + + 1012 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1012 + + + + 1013 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1013 + + + + 1016 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1016 + + + + 1017 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1017 + + + + 1018 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1018 + + + + 1021 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1021 + + + + 1022 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1022 + + + + 1023 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1023 + + + + 1026 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1026 + + + + 1029 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1029 + + + + 1030 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1030 + + + + 1031 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1031 + + + + 1032 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1032 + + + + 1034 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1034 + + + + 1035 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1035 + + + + 1036 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1036 + + + + 1039 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1039 + + + + 1040 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1040 + + + + 1041 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1041 + + + + 1043 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1043 + + + + 1044 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1044 + + + + 1045 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1045 + + + + 1046 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1046 + + + + 1048 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1048 + + + + 1049 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1049 + + + + 1050 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Symbols.BranchPoint> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPoints(Mono.Cecil.MethodDefinition) + 1050 + + + + 1055 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1055 + + + + 1059 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1059 + + + + 1061 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1061 + + + + 1064 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1064 + + + + 1065 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1065 + + + + 1066 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1066 + + + + 1067 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1067 + + + + 1068 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1068 + + + + 1069 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1069 + + + + 1070 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1070 + + + + 1071 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1071 + + + + 1072 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1072 + + + + 1073 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1073 + + + + 1074 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1074 + + + + 1075 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1075 + + + + 1076 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1076 + + + + 1079 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1079 + + + + 1080 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1080 + + + + 1082 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1082 + + + + 1083 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1083 + + + + 1085 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1085 + + + + 1086 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1086 + + + + 1087 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1087 + + + + 1089 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1089 + + + + 1090 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1090 + + + + 1091 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1091 + + + + 1093 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1093 + + + + 1094 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1094 + + + + 1095 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1095 + + + + 1096 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1096 + + + + 1097 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForConditionalBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.Int32,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,System.UInt32&,Mono.Cecil.MethodDefinition) + 1097 + + + + 1101 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1101 + + + + 1102 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1102 + + + + 1105 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1105 + + + + 1106 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1106 + + + + 1107 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1107 + + + + 1108 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1108 + + + + 1109 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1109 + + + + 1110 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1110 + + + + 1111 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1111 + + + + 1112 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1112 + + + + 1113 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1113 + + + + 1114 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1114 + + + + 1115 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1115 + + + + 1116 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1116 + + + + 1117 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1117 + + + + 1122 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1122 + + + + 1123 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1123 + + + + 1124 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1124 + + + + 1125 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1125 + + + + 1126 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1126 + + + + 1127 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1127 + + + + 1128 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1128 + + + + 1130 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1130 + + + + 1131 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1131 + + + + 1132 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1132 + + + + 1133 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1133 + + + + 1134 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1134 + + + + 1136 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1136 + + + + 1137 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1137 + + + + 1139 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1139 + + + + 1141 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1141 + + + + 1142 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1142 + + + + 1143 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1143 + + + + 1145 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1145 + + + + 1146 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1146 + + + + 1148 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1148 + + + + 1149 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1149 + + + + 1150 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1150 + + + + 1151 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1151 + + + + 1152 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1152 + + + + 1153 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1153 + + + + 1154 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForBranch(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Mono.Cecil.Cil.Instruction,System.Int32,System.String,System.Int32,System.UInt32,System.Int32,Coverlet.Core.Symbols.BranchPoint,System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.MethodDefinition) + 1154 + + + + 1158 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1158 + + + + 1159 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1159 + + + + 1160 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1160 + + + + 1162 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1162 + + + + 1163 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1163 + + + + 1164 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1164 + + + + 1165 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1165 + + + + 1166 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1166 + + + + 1167 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1167 + + + + 1168 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1168 + + + + 1169 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1169 + + + + 1170 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1170 + + + + 1171 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1171 + + + + 1172 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1172 + + + + 1173 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1173 + + + + 1174 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1174 + + + + 1175 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1175 + + + + 1176 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1176 + + + + 1177 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1177 + + + + 1178 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.UInt32 Coverlet.Core.Symbols.CecilSymbolHelper::BuildPointsForSwitchCases(System.Collections.Generic.List`1<Coverlet.Core.Symbols.BranchPoint>,Coverlet.Core.Symbols.BranchPoint,Mono.Cecil.Cil.Instruction[],System.Int32,System.String,System.Int32,System.UInt32,System.Int32&) + 1178 + + + + 1181 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstruction(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1181 + + + + 1182 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstruction(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1182 + + + + 1225 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1225 + + + + 1226 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1226 + + + + 1227 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1227 + + + + 1228 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1228 + + + + 1231 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1231 + + + + 1232 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1232 + + + + 1233 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1233 + + + + 1237 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1237 + + + + 1238 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1238 + + + + 1239 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1239 + + + + 1240 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1240 + + + + 1241 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1241 + + + + 1242 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1242 + + + + 1246 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1246 + + + + 1248 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1248 + + + + 1249 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1249 + + + + 1250 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1250 + + + + 1251 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1251 + + + + 1252 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1252 + + + + 1254 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1254 + + + + 1255 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1255 + + + + 1247 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1247 + + + + 1257 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1257 + + + + 1258 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1258 + + + + 1259 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1259 + + + + 1276 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1276 + + + + 1279 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1279 + + + + 1280 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1280 + + + + 1281 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1281 + + + + 1282 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1282 + + + + 1296 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1296 + + + + 1297 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1297 + + + + 1298 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1298 + + + + 1299 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1299 + + + + 1300 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1300 + + + + 1301 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1301 + + + + 1302 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1302 + + + + 1303 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1303 + + + + 1304 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1304 + + + + 1305 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1305 + + + + 1306 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1306 + + + + 1307 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1307 + + + + 1308 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1308 + + + + 1309 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1309 + + + + 1310 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1310 + + + + 1311 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1311 + + + + 1313 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1313 + + + + 1314 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipExpressionBreakpointsSequences(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1314 + + + + 1317 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1317 + + + + 1318 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1318 + + + + 1320 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1320 + + + + 1321 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1321 + + + + 1322 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipInlineAssignedAutoProperty(System.Boolean,Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1322 + + + + 1325 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1325 + + + + 1345 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1345 + + + + 1346 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1346 + + + + 1347 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1347 + + + + 1349 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1349 + + + + 1350 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1350 + + + + 1351 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1351 + + + + 1352 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1352 + + + + 1353 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipGeneratedBackingFieldAssignment(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.Instruction) + 1353 + + + + 1356 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1356 + + + + 1366 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1366 + + + + 1367 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1367 + + + + 1368 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1368 + + + + 1369 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipDefaultInitializationSystemObject(Mono.Cecil.Cil.Instruction) + 1369 + + + + 1372 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1372 + + + + 1373 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1373 + + + + 1374 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1374 + + + + 1377 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1377 + + + + 1378 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1378 + + + + 1379 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1379 + + + + 1381 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1381 + + + + 1382 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1382 + + + + 1383 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1383 + + + + 1384 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1384 + + + + 1387 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1387 + + + + 1388 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1388 + + + + 1389 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1389 + + + + 1386 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1386 + + + + 1391 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1391 + + + + 1392 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1392 + + + + 1393 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1393 + + + + 1395 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1395 + + + + 1397 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1397 + + + + 1398 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedExceptionFilter(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1398 + + + + 1401 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1401 + + + + 1402 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1402 + + + + 1403 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1403 + + + + 1406 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1406 + + + + 1407 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1407 + + + + 1408 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1408 + + + + 1410 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1410 + + + + 1411 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1411 + + + + 1412 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1412 + + + + 1413 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1413 + + + + 1414 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1414 + + + + 1415 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1415 + + + + 1416 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1416 + + + + 1417 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::SkipBranchGeneratedFinallyBlock(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1417 + + + + 1420 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper::GetOffsetOfNextEndfinally(Mono.Cecil.Cil.MethodBody,System.Int32) + 1420 + + + + 1421 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper::GetOffsetOfNextEndfinally(Mono.Cecil.Cil.MethodBody,System.Int32) + 1421 + + + + 1422 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper::GetOffsetOfNextEndfinally(Mono.Cecil.Cil.MethodBody,System.Int32) + 1422 + + + + 1423 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper::GetOffsetOfNextEndfinally(Mono.Cecil.Cil.MethodBody,System.Int32) + 1423 + + + + 1426 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1426 + + + + 1427 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1427 + + + + 1429 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1429 + + + + 1430 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1430 + + + + 1431 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1431 + + + + 1432 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1432 + + + + 1434 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1434 + + + + 1435 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1435 + + + + 1436 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1436 + + + + 1437 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1437 + + + + 1438 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1438 + + + + 1439 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1439 + + + + 1441 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1441 + + + + 1442 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1442 + + + + 1444 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1444 + + + + 1433 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1433 + + + + 1445 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1445 + + + + 1447 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1447 + + + + 1448 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Collections.Generic.List`1<System.Int32> Coverlet.Core.Symbols.CecilSymbolHelper::GetBranchPath(Mono.Cecil.Cil.Instruction) + 1448 + + + + 1451 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1451 + + + + 1452 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1452 + + + + 1453 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1453 + + + + 1454 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1454 + + + + 1455 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1455 + + + + 1457 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1457 + + + + 1458 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1458 + + + + 1460 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1460 + + + + 1461 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1461 + + + + 1462 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1462 + + + + 1464 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1464 + + + + 1466 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1466 + + + + 1467 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1467 + + + + 1469 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1469 + + + + 1470 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::FindClosestInstructionWithSequencePoint(Mono.Cecil.Cil.MethodBody,Mono.Cecil.Cil.Instruction) + 1470 + + + + 1473 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1473 + + + + 1474 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1474 + + + + 1475 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1475 + + + + 1476 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::HasValidSequencePoint(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition) + 1476 + + + + 482 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 482 + + + + 490 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 490 + + + + 491 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 491 + + + + 492 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 492 + + + + 493 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 493 + + + + 496 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 496 + + + + 497 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 497 + + + + 498 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 498 + + + + 499 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 499 + + + + 500 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 500 + + + + 501 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 501 + + + + 502 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 502 + + + + 503 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 503 + + + + 504 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 504 + + + + 505 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 505 + + + + 506 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 506 + + + + 509 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 509 + + + + 510 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckForAsyncEnumerator|14_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 510 + + + + 513 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 513 + + + + 532 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 532 + + + + 533 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 533 + + + + 534 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 534 + + + + 535 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 535 + + + + 540 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 540 + + + + 542 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 542 + + + + 543 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 543 + + + + 544 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 544 + + + + 545 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 545 + + + + 546 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 546 + + + + 547 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 547 + + + + 548 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 548 + + + + 549 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 549 + + + + 552 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 552 + + + + 554 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 554 + + + + 555 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 555 + + + + 556 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 556 + + + + 557 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 557 + + + + 558 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 558 + + + + 559 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 559 + + + + 560 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 560 + + + + 561 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 561 + + + + 562 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 562 + + + + 564 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 564 + + + + 565 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 565 + + + + 566 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 566 + + + + 568 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 568 + + + + 569 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckIfExceptionThrown|14_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 569 + + + + 572 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 572 + + + + 588 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 588 + + + + 589 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 589 + + + + 590 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 590 + + + + 591 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 591 + + + + 594 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 594 + + + + 596 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 596 + + + + 597 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 597 + + + + 598 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 598 + + + + 599 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 599 + + + + 600 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 600 + + + + 601 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 601 + + + + 602 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 602 + + + + 603 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 603 + + + + 604 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 604 + + + + 605 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 605 + + + + 606 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 606 + + + + 607 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 607 + + + + 608 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 608 + + + + 610 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 610 + + + + 612 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 612 + + + + 613 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitForeach>g__CheckThrownExceptionType|14_2(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 613 + + + + 624 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 624 + + + + 663 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 663 + + + + 664 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 664 + + + + 665 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 665 + + + + 666 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 666 + + + + 669 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 669 + + + + 671 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 671 + + + + 672 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 672 + + + + 673 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 673 + + + + 674 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 674 + + + + 675 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 675 + + + + 677 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 677 + + + + 678 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 678 + + + + 679 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 679 + + + + 680 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 680 + + + + 681 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 681 + + + + 682 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 682 + + + + 683 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 683 + + + + 684 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 684 + + + + 685 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 685 + + + + 686 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 686 + + + + 687 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 687 + + + + 688 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 688 + + + + 690 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 690 + + + + 691 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 691 + + + + 692 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 692 + + + + 693 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 693 + + + + 694 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 694 + + + + 695 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 695 + + + + 696 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 696 + + + + 697 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 697 + + + + 698 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 698 + + + + 699 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 699 + + + + 700 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 700 + + + + 701 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 701 + + + + 702 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 702 + + + + 703 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 703 + + + + 704 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 704 + + + + 705 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 705 + + + + 706 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 706 + + + + 707 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 707 + + + + 708 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 708 + + + + 709 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 709 + + + + 710 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 710 + + + + 712 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 712 + + + + 713 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 713 + + + + 714 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 714 + + + + 716 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + + + + 717 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 717 + + + + 718 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 718 + + + + 719 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 719 + + + + 720 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 720 + + + + 721 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 721 + + + + 722 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 722 + + + + 723 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 723 + + + + 724 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 724 + + + + 726 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 726 + + + + 727 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 727 + + + + 729 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 729 + + + + 730 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForSkipDisposal|15_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 730 + + + + 733 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 733 + + + + 758 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 758 + + + + 759 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 759 + + + + 760 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 760 + + + + 761 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 761 + + + + 762 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 762 + + + + 763 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 763 + + + + 766 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 766 + + + + 767 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 767 + + + + 768 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 768 + + + + 769 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 769 + + + + 770 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 770 + + + + 772 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 772 + + + + 773 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 773 + + + + 774 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 774 + + + + 775 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 775 + + + + 776 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 776 + + + + 777 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 777 + + + + 778 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 778 + + + + 780 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 780 + + + + 781 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 781 + + + + 782 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 782 + + + + 783 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 783 + + + + 784 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 784 + + + + 785 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 785 + + + + 786 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 786 + + + + 787 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 787 + + + + 789 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 789 + + + + 790 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 790 + + + + 791 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 791 + + + + 792 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 792 + + + + 794 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 794 + + + + 795 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAwaitUsing>g__CheckForCleanup|15_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 795 + + + + 817 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 817 + + + + 836 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 836 + + + + 837 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 837 + + + + 838 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 838 + + + + 841 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 841 + + + + 843 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 843 + + + + 844 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 844 + + + + 845 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 845 + + + + 846 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 846 + + + + 847 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 847 + + + + 848 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 848 + + + + 849 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 849 + + + + 850 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 850 + + + + 851 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 851 + + + + 853 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 853 + + + + 855 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 855 + + + + 856 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__CheckForStateSwitch|16_0(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 856 + + + + 859 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 859 + + + + 873 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 873 + + + + 874 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 874 + + + + 875 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 875 + + + + 876 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 876 + + + + 879 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 879 + + + + 880 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 880 + + + + 881 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 881 + + + + 882 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 882 + + + + 883 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 883 + + + + 884 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 884 + + + + 885 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 885 + + + + 886 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 886 + + + + 887 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 887 + + + + 888 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 888 + + + + 891 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 891 + + + + 892 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Boolean Coverlet.Core.Symbols.CecilSymbolHelper::<SkipGeneratedBranchesForAsyncIterator>g__DisposeCheck|16_1(System.Collections.Generic.List`1<Mono.Cecil.Cil.Instruction>,Mono.Cecil.Cil.Instruction,System.Int32) + 892 + + + + 1263 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1263 + + + + 1264 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1264 + + + + 1266 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1266 + + + + 1267 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1267 + + + + 1268 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1268 + + + + 1269 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1269 + + + + 1271 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1271 + + + + 1272 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1272 + + + + 1265 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1265 + + + + 1274 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1274 + + + + 1275 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Symbols.CecilSymbolHelper::<SkipNotCoverableInstructionAfterExceptionRethrowInsiceCatchBlock>g__GetPreviousNoNopInstruction|24_0(Mono.Cecil.Cil.Instruction) + 1275 + + + + 23 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Void Coverlet.Core.Symbols.CecilSymbolHelper::.ctor() + 23 + + + + 24 + + Coverlet.Core.Symbols.CecilSymbolHelper + 0 + System.Void Coverlet.Core.Symbols.CecilSymbolHelper::.ctor() + 24 + + + + 1481 + + Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer::Compare(Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.Instruction) + 1481 + + + + 1482 + + Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer::Compare(Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.Instruction) + 1482 + + + + 1483 + + Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer + 0 + System.Int32 Coverlet.Core.Symbols.CecilSymbolHelper/InstructionByOffsetComparer::Compare(Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.Instruction) + 1483 + + + + C:\GitHub\coverlet\src\coverlet.core\Symbols\CecilSymbolHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\CoberturaReporter.cs + + + + + 41 + 0 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 41 + 327 + 325 + 0 + 0 + + + + + 41 + 1 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 41 + 378 + 325 + 1 + 1 + + + + + 48 + 21 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 48 + 414 + 2492 + 21 + 1 + + + + + 57 + 19 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 57 + 684 + 2442 + 19 + 1 + + + + + 59 + 17 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 59 + 714 + 2412 + 17 + 1 + + + + + 64 + 2 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 64 + 791 + 789 + 2 + 0 + + + + + 64 + 3 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 64 + 822 + 789 + 3 + 1 + + + + + 80 + 15 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 80 + 1089 + 2352 + 15 + 1 + + + + + 83 + 5 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 83 + 1130 + 1123 + 5 + 1 + + + + + 94 + 13 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + 1529 + 2302 + 13 + 1 + + + + + 102 + 6 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 102 + 1729 + 1724 + 6 + 0 + + + + + 109 + 11 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 109 + 2046 + 2241 + 11 + 1 + + + + + 113 + 8 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 113 + 2135 + 2133 + 8 + 0 + + + + + 113 + 9 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 113 + 2142 + 2133 + 9 + 1 + + + + + 109 + 10 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 109 + 2246 + 2241 + 10 + 0 + + + + + 102 + 7 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 102 + 2274 + 1724 + 7 + 1 + + + + + 94 + 12 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + 2307 + 2302 + 12 + 0 + + + + + 83 + 4 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 83 + 2345 + 1123 + 4 + 0 + + + + + 80 + 14 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 80 + 2357 + 2352 + 14 + 0 + + + + + 59 + 16 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 59 + 2417 + 2412 + 16 + 0 + + + + + 57 + 18 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 57 + 2447 + 2442 + 18 + 0 + + + + + 48 + 20 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 48 + 2497 + 2492 + 20 + 0 + + + + + 179 + 0 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 179 + 6 + 4 + 0 + 0 + + + + + 179 + 1 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 179 + 24 + 4 + 1 + 1 + + + + + 184 + 2 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 184 + 74 + 72 + 2 + 0 + + + + + 184 + 3 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 184 + 93 + 72 + 3 + 1 + + + + + 217 + 0 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 217 + 6 + 4 + 0 + 0 + + + + + 217 + 1 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 217 + 11 + 4 + 1 + 1 + + + + + 222 + 5 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 222 + 21 + 65 + 5 + 1 + + + + + 224 + 2 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 224 + 42 + 40 + 2 + 0 + + + + + 224 + 3 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 224 + 58 + 40 + 3 + 1 + + + + + 222 + 4 + + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 222 + 67 + 65 + 4 + 0 + + + + + 188 + 0 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter/<>c::<GetBasePaths>b__7_1(System.Linq.IGrouping`2<System.String,System.String>) + 188 + 109 + 107 + 0 + 0 + + + + + 188 + 1 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter/<>c::<GetBasePaths>b__7_1(System.Linq.IGrouping`2<System.String,System.String>) + 188 + 122 + 107 + 1 + 1 + + + + + 197 + 0 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0 + 0 + System.Void Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0::<GetBasePaths>b__5(System.ValueTuple`2<System.String,System.Int32>) + 197 + 24 + 22 + 0 + 0 + + + + + 197 + 1 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0 + 0 + System.Void Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0::<GetBasePaths>b__5(System.ValueTuple`2<System.String,System.Int32>) + 197 + 27 + 22 + 1 + 1 + + + + + 202 + 2 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0 + 0 + System.Void Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0::<GetBasePaths>b__5(System.ValueTuple`2<System.String,System.Int32>) + 202 + 54 + 52 + 2 + 0 + + + + + 202 + 3 + + + Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0 + 0 + System.Void Coverlet.Core.Reporters.CoberturaReporter/<>c__DisplayClass7_0::<GetBasePaths>b__5(System.ValueTuple`2<System.String,System.Int32>) + 202 + 81 + 52 + 3 + 1 + + + + 7 + + + 18 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + Coverlet.Core.Abstractions.ReporterOutputType Coverlet.Core.Reporters.CoberturaReporter::get_OutputType() + 18 + + + + 20 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::get_Format() + 20 + + + + 22 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::get_Extension() + 22 + + + + 25 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 25 + + + + 26 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 26 + + + + 28 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 28 + + + + 29 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + + + + 31 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + + + + 32 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 32 + + + + 33 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 33 + + + + 34 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 34 + + + + 35 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 35 + + + + 36 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 36 + + + + 38 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 38 + + + + 40 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + + + + 41 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 41 + + + + 42 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 42 + + + + 43 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 43 + + + + 44 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 44 + + + + 45 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 45 + + + + 47 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 47 + + + + 48 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 48 + + + + 49 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 49 + + + + 50 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 50 + + + + 51 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 51 + + + + 52 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 52 + + + + 53 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 53 + + + + 54 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 54 + + + + 56 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 56 + + + + 57 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 57 + + + + 58 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 58 + + + + 59 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 59 + + + + 60 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 60 + + + + 61 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 61 + + + + 62 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 62 + + + + 64 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 64 + + + + 65 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 65 + + + + 66 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 66 + + + + 67 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 67 + + + + 69 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 69 + + + + 70 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 70 + + + + 71 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 71 + + + + 72 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 72 + + + + 73 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 73 + + + + 74 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 74 + + + + 75 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 75 + + + + 77 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 77 + + + + 78 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 78 + + + + 80 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 80 + + + + 81 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 81 + + + + 83 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 83 + + + + 84 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 84 + + + + 86 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 86 + + + + 87 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 87 + + + + 88 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 88 + + + + 89 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 89 + + + + 90 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 90 + + + + 91 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 91 + + + + 93 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 93 + + + + 94 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + + + + 95 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 95 + + + + 96 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 96 + + + + 97 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 97 + + + + 98 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 98 + + + + 99 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 99 + + + + 100 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 100 + + + + 102 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 102 + + + + 103 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 103 + + + + 104 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 104 + + + + 105 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 105 + + + + 106 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 106 + + + + 107 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 107 + + + + 108 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 108 + + + + 109 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 109 + + + + 110 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 110 + + + + 111 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 111 + + + + 112 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 112 + + + + 113 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 113 + + + + 114 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 114 + + + + 115 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 115 + + + + 116 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 116 + + + + 118 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 118 + + + + 119 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 119 + + + + 121 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 121 + + + + 122 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 122 + + + + 123 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 123 + + + + 125 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 125 + + + + 126 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 126 + + + + 127 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 127 + + + + 129 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 129 + + + + 130 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 130 + + + + 131 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 131 + + + + 132 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 132 + + + + 133 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 133 + + + + 135 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 135 + + + + 136 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 136 + + + + 137 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 137 + + + + 139 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 139 + + + + 140 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 140 + + + + 141 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 141 + + + + 142 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 142 + + + + 144 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 144 + + + + 145 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 145 + + + + 146 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 146 + + + + 148 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 148 + + + + 149 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 149 + + + + 151 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 151 + + + + 152 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 152 + + + + 155 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 155 + + + + 179 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 179 + + + + 180 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 180 + + + + 181 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 181 + + + + 184 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 184 + + + + 185 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 185 + + + + 186 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 186 + + + + 187 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 187 + + + + 188 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 188 + + + + 189 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 189 + + + + 190 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 190 + + + + 191 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 191 + + + + 192 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 192 + + + + 193 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 193 + + + + 194 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 194 + + + + 195 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 195 + + + + 196 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 196 + + + + 197 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 197 + + + + 198 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 198 + + + + 199 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 199 + + + + 200 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 200 + + + + 201 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 201 + + + + 202 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 202 + + + + 203 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 203 + + + + 204 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 204 + + + + 205 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 205 + + + + 206 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 206 + + + + 207 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 207 + + + + 208 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 208 + + + + 209 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 209 + + + + 210 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 210 + + + + 211 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 211 + + + + 212 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 212 + + + + 213 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Reporters.CoberturaReporter::GetBasePaths(Coverlet.Core.Modules,System.Boolean) + 213 + + + + 216 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 216 + + + + 217 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 217 + + + + 218 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 218 + + + + 219 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 219 + + + + 222 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 222 + + + + 223 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 223 + + + + 224 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 224 + + + + 225 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 225 + + + + 226 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 226 + + + + 228 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 228 + + + + 229 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 229 + + + + 230 + + Coverlet.Core.Reporters.CoberturaReporter + 0 + System.String Coverlet.Core.Reporters.CoberturaReporter::GetRelativePathFromBase(System.Collections.Generic.IEnumerable`1<System.String>,System.String,System.Boolean) + 230 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\CoberturaReporter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\JsonReporter.cs + + + 8 + + + 11 + + Coverlet.Core.Reporters.JsonReporter + 0 + Coverlet.Core.Abstractions.ReporterOutputType Coverlet.Core.Reporters.JsonReporter::get_OutputType() + 11 + + + + 13 + + Coverlet.Core.Reporters.JsonReporter + 0 + System.String Coverlet.Core.Reporters.JsonReporter::get_Format() + 13 + + + + 15 + + Coverlet.Core.Reporters.JsonReporter + 0 + System.String Coverlet.Core.Reporters.JsonReporter::get_Extension() + 15 + + + + 18 + + Coverlet.Core.Reporters.JsonReporter + 0 + System.String Coverlet.Core.Reporters.JsonReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 18 + + + + 19 + + Coverlet.Core.Reporters.JsonReporter + 0 + System.String Coverlet.Core.Reporters.JsonReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 19 + + + + 20 + + Coverlet.Core.Reporters.JsonReporter + 0 + System.String Coverlet.Core.Reporters.JsonReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 20 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\JsonReporter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\LcovReporter.cs + + + + + 21 + 0 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + 16 + 14 + 0 + 0 + + + + + 21 + 1 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + 28 + 14 + 1 + 1 + + + + + 29 + 15 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + 58 + 894 + 15 + 1 + + + + + 31 + 13 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + 88 + 864 + 13 + 1 + + + + + 38 + 11 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 38 + 187 + 648 + 11 + 1 + + + + + 40 + 9 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + 217 + 618 + 9 + 1 + + + + + 43 + 3 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 43 + 258 + 251 + 3 + 1 + + + + + 49 + 5 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 49 + 392 + 449 + 5 + 1 + + + + + 49 + 4 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 49 + 451 + 449 + 4 + 0 + + + + + 52 + 7 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 52 + 490 + 591 + 7 + 1 + + + + + 52 + 6 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 52 + 593 + 591 + 6 + 0 + + + + + 43 + 2 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 43 + 611 + 251 + 2 + 0 + + + + + 40 + 8 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + 623 + 618 + 8 + 0 + + + + + 38 + 10 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 38 + 653 + 648 + 10 + 0 + + + + + 31 + 12 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + 869 + 864 + 12 + 0 + + + + + 29 + 14 + + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + 899 + 894 + 14 + 0 + + + + 9 + + + 13 + + Coverlet.Core.Reporters.LcovReporter + 0 + Coverlet.Core.Abstractions.ReporterOutputType Coverlet.Core.Reporters.LcovReporter::get_OutputType() + 13 + + + + 15 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::get_Format() + 15 + + + + 17 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::get_Extension() + 17 + + + + 20 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 20 + + + + 21 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + + + + 22 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 22 + + + + 23 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 23 + + + + 26 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 26 + + + + 27 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 27 + + + + 29 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + + + + 30 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 30 + + + + 31 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + + + + 32 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 32 + + + + 33 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 33 + + + + 34 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 34 + + + + 35 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 35 + + + + 37 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 37 + + + + 38 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 38 + + + + 39 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 39 + + + + 40 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + + + + 41 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 41 + + + + 43 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 43 + + + + 44 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 44 + + + + 46 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 46 + + + + 47 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 47 + + + + 49 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 49 + + + + 50 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 50 + + + + 52 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 52 + + + + 53 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 53 + + + + 54 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 54 + + + + 55 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 55 + + + + 56 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 56 + + + + 57 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 57 + + + + 59 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 59 + + + + 60 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 60 + + + + 62 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 62 + + + + 63 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 63 + + + + 65 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 65 + + + + 66 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 66 + + + + 68 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 68 + + + + 69 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 69 + + + + 70 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 70 + + + + 72 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 72 + + + + 73 + + Coverlet.Core.Reporters.LcovReporter + 0 + System.String Coverlet.Core.Reporters.LcovReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 73 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\LcovReporter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\OpenCoverReporter.cs + + + + + 24 + 0 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 24 + 18 + 16 + 0 + 0 + + + + + 24 + 1 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 24 + 30 + 16 + 1 + 1 + + + + + 40 + 27 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + 125 + 3917 + 27 + 1 + + + + + 56 + 25 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 56 + 373 + 3857 + 25 + 1 + + + + + 63 + 23 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 63 + 490 + 3821 + 23 + 1 + + + + + 74 + 17 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 74 + 601 + 3197 + 17 + 1 + + + + + 77 + 3 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 77 + 642 + 635 + 3 + 1 + + + + + 94 + 4 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + 1075 + 1073 + 4 + 0 + + + + + 94 + 5 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + 1097 + 1073 + 5 + 1 + + + + + 123 + 9 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 123 + 1709 + 2210 + 9 + 1 + + + + + 141 + 6 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 141 + 2188 + 2186 + 6 + 0 + + + + + 141 + 7 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 141 + 2196 + 2186 + 7 + 1 + + + + + 123 + 8 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 123 + 2215 + 2210 + 8 + 0 + + + + + 150 + 11 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 150 + 2257 + 2611 + 11 + 1 + + + + + 150 + 10 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 150 + 2616 + 2611 + 10 + 0 + + + + + 166 + 12 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 166 + 2647 + 2645 + 12 + 0 + + + + + 166 + 13 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 166 + 2653 + 2645 + 13 + 1 + + + + + 179 + 14 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 179 + 3039 + 3037 + 14 + 0 + + + + + 179 + 15 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 179 + 3046 + 3037 + 15 + 1 + + + + + 77 + 2 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 77 + 3190 + 635 + 2 + 0 + + + + + 74 + 16 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 74 + 3202 + 3197 + 16 + 0 + + + + + 194 + 18 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 194 + 3233 + 3231 + 18 + 0 + + + + + 194 + 19 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 194 + 3239 + 3231 + 19 + 1 + + + + + 211 + 20 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 211 + 3644 + 3642 + 20 + 0 + + + + + 211 + 21 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 211 + 3651 + 3642 + 21 + 1 + + + + + 63 + 22 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 63 + 3826 + 3821 + 22 + 0 + + + + + 56 + 24 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 56 + 3862 + 3857 + 24 + 0 + + + + + 40 + 26 + + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + 3922 + 3917 + 26 + 0 + + + + 10 + + + 16 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + Coverlet.Core.Abstractions.ReporterOutputType Coverlet.Core.Reporters.OpenCoverReporter::get_OutputType() + 16 + + + + 18 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::get_Format() + 18 + + + + 20 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::get_Extension() + 20 + + + + 23 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 23 + + + + 24 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 24 + + + + 25 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 25 + + + + 26 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 26 + + + + 29 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + + + + 30 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 30 + + + + 31 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + + + + 32 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 32 + + + + 33 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 33 + + + + 35 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 35 + + + + 36 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 36 + + + + 38 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 38 + + + + 40 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + + + + 41 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 41 + + + + 42 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 42 + + + + 43 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 43 + + + + 45 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 45 + + + + 46 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 46 + + + + 47 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 47 + + + + 49 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 49 + + + + 50 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 50 + + + + 51 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 51 + + + + 53 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 53 + + + + 54 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 54 + + + + 56 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 56 + + + + 57 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 57 + + + + 58 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 58 + + + + 59 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 59 + + + + 60 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 60 + + + + 61 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 61 + + + + 63 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 63 + + + + 64 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 64 + + + + 65 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 65 + + + + 66 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 66 + + + + 68 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 68 + + + + 70 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 70 + + + + 71 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 71 + + + + 72 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 72 + + + + 74 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 74 + + + + 75 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 75 + + + + 77 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 77 + + + + 78 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 78 + + + + 80 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 80 + + + + 81 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 81 + + + + 82 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 82 + + + + 83 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 83 + + + + 85 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 85 + + + + 87 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 87 + + + + 88 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 88 + + + + 89 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 89 + + + + 90 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 90 + + + + 91 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 91 + + + + 92 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 92 + + + + 93 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 93 + + + + 94 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 94 + + + + 96 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 96 + + + + 98 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 98 + + + + 99 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 99 + + + + 101 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 101 + + + + 102 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 102 + + + + 103 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 103 + + + + 104 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 104 + + + + 105 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 105 + + + + 106 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 106 + + + + 107 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 107 + + + + 108 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 108 + + + + 109 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 109 + + + + 110 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 110 + + + + 111 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 111 + + + + 112 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 112 + + + + 113 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 113 + + + + 116 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 116 + + + + 117 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 117 + + + + 118 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 118 + + + + 119 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 119 + + + + 120 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 120 + + + + 121 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 121 + + + + 123 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 123 + + + + 124 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 124 + + + + 125 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 125 + + + + 126 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 126 + + + + 128 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 128 + + + + 129 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 129 + + + + 130 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 130 + + + + 131 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 131 + + + + 132 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 132 + + + + 133 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 133 + + + + 134 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 134 + + + + 135 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 135 + + + + 136 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 136 + + + + 137 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 137 + + + + 138 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 138 + + + + 139 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 139 + + + + 141 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 141 + + + + 142 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 142 + + + + 143 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 143 + + + + 144 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 144 + + + + 145 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 145 + + + + 147 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 147 + + + + 148 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 148 + + + + 150 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 150 + + + + 151 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 151 + + + + 152 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 152 + + + + 153 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 153 + + + + 154 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 154 + + + + 155 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 155 + + + + 156 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 156 + + + + 157 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 157 + + + + 158 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 158 + + + + 159 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 159 + + + + 160 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 160 + + + + 161 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 161 + + + + 162 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 162 + + + + 163 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 163 + + + + 165 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 165 + + + + 166 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 166 + + + + 167 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 167 + + + + 169 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 169 + + + + 170 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 170 + + + + 171 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 171 + + + + 172 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 172 + + + + 173 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 173 + + + + 174 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 174 + + + + 175 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 175 + + + + 176 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 176 + + + + 177 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 177 + + + + 178 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 178 + + + + 179 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 179 + + + + 180 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 180 + + + + 182 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 182 + + + + 183 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 183 + + + + 184 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 184 + + + + 185 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 185 + + + + 186 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 186 + + + + 187 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 187 + + + + 188 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 188 + + + + 189 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 189 + + + + 190 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 190 + + + + 191 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 191 + + + + 193 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 193 + + + + 194 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 194 + + + + 195 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 195 + + + + 197 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 197 + + + + 198 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 198 + + + + 199 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 199 + + + + 200 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 200 + + + + 201 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 201 + + + + 203 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 203 + + + + 204 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 204 + + + + 205 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 205 + + + + 206 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 206 + + + + 207 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 207 + + + + 208 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 208 + + + + 209 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 209 + + + + 210 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 210 + + + + 211 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 211 + + + + 212 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 212 + + + + 213 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 213 + + + + 214 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 214 + + + + 216 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 216 + + + + 217 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 217 + + + + 218 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 218 + + + + 219 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 219 + + + + 220 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 220 + + + + 221 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 221 + + + + 222 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 222 + + + + 224 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 224 + + + + 225 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 225 + + + + 226 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 226 + + + + 227 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 227 + + + + 229 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 229 + + + + 230 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 230 + + + + 231 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 231 + + + + 232 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 232 + + + + 234 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 234 + + + + 235 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 235 + + + + 236 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 236 + + + + 237 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 237 + + + + 238 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 238 + + + + 239 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 239 + + + + 240 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 240 + + + + 241 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 241 + + + + 242 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 242 + + + + 243 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 243 + + + + 244 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 244 + + + + 245 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 245 + + + + 247 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 247 + + + + 248 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 248 + + + + 249 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 249 + + + + 251 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 251 + + + + 252 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 252 + + + + 254 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 254 + + + + 255 + + Coverlet.Core.Reporters.OpenCoverReporter + 0 + System.String Coverlet.Core.Reporters.OpenCoverReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 255 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\OpenCoverReporter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\ReporterFactory.cs + + + 11 + + + 26 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Boolean Coverlet.Core.Reporters.ReporterFactory::IsValidFormat() + 26 + + + + 27 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Boolean Coverlet.Core.Reporters.ReporterFactory::IsValidFormat() + 27 + + + + 28 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Boolean Coverlet.Core.Reporters.ReporterFactory::IsValidFormat() + 28 + + + + 31 + + Coverlet.Core.Reporters.ReporterFactory + 0 + Coverlet.Core.Abstractions.IReporter Coverlet.Core.Reporters.ReporterFactory::CreateReporter() + 31 + + + + 15 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 15 + + + + 16 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 16 + + + + 17 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 17 + + + + 18 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 18 + + + + 19 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 19 + + + + 20 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 20 + + + + 21 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 21 + + + + 22 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 22 + + + + 23 + + Coverlet.Core.Reporters.ReporterFactory + 0 + System.Void Coverlet.Core.Reporters.ReporterFactory::.ctor(System.String) + 23 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\ReporterFactory.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\TeamCityReporter.cs + + + + + 21 + 0 + + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + 18 + 16 + 0 + 0 + + + + + 21 + 1 + + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + 30 + 16 + 1 + 1 + + + + 12 + + + 13 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + Coverlet.Core.Abstractions.ReporterOutputType Coverlet.Core.Reporters.TeamCityReporter::get_OutputType() + 13 + + + + 15 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::get_Format() + 15 + + + + 17 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::get_Extension() + 17 + + + + 20 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 20 + + + + 21 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 21 + + + + 22 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 22 + + + + 23 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 23 + + + + 27 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 27 + + + + 28 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 28 + + + + 29 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + + + + 30 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 30 + + + + 33 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 33 + + + + 34 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 34 + + + + 35 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 35 + + + + 36 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 36 + + + + 39 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 39 + + + + 40 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.String Coverlet.Core.Reporters.TeamCityReporter::Report(Coverlet.Core.CoverageResult,Coverlet.Core.Abstractions.ISourceRootTranslator) + 40 + + + + 43 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputLineCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 43 + + + + 45 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputLineCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 45 + + + + 48 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputLineCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 48 + + + + 49 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputLineCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 49 + + + + 52 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputBranchCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 52 + + + + 54 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputBranchCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 54 + + + + 57 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputBranchCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 57 + + + + 58 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputBranchCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 58 + + + + 61 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputMethodCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 61 + + + + 63 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputMethodCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 63 + + + + 66 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputMethodCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 66 + + + + 67 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputMethodCoverage(Coverlet.Core.CoverageDetails,System.Text.StringBuilder) + 67 + + + + 70 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputTeamCityServiceMessage(System.String,System.Double,System.Text.StringBuilder) + 70 + + + + 71 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputTeamCityServiceMessage(System.String,System.Double,System.Text.StringBuilder) + 71 + + + + 72 + + Coverlet.Core.Reporters.TeamCityReporter + 0 + System.Void Coverlet.Core.Reporters.TeamCityReporter::OutputTeamCityServiceMessage(System.String,System.Double,System.Text.StringBuilder) + 72 + + + + C:\GitHub\coverlet\src\coverlet.core\Reporters\TeamCityReporter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\CecilAssemblyResolver.cs + + + + + 89 + 0 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 89 + 13 + 11 + 0 + 0 + + + + + 89 + 1 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 89 + 18 + 11 + 1 + 1 + + + + + 94 + 2 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 94 + 38 + 36 + 2 + 0 + + + + + 94 + 3 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 94 + 43 + 36 + 3 + 1 + + + + + 99 + 4 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 99 + 67 + 65 + 4 + 0 + + + + + 99 + 5 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 99 + 72 + 65 + 5 + 1 + + + + + 104 + 9 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 104 + 77 + 134 + 9 + 1 + + + + + 106 + 6 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 106 + 106 + 104 + 6 + 0 + + + + + 106 + 7 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 106 + 111 + 104 + 7 + 1 + + + + + 104 + 8 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 104 + 136 + 134 + 8 + 0 + + + + + 117 + 0 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 117 + 11 + 9 + 0 + 0 + + + + + 117 + 1 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 117 + 20 + 9 + 1 + 1 + + + + + 131 + 2 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 131 + 50 + 48 + 2 + 0 + + + + + 131 + 3 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 131 + 55 + 48 + 3 + 1 + + + + + 163 + 0 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 163 + 36 + 34 + 0 + 0 + + + + + 163 + 1 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 163 + 62 + 34 + 1 + 1 + + + + + 169 + 2 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 169 + 79 + 77 + 2 + 0 + + + + + 169 + 3 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 169 + 87 + 77 + 3 + 1 + + + + + 177 + 13 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 177 + 131 + 463 + 13 + 1 + + + + + 182 + 11 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 182 + 202 + 415 + 11 + 1 + + + + + 185 + 4 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 185 + 235 + 233 + 4 + 0 + + + + + 185 + 5 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 185 + 241 + 233 + 5 + 1 + + + + + 193 + 6 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 193 + 315 + 313 + 6 + 0 + + + + + 193 + 7 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 193 + 318 + 313 + 7 + 1 + + + + + 199 + 8 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 199 + 340 + 338 + 8 + 0 + + + + + 199 + 9 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 199 + 374 + 338 + 9 + 1 + + + + + 182 + 10 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 182 + 420 + 415 + 10 + 0 + + + + + 177 + 12 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 177 + 468 + 463 + 12 + 0 + + + + + 212 + 14 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 212 + 488 + 486 + 14 + 0 + + + + + 212 + 15 + + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 212 + 499 + 486 + 15 + 1 + + + + + 262 + 7 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 262 + 36 + 204 + 7 + 1 + + + + + 264 + 0 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 264 + 60 + 58 + 0 + 0 + + + + + 264 + 1 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 264 + 66 + 58 + 1 + 1 + + + + + 270 + 5 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 270 + 82 + 194 + 5 + 1 + + + + + 272 + 2 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 272 + 110 + 108 + 2 + 0 + + + + + 272 + 3 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 272 + 181 + 108 + 3 + 1 + + + + + 270 + 4 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 270 + 196 + 194 + 4 + 0 + + + + + 262 + 6 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 262 + 209 + 204 + 6 + 0 + + + + + 233 + 0 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 233 + 69 + 67 + 0 + 0 + + + + + 233 + 1 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 233 + 75 + 67 + 1 + 1 + + + + + 242 + 3 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 242 + 142 + 340 + 3 + 1 + + + + + 242 + 2 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 242 + 345 + 340 + 2 + 0 + + + + + 252 + 5 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 252 + 393 + 425 + 5 + 1 + + + + + 252 + 4 + + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 252 + 427 + 425 + 4 + 0 + + + + + 301 + 0 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 301 + 48 + 46 + 0 + 0 + + + + + 301 + 1 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 301 + 51 + 46 + 1 + 1 + + + + + 302 + 2 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 302 + 73 + 71 + 2 + 0 + + + + + 302 + 3 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 302 + 128 + 71 + 3 + 1 + + + + + 307 + 4 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 307 + 131 + 129 + 4 + 0 + + + + + 307 + 5 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 307 + 134 + 129 + 5 + 1 + + + + + 308 + 6 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 308 + 156 + 154 + 6 + 0 + + + + + 308 + 7 + + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 308 + 198 + 154 + 7 + 1 + + + + 13 + + + 88 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 88 + + + + 89 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 89 + + + + 90 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 90 + + + + 91 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 91 + + + + 94 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 94 + + + + 95 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 95 + + + + 96 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 96 + + + + 99 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 99 + + + + 100 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 100 + + + + 101 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 101 + + + + 104 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 104 + + + + 105 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 105 + + + + 106 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 106 + + + + 107 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 107 + + + + 108 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 108 + + + + 110 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 110 + + + + 112 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 112 + + + + 113 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::CheckIfSearchingNetstandard(Mono.Cecil.AssemblyNameReference) + 113 + + + + 116 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 116 + + + + 117 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 117 + + + + 118 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 118 + + + + 119 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 119 + + + + 122 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 122 + + + + 124 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 124 + + + + 125 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 125 + + + + 127 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 127 + + + + 128 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 128 + + + + 129 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 129 + + + + 131 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 131 + + + + 132 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 132 + + + + 133 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 133 + + + + 136 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 136 + + + + 139 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::Resolve(Mono.Cecil.AssemblyNameReference) + 139 + + + + 142 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::IsDotNetCore() + 142 + + + + 144 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::IsDotNetCore() + 144 + + + + 145 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::IsDotNetCore() + 145 + + + + 160 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 160 + + + + 161 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 161 + + + + 163 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 163 + + + + 164 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 164 + + + + 165 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 165 + + + + 166 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 166 + + + + 169 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 169 + + + + 170 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 170 + + + + 171 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 171 + + + + 174 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 174 + + + + 175 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 175 + + + + 177 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 177 + + + + 178 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 178 + + + + 179 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 179 + + + + 180 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 180 + + + + 181 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 181 + + + + 182 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 182 + + + + 183 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 183 + + + + 185 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 185 + + + + 186 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 186 + + + + 187 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 187 + + + + 191 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 191 + + + + 192 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 192 + + + + 193 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 193 + + + + 194 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 194 + + + + 195 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 195 + + + + 199 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 199 + + + + 200 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 200 + + + + 201 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 201 + + + + 202 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 202 + + + + 203 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 203 + + + + 204 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 204 + + + + 205 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 205 + + + + 207 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 207 + + + + 208 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 208 + + + + 209 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 209 + + + + 210 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 210 + + + + 212 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 212 + + + + 213 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 213 + + + + 214 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 214 + + + + 217 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 217 + + + + 218 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + Mono.Cecil.AssemblyDefinition Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::TryWithCustomResolverOnDotNetCore(Mono.Cecil.AssemblyNameReference) + 218 + + + + 54 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 54 + + + + 56 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 56 + + + + 58 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 58 + + + + 59 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 59 + + + + 60 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 60 + + + + 61 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 61 + + + + 62 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 62 + + + + 63 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 63 + + + + 64 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 64 + + + + 65 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 65 + + + + 67 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 67 + + + + 68 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.cctor() + 68 + + + + 70 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 70 + + + + 71 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 71 + + + + 72 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 72 + + + + 73 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 73 + + + + 77 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 77 + + + + 78 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 78 + + + + 79 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 79 + + + + 80 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 80 + + + + 81 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 81 + + + + 82 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 82 + + + + 83 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 83 + + + + 84 + + Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetstandardAwareAssemblyResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 84 + + + + 259 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 259 + + + + 260 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 260 + + + + 262 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 262 + + + + 263 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 263 + + + + 264 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 264 + + + + 265 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 265 + + + + 266 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 266 + + + + 269 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 269 + + + + 270 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 270 + + + + 271 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 271 + + + + 272 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 272 + + + + 273 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 273 + + + + 274 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 274 + + + + 275 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 275 + + + + 276 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 276 + + + + 278 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 278 + + + + 279 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 279 + + + + 281 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 281 + + + + 282 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Boolean Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1<System.String>) + 282 + + + + 223 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 223 + + + + 226 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 226 + + + + 227 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 227 + + + + 228 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 228 + + + + 230 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 230 + + + + 231 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 231 + + + + 232 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 232 + + + + 233 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 233 + + + + 234 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 234 + + + + 235 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 235 + + + + 238 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 238 + + + + 239 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 239 + + + + 240 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 240 + + + + 241 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 241 + + + + 242 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 242 + + + + 243 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 243 + + + + 244 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 244 + + + + 245 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 245 + + + + 246 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 246 + + + + 247 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 247 + + + + 248 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 248 + + + + 249 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 249 + + + + 251 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 251 + + + + 252 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 252 + + + + 253 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 253 + + + + 254 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 254 + + + + 255 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 255 + + + + 256 + + Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver + 0 + System.Void Coverlet.Core.Instrumentation.NetCoreSharedFrameworkResolver::.ctor(System.String,Coverlet.Core.Abstractions.ILogger) + 256 + + + + 295 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 295 + + + + 296 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 296 + + + + 297 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 297 + + + + 298 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 298 + + + + 300 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 300 + + + + 301 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 301 + + + + 302 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 302 + + + + 303 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 303 + + + + 304 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 304 + + + + 307 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 307 + + + + 308 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 308 + + + + 309 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 309 + + + + 310 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 310 + + + + 313 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 313 + + + + 314 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.String>> Coverlet.Core.Instrumentation.RuntimeConfigurationReader::GetFrameworks() + 314 + + + + 289 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Void Coverlet.Core.Instrumentation.RuntimeConfigurationReader::.ctor(System.String) + 289 + + + + 290 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Void Coverlet.Core.Instrumentation.RuntimeConfigurationReader::.ctor(System.String) + 290 + + + + 291 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Void Coverlet.Core.Instrumentation.RuntimeConfigurationReader::.ctor(System.String) + 291 + + + + 292 + + Coverlet.Core.Instrumentation.RuntimeConfigurationReader + 0 + System.Void Coverlet.Core.Instrumentation.RuntimeConfigurationReader::.ctor(System.String) + 292 + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\CecilAssemblyResolver.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\Instrumenter.cs + + + + + 84 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 84 + 14 + 12 + 0 + 0 + + + + + 84 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 84 + 19 + 12 + 1 + 1 + + + + + 93 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 93 + 5 + 3 + 0 + 0 + + + + + 93 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 93 + 11 + 3 + 1 + 1 + + + + + 107 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 107 + 25 + 23 + 0 + 0 + + + + + 109 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 109 + 56 + 54 + 2 + 0 + + + + + 109 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 109 + 62 + 54 + 3 + 1 + + + + + 114 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 114 + 69 + 67 + 4 + 0 + + + + + 114 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 114 + 97 + 67 + 5 + 1 + + + + + 107 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 107 + 125 + 23 + 1 + 1 + + + + + 151 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 151 + 106 + 104 + 0 + 0 + + + + + 153 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 153 + 122 + 172 + 3 + 1 + + + + + 153 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 153 + 174 + 172 + 2 + 0 + + + + + 151 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 151 + 192 + 104 + 1 + 1 + + + + + 159 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 159 + 206 + 204 + 4 + 0 + + + + + 159 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 159 + 219 + 204 + 5 + 1 + + + + + 168 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 168 + 5 + 91 + 5 + 1 + + + + + 171 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 171 + 31 + 29 + 0 + 0 + + + + + 171 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 171 + 67 + 29 + 1 + 1 + + + + + 171 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 171 + 72 + 70 + 2 + 0 + + + + + 171 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 171 + 77 + 70 + 3 + 1 + + + + + 168 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 168 + 93 + 91 + 4 + 0 + + + + + 183 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::Is_System_Threading_Interlocked_CoreLib_Type(Mono.Cecil.TypeDefinition) + 183 + 9 + 7 + 0 + 0 + + + + + 183 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::Is_System_Threading_Interlocked_CoreLib_Type(Mono.Cecil.TypeDefinition) + 183 + 27 + 7 + 1 + 1 + + + + + 194 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 194 + 91 + 89 + 0 + 0 + + + + + 194 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 194 + 105 + 89 + 1 + 1 + + + + + 211 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 211 + 98 + 96 + 0 + 0 + + + + + 211 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 211 + 112 + 96 + 1 + 1 + + + + + 217 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 217 + 141 + 222 + 5 + 1 + + + + + 219 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 219 + 165 + 163 + 2 + 0 + + + + + 219 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 219 + 214 + 163 + 3 + 1 + + + + + 217 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 217 + 224 + 222 + 4 + 0 + + + + + 232 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 232 + 333 + 331 + 6 + 0 + + + + + 232 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 232 + 358 + 331 + 7 + 1 + + + + + 237 + 19 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 237 + 373 + 525 + 19 + 1 + + + + + 239 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 393 + 391 + 8 + 0 + + + + + 239 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 403 + 401 + 10 + 0 + + + + + 239 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 440 + 391 + 9 + 1 + + + + + 239 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 440 + 401 + 11 + 1 + + + + + 239 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 447 + 445 + 12 + 0 + + + + + 245 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 245 + 462 + 460 + 14 + 0 + + + + + 247 + 16 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 247 + 472 + 470 + 16 + 0 + + + + + 247 + 17 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 247 + 489 + 470 + 17 + 1 + + + + + 245 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 245 + 505 + 460 + 15 + 1 + + + + + 239 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + 517 + 445 + 13 + 1 + + + + + 237 + 18 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 237 + 530 + 525 + 18 + 0 + + + + + 257 + 20 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 257 + 560 + 558 + 20 + 0 + + + + + 257 + 21 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 257 + 595 + 558 + 21 + 1 + + + + + 265 + 22 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 265 + 629 + 627 + 22 + 0 + + + + + 265 + 23 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 265 + 661 + 627 + 23 + 1 + + + + + 278 + 24 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 278 + 852 + 850 + 24 + 0 + + + + + 278 + 25 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 278 + 859 + 850 + 25 + 1 + + + + + 283 + 26 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 283 + 970 + 965 + 26 + 0 + + + + + 311 + 33 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 311 + 1335 + 1452 + 33 + 1 + + + + + 314 + 28 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 314 + 1362 + 1360 + 28 + 0 + + + + + 314 + 29 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 314 + 1373 + 1360 + 29 + 1 + + + + + 314 + 30 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 314 + 1380 + 1378 + 30 + 0 + + + + + 314 + 31 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 314 + 1439 + 1378 + 31 + 1 + + + + + 311 + 32 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 311 + 1454 + 1452 + 32 + 0 + + + + + 283 + 27 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 283 + 1534 + 965 + 27 + 1 + + + + + 347 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 347 + 140 + 351 + 9 + 1 + + + + + 354 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 354 + 236 + 234 + 0 + 0 + + + + + 354 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 354 + 246 + 234 + 1 + 1 + + + + + 356 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 356 + 269 + 267 + 2 + 0 + + + + + 356 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 356 + 279 + 267 + 3 + 1 + + + + + 358 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 358 + 302 + 300 + 4 + 0 + + + + + 358 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 358 + 312 + 300 + 5 + 1 + + + + + 360 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 360 + 335 + 333 + 6 + 0 + + + + + 360 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 360 + 343 + 333 + 7 + 1 + + + + + 347 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 347 + 356 + 351 + 8 + 0 + + + + + 364 + 33 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 364 + 392 + 1251 + 33 + 1 + + + + + 368 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 368 + 447 + 496 + 11 + 1 + + + + + 368 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 368 + 498 + 496 + 10 + 0 + + + + + 373 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 373 + 537 + 591 + 13 + 1 + + + + + 373 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 373 + 593 + 591 + 12 + 0 + + + + + 381 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 381 + 672 + 670 + 14 + 0 + + + + + 381 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 381 + 680 + 670 + 15 + 1 + + + + + 384 + 27 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 384 + 705 + 1084 + 27 + 1 + + + + + 386 + 16 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 386 + 743 + 738 + 16 + 0 + + + + + 388 + 18 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 388 + 771 + 769 + 18 + 0 + + + + + 388 + 19 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 388 + 794 + 769 + 19 + 1 + + + + + 397 + 21 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 397 + 839 + 900 + 21 + 1 + + + + + 397 + 20 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 397 + 902 + 900 + 20 + 0 + + + + + 386 + 17 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 386 + 936 + 738 + 17 + 1 + + + + + 403 + 22 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 403 + 982 + 980 + 22 + 0 + + + + + 403 + 23 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 403 + 1023 + 980 + 23 + 1 + + + + + 407 + 24 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 407 + 1048 + 1046 + 24 + 0 + + + + + 407 + 25 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 407 + 1066 + 1046 + 25 + 1 + + + + + 384 + 26 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 384 + 1089 + 1084 + 26 + 0 + + + + + 415 + 31 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 415 + 1128 + 1205 + 31 + 1 + + + + + 417 + 28 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 417 + 1154 + 1152 + 28 + 0 + + + + + 417 + 29 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 417 + 1177 + 1152 + 29 + 1 + + + + + 415 + 30 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 415 + 1207 + 1205 + 30 + 0 + + + + + 364 + 32 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 364 + 1256 + 1251 + 32 + 0 + + + + + 439 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 439 + 21 + 19 + 0 + 0 + + + + + 439 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 439 + 29 + 19 + 1 + 1 + + + + + 445 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 445 + 52 + 200 + 9 + 1 + + + + + 449 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 449 + 117 + 115 + 2 + 0 + + + + + 454 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 454 + 154 + 152 + 4 + 0 + + + + + 456 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 456 + 185 + 183 + 6 + 0 + + + + + 456 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 456 + 190 + 183 + 7 + 1 + + + + + 454 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 454 + 191 + 152 + 5 + 1 + + + + + 449 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 449 + 192 + 115 + 3 + 1 + + + + + 445 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 445 + 205 + 200 + 8 + 0 + + + + + 473 + 31 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 473 + 23 + 567 + 31 + 1 + + + + + 477 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 477 + 108 + 106 + 0 + 0 + + + + + 478 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 478 + 132 + 130 + 2 + 0 + + + + + 478 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 478 + 140 + 130 + 3 + 1 + + + + + 477 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 477 + 145 + 106 + 1 + 1 + + + + + 480 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 480 + 159 + 157 + 4 + 0 + + + + + 480 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 480 + 173 + 157 + 5 + 1 + + + + + 480 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 480 + 183 + 178 + 6 + 0 + + + + + 482 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 482 + 197 + 195 + 8 + 0 + + + + + 482 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 482 + 247 + 195 + 9 + 1 + + + + + 482 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 482 + 254 + 252 + 10 + 0 + + + + + 482 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 482 + 260 + 252 + 11 + 1 + + + + + 489 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 489 + 290 + 288 + 12 + 0 + + + + + 489 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 489 + 293 + 288 + 13 + 1 + + + + + 489 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 489 + 306 + 304 + 14 + 0 + + + + + 489 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 489 + 322 + 304 + 15 + 1 + + + + + 480 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 480 + 323 + 178 + 7 + 1 + + + + + 495 + 16 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 495 + 346 + 344 + 16 + 0 + + + + + 495 + 17 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 495 + 352 + 344 + 17 + 1 + + + + + 500 + 18 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 500 + 371 + 369 + 18 + 0 + + + + + 500 + 19 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 500 + 377 + 369 + 19 + 1 + + + + + 505 + 20 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 505 + 385 + 383 + 20 + 0 + + + + + 505 + 21 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 505 + 410 + 383 + 21 + 1 + + + + + 505 + 22 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 505 + 417 + 415 + 22 + 0 + + + + + 505 + 23 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 505 + 423 + 415 + 23 + 1 + + + + + 510 + 24 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 510 + 451 + 449 + 24 + 0 + + + + + 510 + 25 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 510 + 469 + 449 + 25 + 1 + + + + + 516 + 26 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 516 + 479 + 477 + 26 + 0 + + + + + 516 + 27 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 516 + 496 + 477 + 27 + 1 + + + + + 517 + 28 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 517 + 523 + 521 + 28 + 0 + + + + + 517 + 29 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 517 + 540 + 521 + 29 + 1 + + + + + 473 + 30 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 473 + 572 + 567 + 30 + 0 + + + + + 522 + 35 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 522 + 603 + 665 + 35 + 1 + + + + + 524 + 32 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 524 + 646 + 644 + 32 + 0 + + + + + 524 + 33 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 524 + 657 + 644 + 33 + 1 + + + + + 522 + 34 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 522 + 667 + 665 + 34 + 0 + + + + + 535 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 535 + 47 + 43 + 1 + 1 + + + + + 537 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 537 + 55 + 53 + 2 + 0 + + + + + 537 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 537 + 69 + 53 + 3 + 1 + + + + + 537 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 537 + 74 + 72 + 4 + 0 + + + + + 539 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 539 + 84 + 82 + 6 + 0 + + + + + 539 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 539 + 101 + 82 + 7 + 1 + + + + + 539 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 539 + 116 + 114 + 8 + 0 + + + + + 537 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 537 + 133 + 72 + 5 + 1 + + + + + 547 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 547 + 152 + 148 + 11 + 1 + + + + + 550 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 550 + 166 + 162 + 13 + 1 + + + + + 535 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 535 + 174 + 43 + 0 + 0 + + + + + 539 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 539 + 174 + 114 + 9 + 1 + + + + + 547 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 547 + 174 + 148 + 10 + 0 + + + + + 550 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 550 + 174 + 162 + 12 + 0 + + + + + 577 + 27 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 577 + 110 + 641 + 27 + 1 + + + + + 585 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 585 + 199 + 247 + 3 + 1 + + + + + 585 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 585 + 218 + 216 + 0 + 0 + + + + + 585 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 585 + 242 + 216 + 1 + 1 + + + + + 585 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 585 + 249 + 247 + 2 + 0 + + + + + 592 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 592 + 269 + 267 + 4 + 0 + + + + + 595 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 595 + 292 + 290 + 6 + 0 + + + + + 595 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 595 + 308 + 290 + 7 + 1 + + + + + 592 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 592 + 312 + 267 + 5 + 1 + + + + + 599 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 599 + 316 + 314 + 8 + 0 + + + + + 599 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 599 + 337 + 314 + 9 + 1 + + + + + 599 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 599 + 344 + 342 + 10 + 0 + + + + + 599 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 599 + 354 + 342 + 11 + 1 + + + + + 605 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 605 + 358 + 356 + 12 + 0 + + + + + 605 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 605 + 370 + 356 + 13 + 1 + + + + + 605 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 605 + 377 + 375 + 14 + 0 + + + + + 607 + 16 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 607 + 414 + 412 + 16 + 0 + + + + + 607 + 17 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 607 + 424 + 412 + 17 + 1 + + + + + 605 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 605 + 470 + 375 + 15 + 1 + + + + + 619 + 25 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 619 + 482 + 604 + 25 + 1 + + + + + 627 + 18 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 627 + 502 + 500 + 18 + 0 + + + + + 627 + 19 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 627 + 514 + 500 + 19 + 1 + + + + + 627 + 21 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 627 + 523 + 519 + 21 + 1 + + + + + 631 + 22 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 631 + 570 + 568 + 22 + 0 + + + + + 631 + 23 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 631 + 592 + 568 + 23 + 1 + + + + + 627 + 20 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 627 + 597 + 519 + 20 + 0 + + + + + 619 + 24 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 619 + 606 + 604 + 24 + 0 + + + + + 577 + 26 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 577 + 646 + 641 + 26 + 0 + + + + + 640 + 29 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 640 + 667 + 693 + 29 + 1 + + + + + 640 + 28 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 640 + 695 + 693 + 28 + 0 + + + + + 643 + 31 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 643 + 733 + 759 + 31 + 1 + + + + + 643 + 30 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 643 + 761 + 759 + 30 + 0 + + + + + 651 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 651 + 49 + 47 + 0 + 0 + + + + + 651 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 651 + 132 + 47 + 1 + 1 + + + + + 658 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 658 + 142 + 238 + 5 + 1 + + + + + 660 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 660 + 162 + 160 + 2 + 0 + + + + + 660 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 660 + 216 + 160 + 3 + 1 + + + + + 658 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 658 + 240 + 238 + 4 + 0 + + + + + 671 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 671 + 44 + 42 + 0 + 0 + + + + + 671 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 671 + 122 + 42 + 1 + 1 + + + + + 679 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 679 + 164 + 159 + 2 + 0 + + + + + 695 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 695 + 330 + 328 + 4 + 0 + + + + + 697 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 697 + 346 + 344 + 6 + 0 + + + + + 697 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 697 + 359 + 344 + 7 + 1 + + + + + 702 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 702 + 385 + 383 + 8 + 0 + + + + + 702 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 702 + 405 + 383 + 9 + 1 + + + + + 695 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 695 + 406 + 328 + 5 + 1 + + + + + 679 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 679 + 407 + 159 + 3 + 1 + + + + + 716 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + 17 + 12 + 0 + 0 + + + + + 719 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 719 + 35 + 33 + 2 + 0 + + + + + 721 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 721 + 44 + 42 + 4 + 0 + + + + + 721 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 721 + 51 + 42 + 5 + 1 + + + + + 719 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 719 + 60 + 33 + 3 + 1 + + + + + 727 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 727 + 69 + 67 + 6 + 0 + + + + + 727 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 727 + 76 + 67 + 7 + 1 + + + + + 716 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + 162 + 12 + 1 + 1 + + + + + 748 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 748 + 21 + 19 + 0 + 0 + + + + + 750 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 750 + 40 + 38 + 2 + 0 + + + + + 750 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 750 + 50 + 38 + 3 + 1 + + + + + 748 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 748 + 53 + 19 + 1 + 1 + + + + + 755 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 755 + 77 + 75 + 4 + 0 + + + + + 757 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 757 + 83 + 134 + 9 + 1 + + + + + 759 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 759 + 108 + 106 + 6 + 0 + + + + + 759 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 759 + 115 + 106 + 7 + 1 + + + + + 757 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 757 + 136 + 134 + 8 + 0 + + + + + 755 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 755 + 137 + 75 + 5 + 1 + + + + + 767 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 767 + 9 + 7 + 0 + 0 + + + + + 767 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 767 + 30 + 7 + 1 + 1 + + + + + 767 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 767 + 37 + 35 + 2 + 0 + + + + + 767 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 767 + 45 + 35 + 3 + 1 + + + + + 770 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 770 + 53 + 51 + 4 + 0 + + + + + 770 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 770 + 74 + 51 + 5 + 1 + + + + + 770 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 770 + 81 + 79 + 6 + 0 + + + + + 770 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 770 + 89 + 79 + 7 + 1 + + + + + 773 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 773 + 97 + 95 + 8 + 0 + + + + + 773 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 773 + 118 + 95 + 9 + 1 + + + + + 773 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 773 + 125 + 123 + 10 + 0 + + + + + 773 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 773 + 133 + 123 + 11 + 1 + + + + + 776 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 776 + 141 + 139 + 12 + 0 + + + + + 776 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 776 + 162 + 139 + 13 + 1 + + + + + 776 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 776 + 169 + 167 + 14 + 0 + + + + + 776 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 776 + 177 + 167 + 15 + 1 + + + + + 779 + 16 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 779 + 185 + 183 + 16 + 0 + + + + + 779 + 17 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 779 + 206 + 183 + 17 + 1 + + + + + 779 + 18 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 779 + 213 + 211 + 18 + 0 + + + + + 779 + 19 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 779 + 222 + 211 + 19 + 1 + + + + + 792 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 792 + 10 + 8 + 0 + 0 + + + + + 792 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 792 + 13 + 8 + 1 + 1 + + + + + 803 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 803 + 20 + 18 + 0 + 0 + + + + + 803 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 803 + 28 + 18 + 1 + 1 + + + + + 811 + 15 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 811 + 45 + 277 + 15 + 1 + + + + + 815 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 54 + 52 + 2 + 0 + + + + + 815 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 69 + 67 + 4 + 0 + + + + + 815 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 93 + 67 + 5 + 1 + + + + + 815 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 100 + 52 + 3 + 1 + + + + + 815 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 105 + 103 + 6 + 0 + + + + + 815 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + 113 + 103 + 7 + 1 + + + + + 822 + 13 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 822 + 129 + 227 + 13 + 1 + + + + + 827 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 827 + 174 + 172 + 8 + 0 + + + + + 827 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 827 + 207 + 172 + 9 + 1 + + + + + 827 + 10 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 827 + 214 + 212 + 10 + 0 + + + + + 827 + 11 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 827 + 219 + 212 + 11 + 1 + + + + + 822 + 12 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 822 + 229 + 227 + 12 + 0 + + + + + 811 + 14 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 811 + 282 + 277 + 14 + 0 + + + + + 844 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 27 + 25 + 0 + 0 + + + + + 844 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 52 + 50 + 2 + 0 + + + + + 844 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 78 + 76 + 4 + 0 + + + + + 844 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 103 + 101 + 6 + 0 + + + + + 844 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 133 + 101 + 7 + 1 + + + + + 844 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 136 + 25 + 1 + 1 + + + + + 844 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 136 + 50 + 3 + 1 + + + + + 844 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + 136 + 76 + 5 + 1 + + + + + 915 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 915 + 63 + 149 + 3 + 1 + + + + + 917 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 917 + 105 + 103 + 0 + 0 + + + + + 917 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 917 + 108 + 103 + 1 + 1 + + + + + 915 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 915 + 151 + 149 + 2 + 0 + + + + + 925 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 925 + 206 + 204 + 4 + 0 + + + + + 925 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 925 + 241 + 204 + 5 + 1 + + + + + 97 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Instrumentation.Instrumenter/<>c::<PrepareAttributes>b__34_0(System.String) + 97 + 13 + 11 + 0 + 0 + + + + + 97 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c + 0 + System.Collections.Generic.IEnumerable`1<System.String> Coverlet.Core.Instrumentation.Instrumenter/<>c::<PrepareAttributes>b__34_0(System.String) + 97 + 39 + 11 + 1 + 1 + + + + + 487 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 9 + 7 + 0 + 0 + + + + + 487 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 13 + 7 + 1 + 1 + + + + + 487 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 36 + 34 + 2 + 0 + + + + + 487 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 45 + 43 + 4 + 0 + + + + + 487 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 49 + 43 + 5 + 1 + + + + + 487 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<>c__DisplayClass43_1::<InstrumentType>b__1(Mono.Cecil.PropertyDefinition) + 487 + 72 + 34 + 3 + 1 + + + + + 857 + 0 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 857 + 68 + 66 + 0 + 0 + + + + + 857 + 1 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 857 + 75 + 66 + 1 + 1 + + + + + 859 + 9 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 859 + 121 + 288 + 9 + 1 + + + + + 861 + 2 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 162 + 160 + 2 + 0 + + + + + 861 + 4 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 196 + 194 + 4 + 0 + + + + + 861 + 3 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 219 + 160 + 3 + 1 + + + + + 861 + 5 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 219 + 194 + 5 + 1 + + + + + 861 + 6 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 224 + 222 + 6 + 0 + + + + + 861 + 7 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + 262 + 222 + 7 + 1 + + + + + 859 + 8 + + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 859 + 293 + 288 + 8 + 0 + + + + + 959 + 0 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 959 + 9 + 7 + 0 + 0 + + + + + 959 + 1 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 959 + 15 + 7 + 1 + 1 + + + + + 959 + 2 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 959 + 20 + 18 + 2 + 0 + + + + + 959 + 3 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 959 + 24 + 18 + 3 + 1 + + + + + 963 + 4 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 963 + 38 + 36 + 4 + 0 + + + + + 963 + 5 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 963 + 41 + 36 + 5 + 1 + + + + + 943 + 0 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 943 + 11 + 9 + 0 + 0 + + + + + 943 + 1 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 943 + 18 + 9 + 1 + 1 + + + + + 943 + 2 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 943 + 23 + 21 + 2 + 0 + + + + + 946 + 9 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 946 + 42 + 109 + 9 + 1 + + + + + 948 + 4 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 948 + 57 + 55 + 4 + 0 + + + + + 948 + 5 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 948 + 60 + 55 + 5 + 1 + + + + + 952 + 6 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 952 + 74 + 72 + 6 + 0 + + + + + 952 + 7 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 952 + 77 + 72 + 7 + 1 + + + + + 946 + 8 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 946 + 111 + 109 + 8 + 0 + + + + + 943 + 3 + + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 943 + 112 + 21 + 3 + 1 + + + + 14 + + + 55 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::get_SkipModule() + 55 + + + + 83 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 83 + + + + 84 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 84 + + + + 85 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 85 + + + + 86 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 86 + + + + 88 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 88 + + + + 89 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Enums.AssemblySearchType Coverlet.Core.Instrumentation.Instrumenter::DetermineHeuristics(System.String) + 89 + + + + 92 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 92 + + + + 93 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 93 + + + + 94 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 94 + + + + 95 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 95 + + + + 96 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 96 + + + + 97 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 97 + + + + 98 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 98 + + + + 99 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 99 + + + + 100 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 100 + + + + 101 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.String[] Coverlet.Core.Instrumentation.Instrumenter::PrepareAttributes(System.Collections.Generic.IEnumerable`1<System.String>,System.String[]) + 101 + + + + 104 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 104 + + + + 106 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 106 + + + + 107 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 107 + + + + 108 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 108 + + + + 109 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 109 + + + + 110 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 110 + + + + 111 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 111 + + + + 114 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 114 + + + + 115 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 115 + + + + 116 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 116 + + + + 119 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 119 + + + + 120 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 120 + + + + 124 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 124 + + + + 125 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 125 + + + + 128 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 128 + + + + 129 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 129 + + + + 130 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 130 + + + + 131 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 131 + + + + 133 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::CanInstrument() + 133 + + + + 136 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 136 + + + + 137 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 137 + + + + 138 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 138 + + + + 139 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 139 + + + + 140 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 140 + + + + 142 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 142 + + + + 143 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 143 + + + + 144 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 144 + + + + 145 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 145 + + + + 146 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 146 + + + + 147 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 147 + + + + 149 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 149 + + + + 151 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 151 + + + + 152 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 152 + + + + 153 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 153 + + + + 154 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 154 + + + + 155 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 155 + + + + 156 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 156 + + + + 157 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 157 + + + + 159 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 159 + + + + 161 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 161 + + + + 162 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Coverlet.Core.Instrumentation.InstrumenterResult Coverlet.Core.Instrumentation.Instrumenter::Instrument() + 162 + + + + 167 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 167 + + + + 168 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 168 + + + + 169 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 169 + + + + 171 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 171 + + + + 172 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 172 + + + + 173 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 173 + + + + 175 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 175 + + + + 177 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 177 + + + + 178 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsTypeExcluded(Mono.Cecil.TypeDefinition) + 178 + + + + 182 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::Is_System_Threading_Interlocked_CoreLib_Type(Mono.Cecil.TypeDefinition) + 182 + + + + 183 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::Is_System_Threading_Interlocked_CoreLib_Type(Mono.Cecil.TypeDefinition) + 183 + + + + 184 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::Is_System_Threading_Interlocked_CoreLib_Type(Mono.Cecil.TypeDefinition) + 184 + + + + 189 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 189 + + + + 190 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 190 + + + + 191 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 191 + + + + 192 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 192 + + + + 193 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 193 + + + + 194 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 194 + + + + 195 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 195 + + + + 196 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 196 + + + + 197 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 197 + + + + 199 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 199 + + + + 200 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 200 + + + + 201 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::CreateReachabilityHelper() + 201 + + + + 204 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 204 + + + + 205 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 205 + + + + 207 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 207 + + + + 208 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 208 + + + + 209 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 209 + + + + 210 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 210 + + + + 211 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 211 + + + + 212 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 212 + + + + 213 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 213 + + + + 214 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 214 + + + + 216 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 216 + + + + 217 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 217 + + + + 218 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 218 + + + + 219 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 219 + + + + 220 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 220 + + + + 221 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 221 + + + + 222 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 222 + + + + 223 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 223 + + + + 225 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 225 + + + + 227 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 227 + + + + 228 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 228 + + + + 229 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 229 + + + + 231 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 231 + + + + 232 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 232 + + + + 233 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 233 + + + + 234 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 234 + + + + 235 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 235 + + + + 237 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 237 + + + + 238 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 238 + + + + 239 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 239 + + + + 240 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 240 + + + + 241 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 241 + + + + 242 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 242 + + + + 243 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 243 + + + + 244 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 244 + + + + 245 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 245 + + + + 246 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 246 + + + + 247 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 247 + + + + 248 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 248 + + + + 250 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 250 + + + + 251 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 251 + + + + 252 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 252 + + + + 253 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 253 + + + + 254 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 254 + + + + 257 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 257 + + + + 258 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 258 + + + + 259 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 259 + + + + 260 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 260 + + + + 261 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 261 + + + + 263 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 263 + + + + 265 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 265 + + + + 266 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 266 + + + + 270 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 270 + + + + 271 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 271 + + + + 273 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 273 + + + + 274 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 274 + + + + 275 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 275 + + + + 276 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 276 + + + + 277 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 277 + + + + 278 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 278 + + + + 279 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 279 + + + + 280 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 280 + + + + 281 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 281 + + + + 283 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 283 + + + + 284 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 284 + + + + 289 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 289 + + + + 290 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 290 + + + + 291 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 291 + + + + 292 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 292 + + + + 294 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 294 + + + + 295 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 295 + + + + 296 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 296 + + + + 299 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 299 + + + + 300 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 300 + + + + 301 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 301 + + + + 302 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 302 + + + + 303 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 303 + + + + 304 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 304 + + + + 305 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 305 + + + + 306 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 306 + + + + 307 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 307 + + + + 308 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 308 + + + + 309 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 309 + + + + 310 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 310 + + + + 311 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 311 + + + + 312 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 312 + + + + 314 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 314 + + + + 315 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 315 + + + + 316 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 316 + + + + 317 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 317 + + + + 318 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 318 + + + + 319 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 319 + + + + 320 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 320 + + + + 321 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 321 + + + + 322 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 322 + + + + 323 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 323 + + + + 324 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 324 + + + + 325 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 325 + + + + 326 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 326 + + + + 327 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 327 + + + + 328 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 328 + + + + 330 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 330 + + + + 331 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 331 + + + + 333 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 333 + + + + 334 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentModule() + 334 + + + + 337 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 337 + + + + 338 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 338 + + + + 339 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 339 + + + + 340 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 340 + + + + 341 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 341 + + + + 343 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 343 + + + + 344 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 344 + + + + 346 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 346 + + + + 347 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 347 + + + + 348 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 348 + + + + 349 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 349 + + + + 350 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 350 + + + + 352 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 352 + + + + 354 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 354 + + + + 355 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 355 + + + + 356 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 356 + + + + 357 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 357 + + + + 358 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 358 + + + + 359 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 359 + + + + 360 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 360 + + + + 361 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 361 + + + + 362 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 362 + + + + 364 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 364 + + + + 365 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 365 + + + + 366 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 366 + + + + 368 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 368 + + + + 369 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 369 + + + + 370 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 370 + + + + 371 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 371 + + + + 373 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 373 + + + + 374 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 374 + + + + 375 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 375 + + + + 376 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 376 + + + + 378 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 378 + + + + 380 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 380 + + + + 381 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 381 + + + + 382 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 382 + + + + 384 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 384 + + + + 385 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 385 + + + + 386 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 386 + + + + 387 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 387 + + + + 388 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 388 + + + + 389 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 389 + + + + 391 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 391 + + + + 392 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 392 + + + + 394 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 394 + + + + 396 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 396 + + + + 397 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 397 + + + + 398 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 398 + + + + 400 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 400 + + + + 401 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 401 + + + + 402 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 402 + + + + 403 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 403 + + + + 404 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 404 + + + + 405 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 405 + + + + 406 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 406 + + + + 407 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 407 + + + + 408 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 408 + + + + 409 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 409 + + + + 410 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 410 + + + + 412 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 412 + + + + 413 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 413 + + + + 415 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 415 + + + + 416 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 416 + + + + 417 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 417 + + + + 418 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 418 + + + + 419 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 419 + + + + 420 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 420 + + + + 422 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 422 + + + + 423 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 423 + + + + 425 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 425 + + + + 426 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 426 + + + + 428 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 428 + + + + 429 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 429 + + + + 431 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 431 + + + + 432 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 432 + + + + 433 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::AddCustomModuleTrackerToModule(Mono.Cecil.ModuleDefinition) + 433 + + + + 436 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 436 + + + + 438 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 438 + + + + 439 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 439 + + + + 440 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 440 + + + + 441 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 441 + + + + 445 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 445 + + + + 446 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 446 + + + + 449 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 449 + + + + 450 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 450 + + + + 454 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 454 + + + + 455 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 455 + + + + 456 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 456 + + + + 457 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 457 + + + + 458 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 458 + + + + 460 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 460 + + + + 461 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 461 + + + + 462 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 462 + + + + 463 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 463 + + + + 464 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsMethodOfCompilerGeneratedClassOfAsyncStateMachineToBeExcluded(Mono.Cecil.MethodDefinition) + 464 + + + + 467 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 467 + + + + 468 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 468 + + + + 472 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 472 + + + + 473 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 473 + + + + 474 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 474 + + + + 475 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 475 + + + + 476 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 476 + + + + 477 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 477 + + + + 478 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 478 + + + + 480 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 480 + + + + 481 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 481 + + + + 482 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 482 + + + + 483 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 483 + + + + 484 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 484 + + + + 487 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 487 + + + + 488 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 488 + + + + 489 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 489 + + + + 490 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 490 + + + + 491 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 491 + + + + 493 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 493 + + + + 495 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 495 + + + + 496 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 496 + + + + 497 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 497 + + + + 500 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 500 + + + + 501 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 501 + + + + 502 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 502 + + + + 505 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 505 + + + + 506 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 506 + + + + 507 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 507 + + + + 510 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 510 + + + + 511 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 511 + + + + 512 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 512 + + + + 513 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 513 + + + + 515 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 515 + + + + 516 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 516 + + + + 517 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 517 + + + + 518 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 518 + + + + 519 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 519 + + + + 521 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 521 + + + + 522 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 522 + + + + 523 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 523 + + + + 524 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 524 + + + + 525 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 525 + + + + 526 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 526 + + + + 527 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 527 + + + + 528 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 528 + + + + 529 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentType(Mono.Cecil.TypeDefinition) + 529 + + + + 532 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 532 + + + + 533 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 533 + + + + 535 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 535 + + + + 537 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 537 + + + + 538 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 538 + + + + 539 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 539 + + + + 540 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 540 + + + + 541 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 541 + + + + 542 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 542 + + + + 543 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 543 + + + + 546 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 546 + + + + 547 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 547 + + + + 548 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 548 + + + + 550 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 550 + + + + 551 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 551 + + + + 553 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 553 + + + + 554 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentMethod(Mono.Cecil.MethodDefinition) + 554 + + + + 568 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 568 + + + + 569 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 569 + + + + 570 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 570 + + + + 571 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 571 + + + + 572 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 572 + + + + 573 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 573 + + + + 574 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 574 + + + + 575 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 575 + + + + 576 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 576 + + + + 577 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 577 + + + + 578 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 578 + + + + 579 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 579 + + + + 580 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 580 + + + + 581 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 581 + + + + 584 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 584 + + + + 586 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 586 + + + + 587 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 587 + + + + 588 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 588 + + + + 585 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 585 + + + + 591 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 591 + + + + 592 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 592 + + + + 593 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 593 + + + + 594 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 594 + + + + 595 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 595 + + + + 596 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 596 + + + + 599 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 599 + + + + 600 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 600 + + + + 601 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 601 + + + + 602 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 602 + + + + 605 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 605 + + + + 606 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 606 + + + + 607 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 607 + + + + 608 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 608 + + + + 609 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 609 + + + + 610 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 610 + + + + 613 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 613 + + + + 614 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 614 + + + + 616 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 616 + + + + 617 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 617 + + + + 619 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 619 + + + + 620 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 620 + + + + 627 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 627 + + + + 628 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 628 + + + + 630 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 630 + + + + 631 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 631 + + + + 632 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 632 + + + + 634 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 634 + + + + 635 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 635 + + + + 637 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 637 + + + + 638 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 638 + + + + 640 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 640 + + + + 641 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 641 + + + + 643 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 643 + + + + 644 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 644 + + + + 646 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 646 + + + + 647 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::InstrumentIL(Mono.Cecil.MethodDefinition) + 647 + + + + 650 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 650 + + + + 651 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 651 + + + + 652 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 652 + + + + 653 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 653 + + + + 654 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 654 + + + + 655 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 655 + + + + 656 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 656 + + + + 658 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 658 + + + + 659 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 659 + + + + 660 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 660 + + + + 661 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 661 + + + + 662 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 662 + + + + 664 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 664 + + + + 666 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 666 + + + + 667 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Mono.Cecil.Cil.SequencePoint) + 667 + + + + 670 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 670 + + + + 671 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 671 + + + + 672 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 672 + + + + 673 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 673 + + + + 674 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 674 + + + + 675 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 675 + + + + 676 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 676 + + + + 678 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 678 + + + + 679 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 679 + + + + 680 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 680 + + + + 681 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 681 + + + + 682 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 682 + + + + 683 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 683 + + + + 684 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 684 + + + + 685 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 685 + + + + 686 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 686 + + + + 687 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 687 + + + + 688 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 688 + + + + 689 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 689 + + + + 690 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 690 + + + + 691 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 691 + + + + 692 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 692 + + + + 693 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 693 + + + + 695 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 695 + + + + 696 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 696 + + + + 697 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 697 + + + + 698 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 698 + + + + 699 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 699 + + + + 700 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 700 + + + + 702 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 702 + + + + 703 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 703 + + + + 704 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 704 + + + + 705 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 705 + + + + 706 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 706 + + + + 707 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 707 + + + + 709 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 709 + + + + 711 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 711 + + + + 712 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationCode(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,Coverlet.Core.Symbols.BranchPoint) + 712 + + + + 715 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 715 + + + + 716 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 716 + + + + 717 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 717 + + + + 719 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 719 + + + + 720 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 720 + + + + 721 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 721 + + + + 722 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 722 + + + + 723 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 723 + + + + 724 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 724 + + + + 726 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 726 + + + + 727 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 727 + + + + 728 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 728 + + + + 729 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 729 + + + + 730 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 730 + + + + 732 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 732 + + + + 733 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 733 + + + + 734 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 734 + + + + 735 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 735 + + + + 737 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 737 + + + + 738 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 738 + + + + 740 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 740 + + + + 741 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 741 + + + + 743 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 743 + + + + 744 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Instrumenter::AddInstrumentationInstructions(Mono.Cecil.MethodDefinition,Mono.Cecil.Cil.ILProcessor,Mono.Cecil.Cil.Instruction,System.Int32) + 744 + + + + 747 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 747 + + + + 748 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 748 + + + + 749 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 749 + + + + 750 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 750 + + + + 751 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 751 + + + + 752 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 752 + + + + 753 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 753 + + + + 754 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 754 + + + + 755 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 755 + + + + 756 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 756 + + + + 757 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 757 + + + + 758 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 758 + + + + 759 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 759 + + + + 760 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 760 + + + + 761 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 761 + + + + 762 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 762 + + + + 763 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceInstructionTarget(Mono.Cecil.Cil.Instruction,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 763 + + + + 766 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 766 + + + + 767 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 767 + + + + 768 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 768 + + + + 770 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 770 + + + + 771 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 771 + + + + 773 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 773 + + + + 774 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 774 + + + + 776 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 776 + + + + 777 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 777 + + + + 779 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 779 + + + + 780 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 780 + + + + 781 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::ReplaceExceptionHandlerBoundary(Mono.Cecil.Cil.ExceptionHandler,System.Collections.Generic.IDictionary`2<System.Int32,Mono.Cecil.Cil.Instruction>) + 781 + + + + 784 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsExcludeAttribute(Mono.Cecil.CustomAttribute) + 784 + + + + 785 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsExcludeAttribute(Mono.Cecil.CustomAttribute) + 785 + + + + 786 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsExcludeAttribute(Mono.Cecil.CustomAttribute) + 786 + + + + 789 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 789 + + + + 791 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 791 + + + + 792 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 792 + + + + 794 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 794 + + + + 795 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 795 + + + + 796 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 796 + + + + 798 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + Mono.Cecil.Cil.MethodBody Coverlet.Core.Instrumentation.Instrumenter::GetMethodBody(Mono.Cecil.MethodDefinition) + 798 + + + + 802 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 802 + + + + 803 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 803 + + + + 804 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 804 + + + + 805 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 805 + + + + 808 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 808 + + + + 812 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 812 + + + + 815 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 815 + + + + 816 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 816 + + + + 817 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 817 + + + + 818 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 818 + + + + 822 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 822 + + + + 823 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 823 + + + + 827 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 827 + + + + 828 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 828 + + + + 829 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 829 + + + + 830 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 830 + + + + 832 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 832 + + + + 833 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 833 + + + + 834 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 834 + + + + 811 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 811 + + + + 836 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 836 + + + + 837 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedMemberToBeExcluded(Mono.Cecil.IMemberDefinition) + 837 + + + + 843 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 843 + + + + 844 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 844 + + + + 845 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 845 + + + + 846 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 846 + + + + 847 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 847 + + + + 848 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 848 + + + + 849 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 849 + + + + 850 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 850 + + + + 851 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 851 + + + + 852 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 852 + + + + 853 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter::IsSynthesizedNameOf(System.String,System.String,System.Int32) + 853 + + + + 57 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 57 + + + + 58 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 58 + + + + 59 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 59 + + + + 60 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 60 + + + + 61 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 61 + + + + 62 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 62 + + + + 63 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 63 + + + + 64 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 64 + + + + 65 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 65 + + + + 66 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 66 + + + + 67 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 67 + + + + 68 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 68 + + + + 69 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 69 + + + + 70 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 70 + + + + 71 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 71 + + + + 72 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 72 + + + + 73 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 73 + + + + 74 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 74 + + + + 75 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 75 + + + + 76 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 76 + + + + 77 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 77 + + + + 78 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 78 + + + + 79 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 79 + + + + 80 + + Coverlet.Core.Instrumentation.Instrumenter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter::.ctor(System.String,System.String,Coverlet.Core.CoverageParameters,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IInstrumentationHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ISourceRootTranslator,Coverlet.Core.Abstractions.ICecilSymbolHelper) + 80 + + + + 876 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider + 0 + Mono.Cecil.IMetadataImporter Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider::GetMetadataImporter(Mono.Cecil.ModuleDefinition) + 876 + + + + 877 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider + 0 + Mono.Cecil.IMetadataImporter Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider::GetMetadataImporter(Mono.Cecil.ModuleDefinition) + 877 + + + + 878 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider + 0 + Mono.Cecil.IMetadataImporter Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider::GetMetadataImporter(Mono.Cecil.ModuleDefinition) + 878 + + + + 892 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.AssemblyNameReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.AssemblyNameReference) + 892 + + + + 893 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.AssemblyNameReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.AssemblyNameReference) + 893 + + + + 894 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.AssemblyNameReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.AssemblyNameReference) + 894 + + + + 897 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.TypeReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.TypeReference,Mono.Cecil.IGenericParameterProvider) + 897 + + + + 898 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.TypeReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.TypeReference,Mono.Cecil.IGenericParameterProvider) + 898 + + + + 899 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.TypeReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.TypeReference,Mono.Cecil.IGenericParameterProvider) + 899 + + + + 900 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.TypeReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.TypeReference,Mono.Cecil.IGenericParameterProvider) + 900 + + + + 901 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.TypeReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.TypeReference,Mono.Cecil.IGenericParameterProvider) + 901 + + + + 904 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.FieldReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.FieldReference,Mono.Cecil.IGenericParameterProvider) + 904 + + + + 905 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.FieldReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.FieldReference,Mono.Cecil.IGenericParameterProvider) + 905 + + + + 906 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.FieldReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.FieldReference,Mono.Cecil.IGenericParameterProvider) + 906 + + + + 907 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.FieldReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.FieldReference,Mono.Cecil.IGenericParameterProvider) + 907 + + + + 908 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.FieldReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.FieldReference,Mono.Cecil.IGenericParameterProvider) + 908 + + + + 911 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 911 + + + + 912 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 912 + + + + 913 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 913 + + + + 915 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 915 + + + + 916 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 916 + + + + 917 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 917 + + + + 918 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 918 + + + + 919 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 919 + + + + 922 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 922 + + + + 923 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 923 + + + + 925 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 925 + + + + 926 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 926 + + + + 927 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 927 + + + + 928 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 928 + + + + 930 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 930 + + + + 931 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + Mono.Cecil.MethodReference Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::ImportReference(Mono.Cecil.MethodReference,Mono.Cecil.IGenericParameterProvider) + 931 + + + + 885 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::.ctor(Mono.Cecil.ModuleDefinition) + 885 + + + + 886 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::.ctor(Mono.Cecil.ModuleDefinition) + 886 + + + + 887 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::.ctor(Mono.Cecil.ModuleDefinition) + 887 + + + + 888 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::.ctor(Mono.Cecil.ModuleDefinition) + 888 + + + + 889 + + Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter + 0 + System.Void Coverlet.Core.Instrumentation.Instrumenter/CoreLibMetadataImporterProvider/CoreLibMetadataImporter::.ctor(Mono.Cecil.ModuleDefinition) + 889 + + + + 856 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 856 + + + + 857 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 857 + + + + 859 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 859 + + + + 860 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 860 + + + + 861 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 861 + + + + 862 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 862 + + + + 863 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 863 + + + + 864 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 864 + + + + 865 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 865 + + + + 866 + + Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55 + 0 + System.Boolean Coverlet.Core.Instrumentation.Instrumenter/<CollectLambdaMethodsInsideLocalFunction>d__55::MoveNext() + 866 + + + + 958 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 958 + + + + 959 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 959 + + + + 960 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 960 + + + + 963 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 963 + + + + 964 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.ExcludedFilesHelper::Exclude(System.String) + 964 + + + + 941 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 941 + + + + 942 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 942 + + + + 943 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 943 + + + + 944 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 944 + + + + 945 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 945 + + + + 946 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 946 + + + + 947 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 947 + + + + 948 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 948 + + + + 949 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 949 + + + + 950 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 950 + + + + 952 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 952 + + + + 953 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 953 + + + + 954 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 954 + + + + 955 + + Coverlet.Core.Instrumentation.ExcludedFilesHelper + 0 + System.Void Coverlet.Core.Instrumentation.ExcludedFilesHelper::.ctor(System.String[],Coverlet.Core.Abstractions.ILogger) + 955 + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\Instrumenter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\InstrumenterResult.cs + + + + + 54 + 0 + + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(Coverlet.Core.Instrumentation.BranchKey) + 54 + 3 + 1 + 0 + 0 + + + + + 54 + 2 + + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(Coverlet.Core.Instrumentation.BranchKey) + 54 + 19 + 17 + 2 + 0 + + + + + 54 + 1 + + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(Coverlet.Core.Instrumentation.BranchKey) + 54 + 35 + 1 + 1 + 1 + + + + + 54 + 3 + + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(Coverlet.Core.Instrumentation.BranchKey) + 54 + 35 + 17 + 3 + 1 + + + + 15 + + + 48 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Int32 Coverlet.Core.Instrumentation.BranchKey::get_Line() + 48 + + + + 50 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Int32 Coverlet.Core.Instrumentation.BranchKey::get_Ordinal() + 50 + + + + 52 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(System.Object) + 52 + + + + 54 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Boolean Coverlet.Core.Instrumentation.BranchKey::Equals(Coverlet.Core.Instrumentation.BranchKey) + 54 + + + + 57 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Int32 Coverlet.Core.Instrumentation.BranchKey::GetHashCode() + 57 + + + + 58 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Int32 Coverlet.Core.Instrumentation.BranchKey::GetHashCode() + 58 + + + + 59 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Int32 Coverlet.Core.Instrumentation.BranchKey::GetHashCode() + 59 + + + + 45 + + Coverlet.Core.Instrumentation.BranchKey + 0 + System.Void Coverlet.Core.Instrumentation.BranchKey::.ctor(System.Int32,System.Int32) + 45 + + + + 76 + + Coverlet.Core.Instrumentation.Document + 0 + System.Collections.Generic.Dictionary`2<System.Int32,Coverlet.Core.Instrumentation.Line> Coverlet.Core.Instrumentation.Document::get_Lines() + 76 + + + + 78 + + Coverlet.Core.Instrumentation.Document + 0 + System.Collections.Generic.Dictionary`2<Coverlet.Core.Instrumentation.BranchKey,Coverlet.Core.Instrumentation.Branch> Coverlet.Core.Instrumentation.Document::get_Branches() + 78 + + + + 65 + + Coverlet.Core.Instrumentation.Document + 0 + System.Void Coverlet.Core.Instrumentation.Document::.ctor() + 65 + + + + 66 + + Coverlet.Core.Instrumentation.Document + 0 + System.Void Coverlet.Core.Instrumentation.Document::.ctor() + 66 + + + + 67 + + Coverlet.Core.Instrumentation.Document + 0 + System.Void Coverlet.Core.Instrumentation.Document::.ctor() + 67 + + + + 68 + + Coverlet.Core.Instrumentation.Document + 0 + System.Void Coverlet.Core.Instrumentation.Document::.ctor() + 68 + + + + 69 + + Coverlet.Core.Instrumentation.Document + 0 + System.Void Coverlet.Core.Instrumentation.Document::.ctor() + 69 + + + + 89 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Boolean Coverlet.Core.Instrumentation.HitCandidate::get_isBranch() + 89 + + + + 91 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Int32 Coverlet.Core.Instrumentation.HitCandidate::get_docIndex() + 91 + + + + 93 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Int32 Coverlet.Core.Instrumentation.HitCandidate::get_start() + 93 + + + + 95 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Int32 Coverlet.Core.Instrumentation.HitCandidate::get_end() + 95 + + + + 96 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Collections.Generic.HashSet`1<System.Int32> Coverlet.Core.Instrumentation.HitCandidate::get_AccountedByNestedInstrumentation() + 96 + + + + 86 + + Coverlet.Core.Instrumentation.HitCandidate + 0 + System.Void Coverlet.Core.Instrumentation.HitCandidate::.ctor(System.Boolean,System.Int32,System.Int32,System.Int32) + 86 + + + + 119 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Collections.Generic.Dictionary`2<System.String,Coverlet.Core.Instrumentation.Document> Coverlet.Core.Instrumentation.InstrumenterResult::get_Documents() + 119 + + + + 121 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Collections.Generic.List`1<Coverlet.Core.Instrumentation.HitCandidate> Coverlet.Core.Instrumentation.InstrumenterResult::get_HitCandidates() + 121 + + + + 102 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Void Coverlet.Core.Instrumentation.InstrumenterResult::.ctor() + 102 + + + + 103 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Void Coverlet.Core.Instrumentation.InstrumenterResult::.ctor() + 103 + + + + 104 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Void Coverlet.Core.Instrumentation.InstrumenterResult::.ctor() + 104 + + + + 105 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Void Coverlet.Core.Instrumentation.InstrumenterResult::.ctor() + 105 + + + + 106 + + Coverlet.Core.Instrumentation.InstrumenterResult + 0 + System.Void Coverlet.Core.Instrumentation.InstrumenterResult::.ctor() + 106 + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\InstrumenterResult.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\ReachabilityHelper.cs + + + + + 253 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 253 + 10 + 8 + 0 + 0 + + + + + 253 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 253 + 28 + 8 + 1 + 1 + + + + + 260 + 25 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 260 + 59 + 551 + 25 + 1 + + + + + 262 + 23 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 262 + 89 + 521 + 23 + 1 + + + + + 264 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 264 + 112 + 110 + 2 + 0 + + + + + 264 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 264 + 118 + 110 + 3 + 1 + + + + + 272 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 272 + 136 + 134 + 4 + 0 + + + + + 272 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 272 + 142 + 134 + 5 + 1 + + + + + 284 + 21 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 284 + 181 + 491 + 21 + 1 + + + + + 286 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 286 + 209 + 207 + 6 + 0 + + + + + 286 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 286 + 215 + 207 + 7 + 1 + + + + + 292 + 8 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 292 + 238 + 236 + 8 + 0 + + + + + 292 + 9 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 292 + 244 + 236 + 9 + 1 + + + + + 310 + 10 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 310 + 314 + 312 + 10 + 0 + + + + + 310 + 11 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 310 + 320 + 312 + 11 + 1 + + + + + 315 + 12 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 315 + 336 + 334 + 12 + 0 + + + + + 315 + 13 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 315 + 342 + 334 + 13 + 1 + + + + + 321 + 17 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 321 + 362 + 416 + 17 + 1 + + + + + 323 + 14 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 323 + 402 + 400 + 14 + 0 + + + + + 323 + 15 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 323 + 408 + 400 + 15 + 1 + + + + + 321 + 16 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 321 + 418 + 416 + 16 + 0 + + + + + 330 + 18 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 330 + 443 + 441 + 18 + 0 + + + + + 330 + 19 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 330 + 483 + 441 + 19 + 1 + + + + + 284 + 20 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 284 + 496 + 491 + 20 + 0 + + + + + 262 + 22 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 262 + 526 + 521 + 22 + 0 + + + + + 260 + 24 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 260 + 556 + 551 + 24 + 0 + + + + + 369 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 369 + 16 + 14 + 0 + 0 + + + + + 369 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 369 + 26 + 14 + 1 + 1 + + + + + 375 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 375 + 43 + 41 + 2 + 0 + + + + + 375 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 375 + 53 + 41 + 3 + 1 + + + + + 383 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 383 + 84 + 82 + 4 + 0 + + + + + 383 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 383 + 94 + 82 + 5 + 1 + + + + + 405 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 405 + 22 + 163 + 7 + 1 + + + + + 407 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 407 + 34 + 32 + 0 + 0 + + + + + 407 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 407 + 43 + 32 + 1 + 1 + + + + + 409 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 409 + 67 + 65 + 2 + 0 + + + + + 413 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 413 + 103 + 101 + 4 + 0 + + + + + 413 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 413 + 132 + 101 + 5 + 1 + + + + + 409 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 409 + 155 + 65 + 3 + 1 + + + + + 405 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 405 + 168 + 163 + 6 + 0 + + + + + 435 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 435 + 21 + 19 + 0 + 0 + + + + + 441 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 441 + 56 + 115 + 5 + 1 + + + + + 444 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 444 + 84 + 82 + 2 + 0 + + + + + 444 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 444 + 87 + 82 + 3 + 1 + + + + + 441 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 441 + 117 + 115 + 4 + 0 + + + + + 435 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 435 + 123 + 19 + 1 + 1 + + + + + 452 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 452 + 147 + 145 + 6 + 0 + + + + + 456 + 8 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 456 + 170 + 168 + 8 + 0 + + + + + 456 + 9 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 456 + 194 + 168 + 9 + 1 + + + + + 452 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 452 + 234 + 145 + 7 + 1 + + + + + 467 + 10 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 467 + 259 + 254 + 10 + 0 + + + + + 473 + 23 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 473 + 274 + 400 + 23 + 1 + + + + + 475 + 12 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 475 + 300 + 298 + 12 + 0 + + + + + 475 + 13 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 475 + 303 + 298 + 13 + 1 + + + + + 482 + 17 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 482 + 318 + 355 + 17 + 1 + + + + + 482 + 14 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 482 + 333 + 331 + 14 + 0 + + + + + 482 + 15 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 482 + 350 + 331 + 15 + 1 + + + + + 482 + 16 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 482 + 357 + 355 + 16 + 0 + + + + + 487 + 18 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 487 + 361 + 359 + 18 + 0 + + + + + 487 + 19 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 487 + 378 + 359 + 19 + 1 + + + + + 487 + 20 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 487 + 385 + 383 + 20 + 0 + + + + + 487 + 21 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 487 + 392 + 383 + 21 + 1 + + + + + 473 + 22 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 473 + 402 + 400 + 22 + 0 + + + + + 494 + 24 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 494 + 430 + 428 + 24 + 0 + + + + + 494 + 25 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 494 + 448 + 428 + 25 + 1 + + + + + 467 + 11 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 467 + 476 + 254 + 11 + 1 + + + + + 507 + 26 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 507 + 498 + 496 + 26 + 0 + + + + + 507 + 27 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 507 + 516 + 496 + 27 + 1 + + + + + 536 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 536 + 18 + 184 + 7 + 1 + + + + + 541 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 541 + 46 + 44 + 0 + 0 + + + + + 541 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 541 + 53 + 44 + 1 + 1 + + + + + 550 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 550 + 86 + 84 + 2 + 0 + + + + + 552 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 552 + 99 + 97 + 4 + 0 + + + + + 552 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 552 + 102 + 97 + 5 + 1 + + + + + 550 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 550 + 143 + 84 + 3 + 1 + + + + + 536 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 536 + 189 + 184 + 6 + 0 + + + + + 591 + 9 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 591 + 64 + 246 + 9 + 1 + + + + + 595 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 595 + 86 + 84 + 0 + 0 + + + + + 595 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 595 + 92 + 84 + 1 + 1 + + + + + 604 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 604 + 112 + 110 + 2 + 0 + + + + + 607 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 607 + 133 + 170 + 5 + 1 + + + + + 607 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 607 + 172 + 170 + 4 + 0 + + + + + 604 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 604 + 173 + 110 + 3 + 1 + + + + + 616 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 616 + 193 + 230 + 7 + 1 + + + + + 616 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 616 + 232 + 230 + 6 + 0 + + + + + 591 + 8 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 591 + 251 + 246 + 8 + 0 + + + + + 640 + 5 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 640 + 105 + 206 + 5 + 1 + + + + + 642 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 642 + 128 + 126 + 0 + 0 + + + + + 644 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 644 + 150 + 177 + 3 + 1 + + + + + 644 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 644 + 179 + 177 + 2 + 0 + + + + + 642 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 642 + 182 + 126 + 1 + 1 + + + + + 640 + 4 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 640 + 208 + 206 + 4 + 0 + + + + + 657 + 9 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 657 + 219 + 297 + 9 + 1 + + + + + 659 + 6 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 659 + 245 + 243 + 6 + 0 + + + + + 659 + 7 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 659 + 268 + 243 + 7 + 1 + + + + + 657 + 8 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 657 + 299 + 297 + 8 + 0 + + + + + 677 + 41 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 677 + 376 + 1017 + 41 + 1 + + + + + 682 + 10 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 682 + 421 + 419 + 10 + 0 + + + + + 682 + 11 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 682 + 435 + 419 + 11 + 1 + + + + + 689 + 12 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 689 + 454 + 452 + 12 + 0 + + + + + 689 + 13 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 689 + 474 + 452 + 13 + 1 + + + + + 692 + 14 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 692 + 489 + 487 + 14 + 0 + + + + + 692 + 15 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 692 + 499 + 487 + 15 + 1 + + + + + 692 + 16 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 692 + 506 + 504 + 16 + 0 + + + + + 692 + 17 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 692 + 512 + 504 + 17 + 1 + + + + + 698 + 18 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 698 + 533 + 528 + 18 + 0 + + + + + 704 + 20 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 704 + 556 + 554 + 20 + 0 + + + + + 708 + 25 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 708 + 576 + 645 + 25 + 1 + + + + + 710 + 22 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 710 + 599 + 597 + 22 + 0 + + + + + 710 + 23 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 710 + 619 + 597 + 23 + 1 + + + + + 708 + 24 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 708 + 647 + 645 + 24 + 0 + + + + + 704 + 21 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 704 + 665 + 554 + 21 + 1 + + + + + 720 + 26 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 720 + 676 + 674 + 26 + 0 + + + + + 720 + 27 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 720 + 694 + 674 + 27 + 1 + + + + + 735 + 39 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 735 + 724 + 948 + 39 + 1 + + + + + 740 + 28 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 740 + 773 + 771 + 28 + 0 + + + + + 740 + 29 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 740 + 789 + 771 + 29 + 1 + + + + + 744 + 30 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 744 + 803 + 801 + 30 + 0 + + + + + 744 + 31 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 744 + 819 + 801 + 31 + 1 + + + + + 748 + 32 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 748 + 833 + 831 + 32 + 0 + + + + + 748 + 33 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 748 + 849 + 831 + 33 + 1 + + + + + 756 + 34 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 756 + 873 + 871 + 34 + 0 + + + + + 756 + 35 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 756 + 876 + 871 + 35 + 1 + + + + + 762 + 36 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 762 + 892 + 890 + 36 + 0 + + + + + 762 + 37 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 762 + 917 + 890 + 37 + 1 + + + + + 735 + 38 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 735 + 953 + 948 + 38 + 0 + + + + + 698 + 19 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 698 + 1009 + 528 + 19 + 1 + + + + + 677 + 40 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 677 + 1022 + 1017 + 40 + 0 + + + + + 789 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 789 + 16 + 14 + 0 + 0 + + + + + 789 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 789 + 21 + 14 + 1 + 1 + + + + + 805 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 805 + 21 + 19 + 0 + 0 + + + + + 805 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 805 + 34 + 19 + 1 + 1 + + + + + 805 + 2 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 805 + 39 + 37 + 2 + 0 + + + + + 805 + 3 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 805 + 47 + 37 + 3 + 1 + + + + + 84 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::ToString() + 84 + 225 + 223 + 0 + 0 + + + + + 84 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::ToString() + 84 + 232 + 223 + 1 + 1 + + + + + 116 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 116 + 11 + 9 + 0 + 0 + + + + + 116 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 116 + 39 + 9 + 1 + 1 + + + + + 136 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 136 + 14 + 12 + 0 + 0 + + + + + 136 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 136 + 42 + 12 + 1 + 1 + + + + + 165 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::ToString() + 165 + 24 + 22 + 0 + 0 + + + + + 165 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::ToString() + 165 + 47 + 22 + 1 + 1 + + + + + 154 + 0 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 154 + 15 + 13 + 0 + 0 + + + + + 154 + 1 + + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 154 + 32 + 13 + 1 + 1 + + + + 16 + + + 252 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 252 + + + + 253 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 253 + + + + 254 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 254 + + + + 255 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 255 + + + + 258 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 258 + + + + 259 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 259 + + + + 260 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 260 + + + + 261 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 261 + + + + 262 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 262 + + + + 263 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 263 + + + + 264 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 264 + + + + 265 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 265 + + + + 266 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 266 + + + + 271 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 271 + + + + 272 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 272 + + + + 273 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 273 + + + + 274 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 274 + + + + 277 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 277 + + + + 278 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 278 + + + + 279 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 279 + + + + 280 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 280 + + + + 281 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 281 + + + + 284 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 284 + + + + 285 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 285 + + + + 286 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 286 + + + + 287 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 287 + + + + 288 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 288 + + + + 291 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 291 + + + + 292 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 292 + + + + 293 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 293 + + + + 294 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 294 + + + + 297 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 297 + + + + 301 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 301 + + + + 302 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 302 + + + + 303 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 303 + + + + 304 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 304 + + + + 305 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 305 + + + + 306 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 306 + + + + 307 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 307 + + + + 308 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 308 + + + + 310 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 310 + + + + 311 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 311 + + + + 312 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 312 + + + + 315 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 315 + + + + 316 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 316 + + + + 317 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 317 + + + + 320 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 320 + + + + 321 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 321 + + + + 322 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 322 + + + + 323 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 323 + + + + 324 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 324 + + + + 325 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 325 + + + + 326 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 326 + + + + 328 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 328 + + + + 330 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 330 + + + + 331 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 331 + + + + 332 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 332 + + + + 333 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 333 + + + + 334 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 334 + + + + 335 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 335 + + + + 336 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 336 + + + + 337 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 337 + + + + 339 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 339 + + + + 341 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 341 + + + + 342 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateForModule(Mono.Cecil.ModuleDefinition,System.String[],Coverlet.Core.Abstractions.ILogger) + 342 + + + + 367 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 367 + + + + 369 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 369 + + + + 370 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 370 + + + + 371 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 371 + + + + 375 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 375 + + + + 376 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 376 + + + + 377 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 377 + + + + 380 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 380 + + + + 383 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 383 + + + + 384 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 384 + + + + 385 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 385 + + + + 388 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 388 + + + + 390 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 390 + + + + 392 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 392 + + + + 393 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 393 + + + + 394 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::FindUnreachableIL(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 394 + + + + 401 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 401 + + + + 402 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 402 + + + + 404 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 404 + + + + 405 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 405 + + + + 406 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 406 + + + + 407 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 407 + + + + 409 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 409 + + + + 410 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 410 + + + + 411 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 411 + + + + 413 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 413 + + + + 414 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 414 + + + + 415 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 415 + + + + 416 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 416 + + + + 418 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 418 + + + + 419 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 419 + + + + 420 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 420 + + + + 421 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 421 + + + + 422 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 422 + + + + 424 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 424 + + + + 425 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Boolean,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::AnalyzeInstructions(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 425 + + + + 431 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 431 + + + + 435 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 435 + + + + 436 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 436 + + + + 438 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 438 + + + + 440 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 440 + + + + 441 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 441 + + + + 442 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 442 + + + + 444 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 444 + + + + 445 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 445 + + + + 446 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 446 + + + + 449 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 449 + + + + 450 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 450 + + + + 451 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 451 + + + + 452 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 452 + + + + 453 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 453 + + + + 456 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 456 + + + + 457 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 457 + + + + 458 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 458 + + + + 459 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 459 + + + + 460 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 460 + + + + 462 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 462 + + + + 463 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 463 + + + + 464 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 464 + + + + 465 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 465 + + + + 466 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 466 + + + + 467 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 467 + + + + 468 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 468 + + + + 472 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 472 + + + + 473 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 473 + + + + 474 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 474 + + + + 475 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 475 + + + + 476 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 476 + + + + 477 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 477 + + + + 480 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 480 + + + + 481 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 481 + + + + 483 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 483 + + + + 484 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 484 + + + + 485 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 485 + + + + 482 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 482 + + + + 487 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 487 + + + + 488 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 488 + + + + 489 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 489 + + + + 490 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 490 + + + + 492 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 492 + + + + 494 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 494 + + + + 495 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 495 + + + + 496 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 496 + + + + 504 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 504 + + + + 505 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 505 + + + + 506 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 506 + + + + 507 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 507 + + + + 508 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 508 + + + + 516 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 516 + + + + 517 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 517 + + + + 518 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 518 + + + + 520 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 520 + + + + 521 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 521 + + + + 524 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 524 + + + + 525 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.ValueTuple`2<System.Nullable`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::GetInstructionTargets(Mono.Cecil.Cil.Instruction,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>) + 525 + + + + 531 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 531 + + + + 532 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 532 + + + + 534 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 534 + + + + 536 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 536 + + + + 537 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 537 + + + + 538 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 538 + + + + 541 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 541 + + + + 542 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 542 + + + + 543 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 543 + + + + 544 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 544 + + + + 546 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 546 + + + + 547 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 547 + + + + 548 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 548 + + + + 550 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 550 + + + + 551 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 551 + + + + 552 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 552 + + + + 553 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 553 + + + + 555 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 555 + + + + 559 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 559 + + + + 563 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 563 + + + + 565 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 565 + + + + 566 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 566 + + + + 568 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 568 + + + + 570 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 570 + + + + 571 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 571 + + + + 572 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 572 + + + + 574 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 574 + + + + 575 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineUnreachableRanges(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>,System.Int32) + 575 + + + + 584 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 584 + + + + 585 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 585 + + + + 587 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 587 + + + + 589 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 589 + + + + 592 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 592 + + + + 593 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 593 + + + + 595 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 595 + + + + 596 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 596 + + + + 598 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 598 + + + + 602 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 602 + + + + 604 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 604 + + + + 605 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 605 + + + + 607 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 607 + + + + 608 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 608 + + + + 609 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 609 + + + + 610 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 610 + + + + 611 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 611 + + + + 612 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 612 + + + + 616 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 616 + + + + 617 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 617 + + + + 618 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 618 + + + + 619 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 619 + + + + 620 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 620 + + + + 621 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 621 + + + + 591 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 591 + + + + 622 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DetermineHeadReachability(System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock>) + 622 + + + + 633 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 633 + + + + 635 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 635 + + + + 636 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 636 + + + + 639 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 639 + + + + 640 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 640 + + + + 641 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 641 + + + + 642 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 642 + + + + 643 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 643 + + + + 644 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 644 + + + + 645 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 645 + + + + 646 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 646 + + + + 647 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 647 + + + + 648 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 648 + + + + 650 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 650 + + + + 651 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 651 + + + + 652 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 652 + + + + 653 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 653 + + + + 657 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 657 + + + + 658 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 658 + + + + 659 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 659 + + + + 660 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 660 + + + + 661 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 661 + + + + 662 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 662 + + + + 664 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 664 + + + + 665 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 665 + + + + 666 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 666 + + + + 667 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 667 + + + + 669 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 669 + + + + 672 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 672 + + + + 674 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 674 + + + + 675 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 675 + + + + 676 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 676 + + + + 677 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 677 + + + + 678 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 678 + + + + 679 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 679 + + + + 680 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 680 + + + + 682 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 682 + + + + 683 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 683 + + + + 684 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 684 + + + + 685 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 685 + + + + 686 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 686 + + + + 688 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 688 + + + + 689 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 689 + + + + 690 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 690 + + + + 692 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 692 + + + + 693 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 693 + + + + 694 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 694 + + + + 695 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 695 + + + + 697 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 697 + + + + 698 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 698 + + + + 699 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 699 + + + + 700 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 700 + + + + 704 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 704 + + + + 705 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 705 + + + + 707 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 707 + + + + 708 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 708 + + + + 709 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 709 + + + + 710 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 710 + + + + 711 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 711 + + + + 712 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 712 + + + + 713 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 713 + + + + 715 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 715 + + + + 716 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 716 + + + + 717 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 717 + + + + 718 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 718 + + + + 719 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 719 + + + + 720 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 720 + + + + 721 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 721 + + + + 723 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 723 + + + + 724 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 724 + + + + 726 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 726 + + + + 728 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 728 + + + + 729 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 729 + + + + 731 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 731 + + + + 735 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 735 + + + + 736 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 736 + + + + 737 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 737 + + + + 738 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 738 + + + + 740 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 740 + + + + 741 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 741 + + + + 742 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 742 + + + + 744 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 744 + + + + 745 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 745 + + + + 746 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 746 + + + + 748 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 748 + + + + 754 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 754 + + + + 756 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 756 + + + + 757 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 757 + + + + 758 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 758 + + + + 762 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 762 + + + + 763 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 763 + + + + 764 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 764 + + + + 765 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 765 + + + + 767 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 767 + + + + 769 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 769 + + + + 770 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 770 + + + + 771 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 771 + + + + 773 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 773 + + + + 775 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 775 + + + + 776 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 776 + + + + 777 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 777 + + + + 778 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 778 + + + + 780 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 780 + + + + 781 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::CreateBasicBlocks(Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.Instruction>,Mono.Collections.Generic.Collection`1<Mono.Cecil.Cil.ExceptionHandler>,System.Collections.Immutable.ImmutableArray`1<Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction>) + 781 + + + + 788 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 788 + + + + 789 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 789 + + + + 790 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 790 + + + + 791 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 791 + + + + 794 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 794 + + + + 795 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::DoesNotReturn(Mono.Cecil.Cil.Instruction) + 795 + + + + 803 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 803 + + + + 804 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 804 + + + + 805 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 805 + + + + 806 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 806 + + + + 807 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 807 + + + + 808 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 808 + + + + 811 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 811 + + + + 813 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 813 + + + + 814 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::IsCall(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodReference&) + 814 + + + + 240 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.ctor(System.Collections.Immutable.ImmutableHashSet`1<Mono.Cecil.MetadataToken>) + 240 + + + + 241 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.ctor(System.Collections.Immutable.ImmutableHashSet`1<Mono.Cecil.MetadataToken>) + 241 + + + + 242 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.ctor(System.Collections.Immutable.ImmutableHashSet`1<Mono.Cecil.MetadataToken>) + 242 + + + + 243 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.ctor(System.Collections.Immutable.ImmutableHashSet`1<Mono.Cecil.MetadataToken>) + 243 + + + + 172 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 172 + + + + 173 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 173 + + + + 174 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 174 + + + + 175 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 175 + + + + 176 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 176 + + + + 177 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 177 + + + + 178 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 178 + + + + 179 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 179 + + + + 180 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 180 + + + + 181 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 181 + + + + 182 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 182 + + + + 183 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 183 + + + + 184 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 184 + + + + 185 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 185 + + + + 186 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 186 + + + + 187 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 187 + + + + 188 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 188 + + + + 189 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 189 + + + + 190 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 190 + + + + 191 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 191 + + + + 192 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 192 + + + + 193 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 193 + + + + 194 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 194 + + + + 195 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 195 + + + + 196 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 196 + + + + 197 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 197 + + + + 198 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 198 + + + + 199 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 199 + + + + 200 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 200 + + + + 201 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 201 + + + + 202 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 202 + + + + 203 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 203 + + + + 204 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 204 + + + + 205 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 205 + + + + 206 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 206 + + + + 207 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 207 + + + + 208 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 208 + + + + 209 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 209 + + + + 210 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 210 + + + + 211 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 211 + + + + 212 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 212 + + + + 213 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 213 + + + + 214 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 214 + + + + 215 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 215 + + + + 216 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 216 + + + + 217 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 217 + + + + 218 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 218 + + + + 219 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 219 + + + + 220 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 220 + + + + 221 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 221 + + + + 227 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 227 + + + + 228 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 228 + + + + 229 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 229 + + + + 230 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 230 + + + + 231 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 231 + + + + 232 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 232 + + + + 233 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 233 + + + + 234 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 234 + + + + 235 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 235 + + + + 236 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper::.cctor() + 236 + + + + 24 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::get_StartOffset() + 24 + + + + 28 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::get_EndOffset() + 28 + + + + 37 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::ToString() + 37 + + + + 31 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::.ctor(System.Int32,System.Int32) + 31 + + + + 32 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::.ctor(System.Int32,System.Int32) + 32 + + + + 33 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::.ctor(System.Int32,System.Int32) + 33 + + + + 34 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/UnreachableRange::.ctor(System.Int32,System.Int32) + 34 + + + + 45 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_StartOffset() + 45 + + + + 50 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_TailReachable() + 50 + + + + 54 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_BranchesTo() + 54 + + + + 60 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + Mono.Cecil.Cil.Instruction Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_UnreachableAfter() + 60 + + + + 67 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_ExceptionBranchesTo() + 67 + + + + 73 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::get_HeadReachable() + 73 + + + + 84 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::ToString() + 84 + + + + 75 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 75 + + + + 76 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 76 + + + + 77 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 77 + + + + 78 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 78 + + + + 79 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 79 + + + + 80 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 80 + + + + 81 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BasicBlock::.ctor(System.Int32,Mono.Cecil.Cil.Instruction,System.Collections.Immutable.ImmutableArray`1<System.Int32>,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 81 + + + + 98 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_Offset() + 98 + + + + 103 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Boolean Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_HasMultiTargets() + 103 + + + + 115 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 115 + + + + 116 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 116 + + + + 117 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 117 + + + + 118 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 118 + + + + 121 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 121 + + + + 122 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Int32 Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffset() + 122 + + + + 135 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 135 + + + + 136 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 136 + + + + 137 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 137 + + + + 138 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 138 + + + + 141 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 141 + + + + 142 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Collections.Immutable.ImmutableArray`1<System.Int32> Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::get_TargetOffsets() + 142 + + + + 165 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.String Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::ToString() + 165 + + + + 146 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Int32) + 146 + + + + 147 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Int32) + 147 + + + + 148 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Int32) + 148 + + + + 149 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Int32) + 149 + + + + 150 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Int32) + 150 + + + + 153 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 153 + + + + 154 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 154 + + + + 155 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 155 + + + + 156 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 156 + + + + 159 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 159 + + + + 160 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 160 + + + + 161 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 161 + + + + 162 + + Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction + 0 + System.Void Coverlet.Core.Instrumentation.Reachability.ReachabilityHelper/BranchInstruction::.ctor(System.Int32,System.Collections.Immutable.ImmutableArray`1<System.Int32>) + 162 + + + + C:\GitHub\coverlet\src\coverlet.core\Instrumentation\ReachabilityHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\AssemblyAdapter.cs + + + 17 + + + 12 + + Coverlet.Core.Helpers.AssemblyAdapter + 0 + System.String Coverlet.Core.Helpers.AssemblyAdapter::GetAssemblyName(System.String) + 12 + + + + 13 + + Coverlet.Core.Helpers.AssemblyAdapter + 0 + System.String Coverlet.Core.Helpers.AssemblyAdapter::GetAssemblyName(System.String) + 13 + + + + 14 + + Coverlet.Core.Helpers.AssemblyAdapter + 0 + System.String Coverlet.Core.Helpers.AssemblyAdapter::GetAssemblyName(System.String) + 14 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\AssemblyAdapter.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\Console.cs + + + 18 + + + 12 + + Coverlet.Core.Helpers.SystemConsole + 0 + System.Void Coverlet.Core.Helpers.SystemConsole::WriteLine(System.String) + 12 + + + + 13 + + Coverlet.Core.Helpers.SystemConsole + 0 + System.Void Coverlet.Core.Helpers.SystemConsole::WriteLine(System.String) + 13 + + + + 14 + + Coverlet.Core.Helpers.SystemConsole + 0 + System.Void Coverlet.Core.Helpers.SystemConsole::WriteLine(System.String) + 14 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\Console.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\FileSystem.cs + + + + + 63 + 0 + + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::EscapeFileName(System.String) + 63 + 4 + 2 + 0 + 0 + + + + + 63 + 1 + + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::EscapeFileName(System.String) + 63 + 7 + 2 + 1 + 1 + + + + 19 + + + 13 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Boolean Coverlet.Core.Helpers.FileSystem::Exists(System.String) + 13 + + + + 14 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Boolean Coverlet.Core.Helpers.FileSystem::Exists(System.String) + 14 + + + + 15 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Boolean Coverlet.Core.Helpers.FileSystem::Exists(System.String) + 15 + + + + 18 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::WriteAllText(System.String,System.String) + 18 + + + + 19 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::WriteAllText(System.String,System.String) + 19 + + + + 20 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::WriteAllText(System.String,System.String) + 20 + + + + 23 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::ReadAllText(System.String) + 23 + + + + 24 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::ReadAllText(System.String) + 24 + + + + 25 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::ReadAllText(System.String) + 25 + + + + 29 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::OpenRead(System.String) + 29 + + + + 30 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::OpenRead(System.String) + 30 + + + + 31 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::OpenRead(System.String) + 31 + + + + 34 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Copy(System.String,System.String,System.Boolean) + 34 + + + + 35 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Copy(System.String,System.String,System.Boolean) + 35 + + + + 36 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Copy(System.String,System.String,System.Boolean) + 36 + + + + 39 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Delete(System.String) + 39 + + + + 40 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Delete(System.String) + 40 + + + + 41 + + Coverlet.Core.Helpers.FileSystem + 0 + System.Void Coverlet.Core.Helpers.FileSystem::Delete(System.String) + 41 + + + + 45 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode) + 45 + + + + 46 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode) + 46 + + + + 47 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode) + 47 + + + + 51 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode,System.IO.FileAccess) + 51 + + + + 52 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode,System.IO.FileAccess) + 52 + + + + 53 + + Coverlet.Core.Helpers.FileSystem + 0 + System.IO.Stream Coverlet.Core.Helpers.FileSystem::NewFileStream(System.String,System.IO.FileMode,System.IO.FileAccess) + 53 + + + + 56 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String[] Coverlet.Core.Helpers.FileSystem::ReadAllLines(System.String) + 56 + + + + 57 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String[] Coverlet.Core.Helpers.FileSystem::ReadAllLines(System.String) + 57 + + + + 58 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String[] Coverlet.Core.Helpers.FileSystem::ReadAllLines(System.String) + 58 + + + + 62 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::EscapeFileName(System.String) + 62 + + + + 63 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::EscapeFileName(System.String) + 63 + + + + 64 + + Coverlet.Core.Helpers.FileSystem + 0 + System.String Coverlet.Core.Helpers.FileSystem::EscapeFileName(System.String) + 64 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\FileSystem.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\InstrumentationHelper.cs + + + + + 42 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 42 + 35 + 33 + 0 + 0 + + + + + 42 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 42 + 43 + 33 + 1 + 1 + + + + + 43 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 43 + 48 + 46 + 2 + 0 + + + + + 43 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 43 + 56 + 46 + 3 + 1 + + + + + 45 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 45 + 75 + 73 + 4 + 0 + + + + + 45 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 45 + 83 + 73 + 5 + 1 + + + + + 57 + 15 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 57 + 109 + 255 + 15 + 1 + + + + + 59 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 59 + 132 + 128 + 7 + 1 + + + + + 61 + 8 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 61 + 141 + 139 + 8 + 0 + + + + + 61 + 9 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 61 + 145 + 139 + 9 + 1 + + + + + 65 + 11 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 65 + 198 + 194 + 11 + 1 + + + + + 67 + 12 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 67 + 217 + 215 + 12 + 0 + + + + + 67 + 13 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 67 + 233 + 215 + 13 + 1 + + + + + 59 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 59 + 243 + 128 + 6 + 0 + + + + + 65 + 10 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 65 + 243 + 194 + 10 + 0 + + + + + 57 + 14 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 57 + 260 + 255 + 14 + 0 + + + + + 76 + 16 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 76 + 274 + 272 + 16 + 0 + + + + + 76 + 17 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 76 + 280 + 272 + 17 + 1 + + + + + 76 + 18 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 76 + 287 + 285 + 18 + 0 + + + + + 76 + 19 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 76 + 305 + 285 + 19 + 1 + + + + + 89 + 9 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 89 + 45 + 263 + 9 + 1 + + + + + 91 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 91 + 74 + 69 + 0 + 0 + + + + + 95 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 95 + 134 + 132 + 2 + 0 + + + + + 95 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 95 + 146 + 132 + 3 + 1 + + + + + 102 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 102 + 181 + 179 + 4 + 0 + + + + + 102 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 102 + 190 + 179 + 5 + 1 + + + + + 110 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 110 + 224 + 222 + 6 + 0 + + + + + 110 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 110 + 254 + 222 + 7 + 1 + + + + + 91 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 91 + 255 + 69 + 1 + 1 + + + + + 89 + 8 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 89 + 268 + 263 + 8 + 0 + + + + + 130 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 130 + 39 + 137 + 5 + 1 + + + + + 132 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 132 + 66 + 64 + 0 + 0 + + + + + 137 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 137 + 107 + 105 + 2 + 0 + + + + + 137 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 137 + 113 + 105 + 3 + 1 + + + + + 132 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 132 + 129 + 64 + 1 + 1 + + + + + 130 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 130 + 139 + 137 + 4 + 0 + + + + + 153 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 153 + 42 + 230 + 5 + 1 + + + + + 155 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 155 + 71 + 66 + 0 + 0 + + + + + 171 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 171 + 185 + 183 + 2 + 0 + + + + + 171 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 171 + 191 + 183 + 3 + 1 + + + + + 155 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 155 + 222 + 66 + 1 + 1 + + + + + 153 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 153 + 235 + 230 + 4 + 0 + + + + + 184 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 184 + 24 + 22 + 0 + 0 + + + + + 187 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 187 + 41 + 39 + 2 + 0 + + + + + 187 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 187 + 77 + 39 + 3 + 1 + + + + + 184 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 184 + 78 + 22 + 1 + 1 + + + + + 194 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 194 + 103 + 101 + 4 + 0 + + + + + 198 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 198 + 137 + 135 + 6 + 0 + + + + + 198 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 198 + 203 + 135 + 7 + 1 + + + + + 194 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 194 + 204 + 101 + 5 + 1 + + + + + 229 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 229 + 55 + 53 + 0 + 0 + + + + + 229 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 229 + 106 + 53 + 1 + 1 + + + + + 240 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 240 + 56 + 54 + 0 + 0 + + + + + 240 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 240 + 79 + 54 + 1 + 1 + + + + + 246 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 246 + 109 + 107 + 2 + 0 + + + + + 249 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 249 + 147 + 145 + 4 + 0 + + + + + 249 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 249 + 170 + 145 + 5 + 1 + + + + + 246 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 246 + 171 + 107 + 3 + 1 + + + + + 290 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 290 + 34 + 137 + 1 + 1 + + + + + 290 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 290 + 139 + 137 + 0 + 0 + + + + + 310 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 310 + 9 + 7 + 0 + 0 + + + + + 310 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 310 + 16 + 7 + 1 + 1 + + + + + 313 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 313 + 34 + 32 + 2 + 0 + + + + + 313 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 313 + 41 + 32 + 3 + 1 + + + + + 316 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 316 + 59 + 57 + 4 + 0 + + + + + 316 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 316 + 66 + 57 + 5 + 1 + + + + + 319 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 319 + 112 + 110 + 6 + 0 + + + + + 319 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 319 + 119 + 110 + 7 + 1 + + + + + 322 + 8 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 322 + 165 + 163 + 8 + 0 + + + + + 322 + 9 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 322 + 172 + 163 + 9 + 1 + + + + + 325 + 10 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 325 + 196 + 194 + 10 + 0 + + + + + 325 + 11 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 325 + 203 + 194 + 11 + 1 + + + + + 328 + 12 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 328 + 229 + 227 + 12 + 0 + + + + + 328 + 13 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 328 + 233 + 227 + 13 + 1 + + + + + 331 + 14 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 331 + 250 + 248 + 14 + 0 + + + + + 331 + 15 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 331 + 254 + 248 + 15 + 1 + + + + + 334 + 16 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 334 + 336 + 334 + 16 + 0 + + + + + 334 + 17 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 334 + 340 + 334 + 17 + 1 + + + + + 342 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 342 + 4 + 2 + 0 + 0 + + + + + 342 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 342 + 11 + 2 + 1 + 1 + + + + + 342 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 342 + 16 + 14 + 2 + 0 + + + + + 342 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 342 + 23 + 14 + 3 + 1 + + + + + 346 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 346 + 39 + 37 + 4 + 0 + + + + + 346 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 346 + 46 + 37 + 5 + 1 + + + + + 349 + 11 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 349 + 54 + 170 + 11 + 1 + + + + + 353 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 353 + 101 + 97 + 7 + 1 + + + + + 361 + 8 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 361 + 154 + 152 + 8 + 0 + + + + + 361 + 9 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 361 + 158 + 152 + 9 + 1 + + + + + 353 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 353 + 159 + 97 + 6 + 0 + + + + + 349 + 10 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 349 + 172 + 170 + 10 + 0 + + + + + 370 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 370 + 4 + 2 + 0 + 0 + + + + + 370 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 370 + 11 + 2 + 1 + 1 + + + + + 370 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 370 + 16 + 14 + 2 + 0 + + + + + 370 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 370 + 23 + 14 + 3 + 1 + + + + + 374 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 374 + 39 + 37 + 4 + 0 + + + + + 374 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 374 + 43 + 37 + 5 + 1 + + + + + 377 + 11 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 377 + 51 + 149 + 11 + 1 + + + + + 381 + 6 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 381 + 97 + 95 + 6 + 0 + + + + + 381 + 7 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 381 + 101 + 95 + 7 + 1 + + + + + 388 + 8 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 388 + 133 + 131 + 8 + 0 + + + + + 388 + 9 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 388 + 137 + 131 + 9 + 1 + + + + + 377 + 10 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 377 + 151 + 149 + 10 + 0 + + + + + 397 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 397 + 4 + 2 + 0 + 0 + + + + + 397 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 397 + 11 + 2 + 1 + 1 + + + + + 397 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 397 + 16 + 14 + 2 + 0 + + + + + 397 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 397 + 20 + 14 + 3 + 1 + + + + + 401 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 401 + 36 + 34 + 4 + 0 + + + + + 401 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 401 + 40 + 34 + 5 + 1 + + + + + 409 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 409 + 4 + 2 + 0 + 0 + + + + + 409 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 409 + 11 + 2 + 1 + 1 + + + + + 409 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 409 + 16 + 14 + 2 + 0 + + + + + 409 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 409 + 20 + 14 + 3 + 1 + + + + + 413 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 413 + 36 + 34 + 4 + 0 + + + + + 413 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 413 + 40 + 34 + 5 + 1 + + + + + 432 + 5 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 432 + 28 + 135 + 5 + 1 + + + + + 440 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 440 + 99 + 97 + 0 + 0 + + + + + 440 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 440 + 114 + 97 + 1 + 1 + + + + + 440 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 440 + 121 + 119 + 2 + 0 + + + + + 440 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 440 + 126 + 119 + 3 + 1 + + + + + 432 + 4 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 432 + 137 + 135 + 4 + 0 + + + + + 478 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 478 + 24 + 22 + 0 + 0 + + + + + 478 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 478 + 40 + 22 + 1 + 1 + + + + + 478 + 2 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 478 + 45 + 43 + 2 + 0 + + + + + 478 + 3 + + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 478 + 49 + 43 + 3 + 1 + + + + + 274 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass16_0 + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass16_0::<RestoreOriginalModule>b__1() + 274 + 27 + 25 + 0 + 0 + + + + + 274 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass16_0 + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass16_0::<RestoreOriginalModule>b__1() + 274 + 114 + 25 + 1 + 1 + + + + + 80 + 0 + + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass7_0 + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass7_0::<GetCoverableModules>b__1(System.String) + 80 + 8 + 6 + 0 + 0 + + + + + 80 + 1 + + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass7_0 + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass7_0::<GetCoverableModules>b__1(System.String) + 80 + 27 + 6 + 1 + 1 + + + + 20 + + + 38 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 38 + + + + 39 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 39 + + + + 40 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 40 + + + + 42 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 42 + + + + 43 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 43 + + + + 45 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 45 + + + + 46 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 46 + + + + 47 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 47 + + + + 48 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 48 + + + + 50 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 50 + + + + 51 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 51 + + + + 52 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 52 + + + + 53 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 53 + + + + 54 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 54 + + + + 57 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 57 + + + + 58 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 58 + + + + 59 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 59 + + + + 61 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 61 + + + + 62 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 62 + + + + 63 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 63 + + + + 65 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 65 + + + + 67 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 67 + + + + 68 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 68 + + + + 70 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 70 + + + + 71 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 71 + + + + 74 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 74 + + + + 76 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 76 + + + + 77 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 77 + + + + 79 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 79 + + + + 80 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 80 + + + + 81 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 81 + + + + 82 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String[] Coverlet.Core.Helpers.InstrumentationHelper::GetCoverableModules(System.String,System.String[],System.Boolean) + 82 + + + + 85 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 85 + + + + 86 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 86 + + + + 87 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 87 + + + + 88 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 88 + + + + 89 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 89 + + + + 90 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 90 + + + + 91 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 91 + + + + 92 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 92 + + + + 93 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 93 + + + + 94 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 94 + + + + 95 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 95 + + + + 96 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 96 + + + + 98 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 98 + + + + 99 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 99 + + + + 102 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 102 + + + + 103 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 103 + + + + 105 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 105 + + + + 106 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 106 + + + + 109 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 109 + + + + 110 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 110 + + + + 111 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 111 + + + + 113 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 113 + + + + 116 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 116 + + + + 118 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 118 + + + + 120 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 120 + + + + 121 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 121 + + + + 123 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 123 + + + + 124 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::HasPdb(System.String,System.Boolean&) + 124 + + + + 127 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 127 + + + + 128 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 128 + + + + 129 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 129 + + + + 130 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 130 + + + + 131 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 131 + + + + 132 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 132 + + + + 133 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 133 + + + + 134 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 134 + + + + 135 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 135 + + + + 137 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 137 + + + + 138 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 138 + + + + 139 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 139 + + + + 141 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 141 + + + + 142 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 142 + + + + 146 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 146 + + + + 147 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::EmbeddedPortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 147 + + + + 150 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 150 + + + + 151 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 151 + + + + 152 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 152 + + + + 153 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 153 + + + + 154 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 154 + + + + 155 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 155 + + + + 156 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 156 + + + + 157 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 157 + + + + 158 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 158 + + + + 159 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 159 + + + + 160 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 160 + + + + 162 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 162 + + + + 163 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 163 + + + + 164 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 164 + + + + 165 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 165 + + + + 166 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 166 + + + + 167 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 167 + + + + 168 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 168 + + + + 171 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 171 + + + + 172 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 172 + + + + 173 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 173 + + + + 175 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 175 + + + + 176 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 176 + + + + 178 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 178 + + + + 179 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::PortablePdbHasLocalSource(System.String,Coverlet.Core.Enums.AssemblySearchType) + 179 + + + + 183 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 183 + + + + 184 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 184 + + + + 185 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 185 + + + + 186 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 186 + + + + 187 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 187 + + + + 188 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 188 + + + + 189 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 189 + + + + 190 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 190 + + + + 192 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 192 + + + + 194 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 194 + + + + 195 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 195 + + + + 196 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 196 + + + + 198 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 198 + + + + 199 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 199 + + + + 200 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 200 + + + + 201 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 201 + + + + 202 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 202 + + + + 204 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 204 + + + + 206 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 206 + + + + 207 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSources(System.String,Coverlet.Core.Enums.AssemblySearchType,System.Reflection.Metadata.MetadataReader) + 207 + + + + 210 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 210 + + + + 211 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 211 + + + + 212 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 212 + + + + 213 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 213 + + + + 214 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 214 + + + + 215 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 215 + + + + 216 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 216 + + + + 217 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Collections.Generic.IEnumerable`1<System.ValueTuple`2<System.String,System.Boolean>> Coverlet.Core.Helpers.InstrumentationHelper::DocumentSourceMap(System.Reflection.Metadata.MetadataReader) + 217 + + + + 220 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAll(System.Reflection.Metadata.MetadataReader) + 220 + + + + 221 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAll(System.Reflection.Metadata.MetadataReader) + 221 + + + + 222 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAll(System.Reflection.Metadata.MetadataReader) + 222 + + + + 226 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 226 + + + + 227 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 227 + + + + 229 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 229 + + + + 230 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 230 + + + + 232 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 232 + + + + 233 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.ValueTuple`2<System.Boolean,System.String> Coverlet.Core.Helpers.InstrumentationHelper::MatchDocumentsWithSourcesMissingAny(System.Reflection.Metadata.MetadataReader) + 233 + + + + 236 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 236 + + + + 237 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 237 + + + + 238 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 238 + + + + 239 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 239 + + + + 240 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 240 + + + + 241 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 241 + + + + 242 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 242 + + + + 245 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 245 + + + + 246 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 246 + + + + 247 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 247 + + + + 248 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 248 + + + + 249 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 249 + + + + 250 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 250 + + + + 251 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 251 + + + + 253 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 253 + + + + 254 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::BackupOriginalModule(System.String,System.String) + 254 + + + + 257 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 257 + + + + 258 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 258 + + + + 259 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 259 + + + + 263 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 263 + + + + 265 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 265 + + + + 266 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 266 + + + + 267 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 267 + + + + 268 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 268 + + + + 269 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 269 + + + + 270 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 270 + + + + 272 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 272 + + + + 273 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 273 + + + + 274 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 274 + + + + 275 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 275 + + + + 276 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 276 + + + + 277 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 277 + + + + 278 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 278 + + + + 279 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 279 + + + + 280 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 280 + + + + 281 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 281 + + + + 282 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModule(System.String,System.String) + 282 + + + + 285 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 285 + + + + 288 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 288 + + + + 290 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 290 + + + + 291 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 291 + + + + 292 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 292 + + + + 293 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 293 + + + + 294 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 294 + + + + 295 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 295 + + + + 296 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 296 + + + + 297 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 297 + + + + 298 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 298 + + + + 299 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 299 + + + + 300 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::RestoreOriginalModules() + 300 + + + + 303 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::DeleteHitsFile(System.String) + 303 + + + + 304 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::DeleteHitsFile(System.String) + 304 + + + + 305 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::DeleteHitsFile(System.String) + 305 + + + + 306 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::DeleteHitsFile(System.String) + 306 + + + + 309 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 309 + + + + 310 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 310 + + + + 311 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 311 + + + + 313 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 313 + + + + 314 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 314 + + + + 316 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 316 + + + + 317 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 317 + + + + 319 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 319 + + + + 320 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 320 + + + + 322 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 322 + + + + 323 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 323 + + + + 325 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 325 + + + + 326 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 326 + + + + 328 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 328 + + + + 329 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 329 + + + + 331 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 331 + + + + 332 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 332 + + + + 334 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 334 + + + + 335 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 335 + + + + 337 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 337 + + + + 338 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsValidFilterExpression(System.String) + 338 + + + + 341 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 341 + + + + 342 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 342 + + + + 343 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 343 + + + + 345 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 345 + + + + 346 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 346 + + + + 347 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 347 + + + + 349 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 349 + + + + 350 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 350 + + + + 351 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 351 + + + + 353 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 353 + + + + 354 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 354 + + + + 356 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 356 + + + + 357 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 357 + + + + 359 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 359 + + + + 361 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 361 + + + + 362 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 362 + + + + 363 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 363 + + + + 365 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 365 + + + + 366 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleExcluded(System.String,System.String[]) + 366 + + + + 369 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 369 + + + + 370 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 370 + + + + 371 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 371 + + + + 373 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 373 + + + + 374 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 374 + + + + 375 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 375 + + + + 377 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 377 + + + + 378 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 378 + + + + 379 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 379 + + + + 381 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 381 + + + + 382 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 382 + + + + 384 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 384 + + + + 386 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 386 + + + + 388 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 388 + + + + 389 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 389 + + + + 390 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 390 + + + + 392 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 392 + + + + 393 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsModuleIncluded(System.String,System.String[]) + 393 + + + + 396 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 396 + + + + 397 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 397 + + + + 398 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 398 + + + + 400 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 400 + + + + 401 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 401 + + + + 402 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 402 + + + + 404 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 404 + + + + 405 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeExcluded(System.String,System.String,System.String[]) + 405 + + + + 408 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 408 + + + + 409 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 409 + + + + 410 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 410 + + + + 412 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 412 + + + + 413 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 413 + + + + 414 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 414 + + + + 416 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 416 + + + + 417 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeIncluded(System.String,System.String,System.String[]) + 417 + + + + 420 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsLocalMethod(System.String) + 420 + + + + 423 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::SetLogger(Coverlet.Core.Abstractions.ILogger) + 423 + + + + 424 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::SetLogger(Coverlet.Core.Abstractions.ILogger) + 424 + + + + 425 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::SetLogger(Coverlet.Core.Abstractions.ILogger) + 425 + + + + 428 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 428 + + + + 429 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 429 + + + + 430 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 430 + + + + 432 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 432 + + + + 433 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 433 + + + + 434 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 434 + + + + 435 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 435 + + + + 437 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 437 + + + + 438 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 438 + + + + 440 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 440 + + + + 441 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 441 + + + + 442 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 442 + + + + 444 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 444 + + + + 445 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsTypeFilterMatch(System.String,System.String,System.String[]) + 445 + + + + 448 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 448 + + + + 449 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 449 + + + + 450 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 450 + + + + 451 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 451 + + + + 452 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 452 + + + + 453 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::GetBackupPath(System.String,System.String) + 453 + + + + 456 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Func`1<System.TimeSpan> Coverlet.Core.Helpers.InstrumentationHelper::CreateRetryStrategy(System.Int32) + 456 + + + + 464 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Func`1<System.TimeSpan> Coverlet.Core.Helpers.InstrumentationHelper::CreateRetryStrategy(System.Int32) + 464 + + + + 465 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Func`1<System.TimeSpan> Coverlet.Core.Helpers.InstrumentationHelper::CreateRetryStrategy(System.Int32) + 465 + + + + 468 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::WildcardToRegex(System.String) + 468 + + + + 469 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::WildcardToRegex(System.String) + 469 + + + + 470 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::WildcardToRegex(System.String) + 470 + + + + 471 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::WildcardToRegex(System.String) + 471 + + + + 472 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.String Coverlet.Core.Helpers.InstrumentationHelper::WildcardToRegex(System.String) + 472 + + + + 475 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 475 + + + + 476 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 476 + + + + 478 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 478 + + + + 479 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 479 + + + + 482 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 482 + + + + 483 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 483 + + + + 484 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 484 + + + + 486 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 486 + + + + 487 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 487 + + + + 488 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 488 + + + + 490 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Boolean Coverlet.Core.Helpers.InstrumentationHelper::IsAssembly(System.String) + 490 + + + + 30 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::<.ctor>b__6_0(System.Object,System.EventArgs) + 30 + + + + 22 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 22 + + + + 28 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 28 + + + + 29 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 29 + + + + 31 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 31 + + + + 32 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 32 + + + + 33 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 33 + + + + 34 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 34 + + + + 35 + + Coverlet.Core.Helpers.InstrumentationHelper + 0 + System.Void Coverlet.Core.Helpers.InstrumentationHelper::.ctor(Coverlet.Core.Abstractions.IProcessExitHandler,Coverlet.Core.Abstractions.IRetryHelper,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.ISourceRootTranslator) + 35 + + + + 458 + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0 + 0 + System.TimeSpan Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0::<CreateRetryStrategy>g__retryStrategy|0() + 458 + + + + 459 + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0 + 0 + System.TimeSpan Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0::<CreateRetryStrategy>g__retryStrategy|0() + 459 + + + + 460 + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0 + 0 + System.TimeSpan Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0::<CreateRetryStrategy>g__retryStrategy|0() + 460 + + + + 461 + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0 + 0 + System.TimeSpan Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0::<CreateRetryStrategy>g__retryStrategy|0() + 461 + + + + 462 + + Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0 + 0 + System.TimeSpan Coverlet.Core.Helpers.InstrumentationHelper/<>c__DisplayClass28_0::<CreateRetryStrategy>g__retryStrategy|0() + 462 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\InstrumentationHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\ProcessExitHandler.cs + + + 21 + + + 12 + + Coverlet.Core.Helpers.ProcessExitHandler + 0 + System.Void Coverlet.Core.Helpers.ProcessExitHandler::Add(System.EventHandler) + 12 + + + + 13 + + Coverlet.Core.Helpers.ProcessExitHandler + 0 + System.Void Coverlet.Core.Helpers.ProcessExitHandler::Add(System.EventHandler) + 13 + + + + 14 + + Coverlet.Core.Helpers.ProcessExitHandler + 0 + System.Void Coverlet.Core.Helpers.ProcessExitHandler::Add(System.EventHandler) + 14 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\ProcessExitHandler.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\RetryHelper.cs + + + + + 47 + 3 + + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 47 + 11 + 72 + 3 + 1 + + + + + 51 + 0 + + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 51 + 21 + 19 + 0 + 0 + + + + + 51 + 1 + + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 51 + 35 + 19 + 1 + 1 + + + + + 47 + 2 + + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 47 + 74 + 72 + 2 + 0 + + + + 22 + + + 25 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 25 + + + + 26 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 26 + + + + 27 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 27 + + + + 28 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 28 + + + + 29 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 29 + + + + 30 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 30 + + + + 31 + + Coverlet.Core.Helpers.RetryHelper + 0 + System.Void Coverlet.Core.Helpers.RetryHelper::Retry(System.Action,System.Func`1<System.TimeSpan>,System.Int32) + 31 + + + + 44 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 44 + + + + 45 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 45 + + + + 47 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 47 + + + + 48 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 48 + + + + 50 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 50 + + + + 51 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 51 + + + + 52 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 52 + + + + 53 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 53 + + + + 54 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 54 + + + + 55 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 55 + + + + 57 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 57 + + + + 58 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 58 + + + + 59 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 59 + + + + 60 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 60 + + + + 61 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 61 + + + + 62 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 62 + + + + 63 + + Coverlet.Core.Helpers.RetryHelper + 0 + T Coverlet.Core.Helpers.RetryHelper::Do(System.Func`1<T>,System.Func`1<System.TimeSpan>,System.Int32) + 63 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\RetryHelper.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\SourceRootTranslator.cs + + + + + 57 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 57 + 9 + 7 + 0 + 0 + + + + + 57 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 57 + 21 + 7 + 1 + 1 + + + + + 63 + 7 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 63 + 40 + 180 + 7 + 1 + + + + + 65 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 65 + 66 + 153 + 5 + 1 + + + + + 67 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 67 + 98 + 96 + 2 + 0 + + + + + 67 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 67 + 119 + 96 + 3 + 1 + + + + + 65 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 65 + 155 + 153 + 4 + 0 + + + + + 63 + 6 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 63 + 185 + 180 + 6 + 0 + + + + + 83 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 83 + 39 + 37 + 0 + 0 + + + + + 83 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 83 + 47 + 37 + 1 + 1 + + + + + 88 + 11 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 88 + 70 + 331 + 11 + 1 + + + + + 92 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 92 + 105 + 103 + 2 + 0 + + + + + 92 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 92 + 112 + 103 + 3 + 1 + + + + + 92 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 92 + 119 + 117 + 4 + 0 + + + + + 92 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 92 + 154 + 117 + 5 + 1 + + + + + 101 + 6 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 101 + 216 + 214 + 6 + 0 + + + + + 101 + 7 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 101 + 232 + 214 + 7 + 1 + + + + + 106 + 9 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 106 + 258 + 316 + 9 + 1 + + + + + 106 + 8 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 106 + 318 + 316 + 8 + 0 + + + + + 88 + 10 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 88 + 336 + 331 + 10 + 0 + + + + + 117 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 117 + 9 + 7 + 0 + 0 + + + + + 117 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 117 + 23 + 7 + 1 + 1 + + + + + 117 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 117 + 28 + 26 + 2 + 0 + + + + + 117 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 117 + 33 + 26 + 3 + 1 + + + + + 122 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 122 + 42 + 40 + 4 + 0 + + + + + 122 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 122 + 57 + 40 + 5 + 1 + + + + + 128 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Helpers.SourceRootMapping> Coverlet.Core.Helpers.SourceRootTranslator::ResolvePathRoot(System.String) + 128 + 17 + 15 + 0 + 0 + + + + + 128 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Helpers.SourceRootMapping> Coverlet.Core.Helpers.SourceRootTranslator::ResolvePathRoot(System.String) + 128 + 20 + 15 + 1 + 1 + + + + + 133 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 133 + 9 + 7 + 0 + 0 + + + + + 133 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 133 + 23 + 7 + 1 + 1 + + + + + 133 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 133 + 28 + 26 + 2 + 0 + + + + + 133 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 133 + 47 + 26 + 3 + 1 + + + + + 138 + 13 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 138 + 65 + 318 + 13 + 1 + + + + + 140 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 140 + 96 + 91 + 4 + 0 + + + + + 142 + 11 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 142 + 117 + 287 + 11 + 1 + + + + + 145 + 6 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 145 + 172 + 170 + 6 + 0 + + + + + 147 + 8 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 147 + 182 + 180 + 8 + 0 + + + + + 147 + 9 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 147 + 199 + 180 + 9 + 1 + + + + + 145 + 7 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 145 + 279 + 170 + 7 + 1 + + + + + 142 + 10 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 142 + 292 + 287 + 10 + 0 + + + + + 140 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 140 + 310 + 91 + 5 + 1 + + + + + 138 + 12 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 138 + 323 + 318 + 12 + 0 + + + + + 159 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 159 + 16 + 131 + 5 + 1 + + + + + 161 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 161 + 42 + 40 + 0 + 0 + + + + + 163 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 163 + 59 + 103 + 3 + 1 + + + + + 163 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 163 + 105 + 103 + 2 + 0 + + + + + 161 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 161 + 123 + 40 + 1 + 1 + + + + + 159 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 159 + 133 + 131 + 4 + 0 + + + + + 30 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 30 + 13 + 11 + 0 + 0 + + + + + 30 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 30 + 25 + 11 + 1 + 1 + + + + + 31 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 31 + 35 + 33 + 2 + 0 + + + + + 31 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 31 + 47 + 33 + 3 + 1 + + + + + 37 + 0 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 37 + 13 + 11 + 0 + 0 + + + + + 37 + 1 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 37 + 25 + 11 + 1 + 1 + + + + + 38 + 2 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 38 + 35 + 33 + 2 + 0 + + + + + 38 + 3 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 38 + 47 + 33 + 3 + 1 + + + + + 39 + 4 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 39 + 60 + 58 + 4 + 0 + + + + + 39 + 5 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 39 + 72 + 58 + 5 + 1 + + + + + 43 + 6 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 43 + 91 + 89 + 6 + 0 + + + + + 43 + 7 + + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 43 + 115 + 89 + 7 + 1 + + + + 23 + + + 15 + + Coverlet.Core.Helpers.SourceRootMapping + 0 + System.String Coverlet.Core.Helpers.SourceRootMapping::get_ProjectPath() + 15 + + + + 16 + + Coverlet.Core.Helpers.SourceRootMapping + 0 + System.String Coverlet.Core.Helpers.SourceRootMapping::get_OriginalPath() + 16 + + + + 56 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 56 + + + + 57 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 57 + + + + 58 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 58 + + + + 59 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 59 + + + + 62 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 62 + + + + 63 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 63 + + + + 64 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 64 + + + + 65 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 65 + + + + 66 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 66 + + + + 67 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 67 + + + + 68 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 68 + + + + 69 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 69 + + + + 70 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 70 + + + + 71 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 71 + + + + 72 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 72 + + + + 73 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 73 + + + + 75 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 75 + + + + 76 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<System.String>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceToDeterministicPathMapping(System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>>) + 76 + + + + 79 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 79 + + + + 80 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 80 + + + + 82 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 82 + + + + 83 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 83 + + + + 84 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 84 + + + + 85 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 85 + + + + 88 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 88 + + + + 89 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 89 + + + + 90 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 90 + + + + 91 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 91 + + + + 92 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 92 + + + + 93 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 93 + + + + 94 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 94 + + + + 95 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 95 + + + + 97 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 97 + + + + 98 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 98 + + + + 99 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 99 + + + + 101 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 101 + + + + 102 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 102 + + + + 103 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 103 + + + + 104 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 104 + + + + 106 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 106 + + + + 107 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 107 + + + + 108 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 108 + + + + 109 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 109 + + + + 110 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 110 + + + + 112 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 112 + + + + 113 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.Dictionary`2<System.String,System.Collections.Generic.List`1<Coverlet.Core.Helpers.SourceRootMapping>> Coverlet.Core.Helpers.SourceRootTranslator::LoadSourceRootMapping(System.String) + 113 + + + + 116 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 116 + + + + 117 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 117 + + + + 118 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 118 + + + + 119 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 119 + + + + 122 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 122 + + + + 123 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 123 + + + + 124 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Boolean Coverlet.Core.Helpers.SourceRootTranslator::AddMappingInCache(System.String,System.String) + 124 + + + + 127 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Helpers.SourceRootMapping> Coverlet.Core.Helpers.SourceRootTranslator::ResolvePathRoot(System.String) + 127 + + + + 128 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Helpers.SourceRootMapping> Coverlet.Core.Helpers.SourceRootTranslator::ResolvePathRoot(System.String) + 128 + + + + 129 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Collections.Generic.IReadOnlyList`1<Coverlet.Core.Helpers.SourceRootMapping> Coverlet.Core.Helpers.SourceRootTranslator::ResolvePathRoot(System.String) + 129 + + + + 132 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 132 + + + + 133 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 133 + + + + 134 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 134 + + + + 135 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 135 + + + + 138 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 138 + + + + 139 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 139 + + + + 140 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 140 + + + + 141 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 141 + + + + 142 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 142 + + + + 143 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 143 + + + + 145 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 145 + + + + 146 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 146 + + + + 147 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 147 + + + + 148 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 148 + + + + 149 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 149 + + + + 151 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 151 + + + + 152 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 152 + + + + 153 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 153 + + + + 154 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 154 + + + + 155 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveFilePath(System.String) + 155 + + + + 158 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 158 + + + + 159 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 159 + + + + 160 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 160 + + + + 161 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 161 + + + + 162 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 162 + + + + 163 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 163 + + + + 164 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 164 + + + + 165 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 165 + + + + 166 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 166 + + + + 167 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 167 + + + + 168 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 168 + + + + 170 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 170 + + + + 171 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.String Coverlet.Core.Helpers.SourceRootTranslator::ResolveDeterministicPath(System.String) + 171 + + + + 28 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 28 + + + + 29 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 29 + + + + 30 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 30 + + + + 31 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 31 + + + + 32 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 32 + + + + 33 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem) + 33 + + + + 35 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 35 + + + + 36 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 36 + + + + 37 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 37 + + + + 38 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 38 + + + + 39 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 39 + + + + 40 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 40 + + + + 41 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 41 + + + + 43 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 43 + + + + 44 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 44 + + + + 45 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 45 + + + + 48 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 48 + + + + 49 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 49 + + + + 51 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 51 + + + + 52 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 52 + + + + 53 + + Coverlet.Core.Helpers.SourceRootTranslator + 0 + System.Void Coverlet.Core.Helpers.SourceRootTranslator::.ctor(System.String,Coverlet.Core.Abstractions.ILogger,Coverlet.Core.Abstractions.IFileSystem,Coverlet.Core.Abstractions.IAssemblyAdapter) + 53 + + + + C:\GitHub\coverlet\src\coverlet.core\Helpers\SourceRootTranslator.cs + + + + C:\GitHub\coverlet\src\coverlet.core\Exceptions.cs + + + 24 + + + 11 + + Coverlet.Core.Exceptions.CoverletException + 0 + System.Void Coverlet.Core.Exceptions.CoverletException::.ctor() + 11 + + + + 12 + + Coverlet.Core.Exceptions.CoverletException + 0 + System.Void Coverlet.Core.Exceptions.CoverletException::.ctor(System.String) + 12 + + + + 13 + + Coverlet.Core.Exceptions.CoverletException + 0 + System.Void Coverlet.Core.Exceptions.CoverletException::.ctor(System.String,System.Exception) + 13 + + + + 16 + + Coverlet.Core.Exceptions.CoverletException + 0 + System.Void Coverlet.Core.Exceptions.CoverletException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + 16 + + + + 22 + + Coverlet.Core.Exceptions.CecilAssemblyResolutionException + 0 + System.Void Coverlet.Core.Exceptions.CecilAssemblyResolutionException::.ctor() + 22 + + + + 23 + + Coverlet.Core.Exceptions.CecilAssemblyResolutionException + 0 + System.Void Coverlet.Core.Exceptions.CecilAssemblyResolutionException::.ctor(System.String) + 23 + + + + 24 + + Coverlet.Core.Exceptions.CecilAssemblyResolutionException + 0 + System.Void Coverlet.Core.Exceptions.CecilAssemblyResolutionException::.ctor(System.String,System.Exception) + 24 + + + + 27 + + Coverlet.Core.Exceptions.CecilAssemblyResolutionException + 0 + System.Void Coverlet.Core.Exceptions.CecilAssemblyResolutionException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + 27 + + + + C:\GitHub\coverlet\src\coverlet.core\Exceptions.cs + + + + + + 0 + 21 + false + 21 + + + 0 + 21 + false + 21 + + + 0 + 23 + false + 23 + + + 0 + 23 + false + 23 + + + 0 + 25 + false + 25 + + + 0 + 25 + false + 25 + + + 0 + 27 + false + 27 + + + 0 + 27 + false + 27 + + + 0 + 29 + false + 29 + + + 0 + 29 + false + 29 + + + 0 + 31 + false + 31 + + + 0 + 31 + false + 31 + + + 0 + 33 + false + 33 + + + 0 + 33 + false + 33 + + + 0 + 35 + false + 35 + + + 0 + 35 + false + 35 + + + 0 + 37 + false + 37 + + + 0 + 37 + false + 37 + + + 0 + 39 + false + 39 + + + 0 + 39 + false + 39 + + + 0 + 41 + false + 41 + + + 0 + 41 + false + 41 + + + 0 + 43 + false + 43 + + + 0 + 43 + false + 43 + + + 0 + 45 + false + 45 + + + 0 + 45 + false + 45 + + + 0 + 47 + false + 47 + + + 0 + 47 + false + 47 + + + 0 + 61 + false + 61 + + + 0 + 100 + false + 100 + + + 0 + 101 + false + 101 + + + 0 + 103 + false + 103 + + + 0 + 0 + true + 103 + + + 0 + 1 + true + 103 + + + 0 + 104 + false + 104 + + + 0 + 2 + true + 104 + + + 0 + 3 + true + 104 + + + 0 + 105 + false + 105 + + + 0 + 4 + true + 105 + + + 0 + 5 + true + 105 + + + 0 + 107 + false + 107 + + + 0 + 6 + true + 107 + + + 0 + 7 + true + 107 + + + 0 + 108 + false + 108 + + + 0 + 8 + true + 108 + + + 0 + 9 + true + 108 + + + 0 + 110 + false + 110 + + + 0 + 110 + false + 110 + + + 0 + 110 + false + 110 + + + 0 + 19 + true + 110 + + + 0 + 111 + false + 111 + + + 0 + 113 + false + 112 + + + 0 + 10 + true + 112 + + + 0 + 11 + true + 112 + + + 0 + 114 + false + 114 + + + 0 + 12 + true + 112 + + + 0 + 115 + false + 115 + + + 0 + 116 + false + 116 + + + 0 + 126 + false + 119 + + + 0 + 13 + true + 112 + + + 0 + 128 + false + 128 + + + 0 + 129 + false + 129 + + + 0 + 14 + true + 128 + + + 0 + 130 + false + 130 + + + 0 + 134 + false + 134 + + + 0 + 135 + false + 135 + + + 0 + 136 + false + 136 + + + 0 + 137 + false + 137 + + + 0 + 16 + true + 136 + + + 0 + 138 + false + 138 + + + 0 + 139 + false + 139 + + + 0 + 140 + false + 140 + + + 0 + 141 + false + 141 + + + 0 + 17 + true + 136 + + + 0 + 142 + false + 142 + + + 0 + 143 + false + 143 + + + 0 + 144 + false + 144 + + + 0 + 145 + false + 145 + + + 0 + 146 + false + 146 + + + 0 + 147 + false + 147 + + + 0 + 148 + false + 148 + + + 0 + 15 + true + 128 + + + 0 + 110 + false + 110 + + + 0 + 156 + false + 150 + + + 0 + 18 + true + 110 + + + 0 + 157 + false + 157 + + + 0 + 160 + false + 160 + + + 0 + 161 + false + 161 + + + 0 + 163 + false + 163 + + + 0 + 164 + false + 164 + + + 0 + 164 + false + 164 + + + 0 + 164 + false + 164 + + + 0 + 19 + true + 164 + + + 0 + 165 + false + 165 + + + 0 + 166 + false + 166 + + + 0 + 167 + false + 167 + + + 0 + 167 + false + 167 + + + 0 + 167 + false + 167 + + + 0 + 17 + true + 167 + + + 0 + 168 + false + 168 + + + 0 + 170 + false + 170 + + + 0 + 170 + false + 170 + + + 0 + 170 + false + 170 + + + 0 + 7 + true + 170 + + + 0 + 171 + false + 171 + + + 0 + 172 + false + 172 + + + 0 + 173 + false + 173 + + + 0 + 0 + true + 172 + + + 0 + 174 + false + 174 + + + 0 + 175 + false + 175 + + + 0 + 2 + true + 174 + + + 0 + 176 + false + 176 + + + 0 + 177 + false + 177 + + + 0 + 4 + true + 176 + + + 0 + 178 + false + 178 + + + 0 + 179 + false + 179 + + + 0 + 181 + false + 181 + + + 0 + 5 + true + 176 + + + 0 + 182 + false + 182 + + + 0 + 183 + false + 183 + + + 0 + 184 + false + 184 + + + 0 + 185 + false + 185 + + + 0 + 187 + false + 187 + + + 0 + 3 + true + 174 + + + 0 + 188 + false + 188 + + + 0 + 189 + false + 189 + + + 0 + 190 + false + 190 + + + 0 + 191 + false + 191 + + + 0 + 192 + false + 192 + + + 0 + 194 + false + 194 + + + 0 + 1 + true + 172 + + + 0 + 195 + false + 195 + + + 0 + 196 + false + 196 + + + 0 + 197 + false + 197 + + + 0 + 198 + false + 198 + + + 0 + 199 + false + 199 + + + 0 + 200 + false + 200 + + + 0 + 170 + false + 170 + + + 0 + 6 + true + 170 + + + 0 + 203 + false + 203 + + + 0 + 203 + false + 203 + + + 0 + 203 + false + 203 + + + 0 + 15 + true + 203 + + + 0 + 204 + false + 204 + + + 0 + 205 + false + 205 + + + 0 + 206 + false + 206 + + + 0 + 8 + true + 205 + + + 0 + 207 + false + 207 + + + 0 + 208 + false + 208 + + + 0 + 10 + true + 207 + + + 0 + 209 + false + 209 + + + 0 + 210 + false + 210 + + + 0 + 12 + true + 209 + + + 0 + 213 + false + 211 + + + 0 + 214 + false + 214 + + + 0 + 216 + false + 216 + + + 0 + 13 + true + 209 + + + 0 + 217 + false + 217 + + + 0 + 220 + false + 218 + + + 0 + 221 + false + 221 + + + 0 + 222 + false + 222 + + + 0 + 224 + false + 224 + + + 0 + 11 + true + 207 + + + 0 + 225 + false + 225 + + + 0 + 226 + false + 226 + + + 0 + 229 + false + 227 + + + 0 + 230 + false + 230 + + + 0 + 231 + false + 231 + + + 0 + 233 + false + 233 + + + 0 + 9 + true + 205 + + + 0 + 234 + false + 234 + + + 0 + 235 + false + 235 + + + 0 + 236 + false + 236 + + + 0 + 239 + false + 237 + + + 0 + 240 + false + 240 + + + 0 + 241 + false + 241 + + + 0 + 203 + false + 203 + + + 0 + 14 + true + 203 + + + 0 + 242 + false + 242 + + + 0 + 167 + false + 167 + + + 0 + 16 + true + 167 + + + 0 + 244 + false + 244 + + + 0 + 245 + false + 245 + + + 0 + 246 + false + 246 + + + 0 + 164 + false + 164 + + + 0 + 18 + true + 164 + + + 0 + 252 + false + 252 + + + 0 + 253 + false + 253 + + + 0 + 253 + false + 253 + + + 0 + 253 + false + 253 + + + 0 + 39 + true + 253 + + + 0 + 254 + false + 254 + + + 0 + 255 + false + 255 + + + 0 + 255 + false + 255 + + + 0 + 255 + false + 255 + + + 0 + 37 + true + 255 + + + 0 + 256 + false + 256 + + + 0 + 257 + false + 257 + + + 0 + 257 + false + 257 + + + 0 + 257 + false + 257 + + + 0 + 35 + true + 257 + + + 0 + 258 + false + 258 + + + 0 + 261 + false + 261 + + + 0 + 262 + false + 262 + + + 0 + 20 + true + 261 + + + 0 + 263 + false + 263 + + + 0 + 266 + false + 266 + + + 0 + 21 + true + 261 + + + 0 + 266 + false + 266 + + + 0 + 266 + false + 266 + + + 0 + 33 + true + 266 + + + 0 + 267 + false + 267 + + + 0 + 268 + false + 268 + + + 0 + 268 + false + 268 + + + 0 + 268 + false + 268 + + + 0 + 31 + true + 268 + + + 0 + 269 + false + 269 + + + 0 + 270 + false + 270 + + + 0 + 271 + false + 271 + + + 0 + 22 + true + 270 + + + 0 + 272 + false + 272 + + + 0 + 274 + false + 274 + + + 0 + 275 + false + 275 + + + 0 + 24 + true + 274 + + + 0 + 276 + false + 276 + + + 0 + 279 + false + 279 + + + 0 + 25 + true + 274 + + + 0 + 281 + false + 281 + + + 0 + 282 + false + 282 + + + 0 + 26 + true + 281 + + + 0 + 283 + false + 283 + + + 0 + 284 + false + 284 + + + 0 + 286 + false + 286 + + + 0 + 27 + true + 281 + + + 0 + 287 + false + 287 + + + 0 + 28 + true + 286 + + + 0 + 288 + false + 288 + + + 0 + 289 + false + 289 + + + 0 + 290 + false + 290 + + + 0 + 29 + true + 286 + + + 0 + 291 + false + 291 + + + 0 + 23 + true + 270 + + + 0 + 268 + false + 268 + + + 0 + 30 + true + 268 + + + 0 + 292 + false + 292 + + + 0 + 266 + false + 266 + + + 0 + 32 + true + 266 + + + 0 + 293 + false + 293 + + + 0 + 257 + false + 257 + + + 0 + 34 + true + 257 + + + 0 + 294 + false + 294 + + + 0 + 255 + false + 255 + + + 0 + 36 + true + 255 + + + 0 + 295 + false + 295 + + + 0 + 253 + false + 253 + + + 0 + 38 + true + 253 + + + 0 + 298 + false + 298 + + + 0 + 299 + false + 299 + + + 0 + 40 + true + 298 + + + 0 + 300 + false + 300 + + + 0 + 300 + false + 300 + + + 0 + 300 + false + 300 + + + 0 + 47 + true + 300 + + + 0 + 301 + false + 301 + + + 0 + 302 + false + 302 + + + 0 + 302 + false + 302 + + + 0 + 302 + false + 302 + + + 0 + 45 + true + 302 + + + 0 + 303 + false + 303 + + + 0 + 304 + false + 304 + + + 0 + 304 + false + 304 + + + 0 + 304 + false + 304 + + + 0 + 43 + true + 304 + + + 0 + 305 + false + 305 + + + 0 + 306 + false + 306 + + + 0 + 307 + false + 307 + + + 0 + 304 + false + 304 + + + 0 + 42 + true + 304 + + + 0 + 308 + false + 308 + + + 0 + 302 + false + 302 + + + 0 + 44 + true + 302 + + + 0 + 309 + false + 309 + + + 0 + 300 + false + 300 + + + 0 + 46 + true + 300 + + + 0 + 310 + false + 310 + + + 0 + 312 + false + 312 + + + 0 + 41 + true + 298 + + + 0 + 314 + false + 314 + + + 0 + 48 + true + 314 + + + 0 + 50 + true + 314 + + + 0 + 49 + true + 314 + + + 0 + 51 + true + 314 + + + 0 + 315 + false + 315 + + + 0 + 52 + true + 314 + + + 0 + 316 + false + 316 + + + 0 + 317 + false + 317 + + + 0 + 318 + false + 318 + + + 0 + 320 + false + 320 + + + 0 + 53 + true + 314 + + + 0 + 321 + false + 321 + + + 0 + 324 + false + 324 + + + 0 + 325 + false + 325 + + + 0 + 325 + false + 325 + + + 0 + 325 + false + 325 + + + 0 + 3 + true + 325 + + + 0 + 326 + false + 326 + + + 0 + 327 + false + 327 + + + 0 + 328 + false + 328 + + + 0 + 0 + true + 327 + + + 0 + 329 + false + 329 + + + 0 + 331 + false + 331 + + + 0 + 1 + true + 327 + + + 0 + 325 + false + 325 + + + 0 + 2 + true + 325 + + + 0 + 332 + false + 332 + + + 0 + 333 + false + 333 + + + 0 + 336 + false + 336 + + + 0 + 337 + false + 337 + + + 0 + 337 + false + 337 + + + 0 + 337 + false + 337 + + + 0 + 9 + true + 337 + + + 0 + 338 + false + 338 + + + 0 + 339 + false + 339 + + + 0 + 340 + false + 340 + + + 0 + 0 + true + 339 + + + 0 + 341 + false + 341 + + + 0 + 344 + false + 344 + + + 0 + 1 + true + 339 + + + 0 + 344 + false + 344 + + + 0 + 344 + false + 344 + + + 0 + 7 + true + 344 + + + 0 + 345 + false + 345 + + + 0 + 346 + false + 346 + + + 0 + 346 + false + 346 + + + 0 + 346 + false + 346 + + + 0 + 5 + true + 346 + + + 0 + 347 + false + 347 + + + 0 + 348 + false + 348 + + + 0 + 349 + false + 349 + + + 0 + 2 + true + 348 + + + 0 + 350 + false + 350 + + + 0 + 352 + false + 352 + + + 0 + 3 + true + 348 + + + 0 + 346 + false + 346 + + + 0 + 4 + true + 346 + + + 0 + 353 + false + 353 + + + 0 + 344 + false + 344 + + + 0 + 6 + true + 344 + + + 0 + 354 + false + 354 + + + 0 + 337 + false + 337 + + + 0 + 8 + true + 337 + + + 0 + 355 + false + 355 + + + 0 + 356 + false + 356 + + + 0 + 359 + false + 359 + + + 0 + 360 + false + 360 + + + 0 + 360 + false + 360 + + + 0 + 360 + false + 360 + + + 0 + 51 + true + 360 + + + 0 + 361 + false + 361 + + + 0 + 362 + false + 362 + + + 0 + 363 + false + 363 + + + 0 + 0 + true + 362 + + + 0 + 368 + false + 368 + + + 0 + 369 + false + 369 + + + 0 + 372 + false + 372 + + + 0 + 1 + true + 362 + + + 0 + 373 + false + 373 + + + 0 + 2 + true + 373 + + + 0 + 3 + true + 373 + + + 0 + 374 + false + 374 + + + 0 + 4 + true + 373 + + + 0 + 375 + false + 375 + + + 0 + 376 + false + 376 + + + 0 + 377 + false + 377 + + + 0 + 377 + false + 377 + + + 0 + 377 + false + 377 + + + 0 + 7 + true + 377 + + + 0 + 378 + false + 378 + + + 0 + 379 + false + 379 + + + 0 + 380 + false + 380 + + + 0 + 377 + false + 377 + + + 0 + 6 + true + 377 + + + 0 + 381 + false + 381 + + + 0 + 385 + false + 385 + + + 0 + 5 + true + 373 + + + 0 + 385 + false + 385 + + + 0 + 31 + true + 385 + + + 0 + 385 + false + 385 + + + 0 + 386 + false + 386 + + + 0 + 387 + false + 387 + + + 0 + 8 + true + 387 + + + 0 + 9 + true + 387 + + + 0 + 388 + false + 388 + + + 0 + 10 + true + 387 + + + 0 + 389 + false + 389 + + + 0 + 392 + false + 392 + + + 0 + 11 + true + 387 + + + 0 + 392 + false + 392 + + + 0 + 12 + true + 392 + + + 0 + 13 + true + 392 + + + 0 + 392 + false + 392 + + + 0 + 29 + true + 392 + + + 0 + 393 + false + 393 + + + 0 + 394 + false + 394 + + + 0 + 14 + true + 394 + + + 0 + 15 + true + 394 + + + 0 + 395 + false + 395 + + + 0 + 16 + true + 394 + + + 0 + 397 + false + 396 + + + 0 + 18 + true + 396 + + + 0 + 19 + true + 396 + + + 0 + 398 + false + 398 + + + 0 + 20 + true + 396 + + + 0 + 399 + false + 399 + + + 0 + 402 + false + 402 + + + 0 + 27 + true + 400 + + + 0 + 403 + false + 403 + + + 0 + 22 + true + 403 + + + 0 + 23 + true + 403 + + + 0 + 404 + false + 404 + + + 0 + 401 + false + 401 + + + 0 + 400 + false + 400 + + + 0 + 24 + true + 400 + + + 0 + 25 + true + 400 + + + 0 + 405 + false + 405 + + + 0 + 26 + true + 400 + + + 0 + 406 + false + 406 + + + 0 + 21 + true + 396 + + + 0 + 407 + false + 407 + + + 0 + 17 + true + 394 + + + 0 + 392 + false + 392 + + + 0 + 28 + true + 392 + + + 0 + 408 + false + 408 + + + 0 + 385 + false + 385 + + + 0 + 30 + true + 385 + + + 0 + 410 + false + 410 + + + 0 + 411 + false + 411 + + + 0 + 412 + false + 412 + + + 0 + 413 + false + 413 + + + 0 + 414 + false + 414 + + + 0 + 418 + false + 418 + + + 0 + 419 + false + 419 + + + 0 + 49 + true + 418 + + + 0 + 420 + false + 420 + + + 0 + 421 + false + 421 + + + 0 + 422 + false + 422 + + + 0 + 424 + false + 424 + + + 0 + 425 + false + 425 + + + 0 + 427 + false + 427 + + + 0 + 33 + true + 424 + + + 0 + 34 + true + 427 + + + 0 + 35 + true + 427 + + + 0 + 429 + false + 429 + + + 0 + 430 + false + 430 + + + 0 + 36 + true + 429 + + + 0 + 431 + false + 431 + + + 0 + 432 + false + 432 + + + 0 + 434 + false + 434 + + + 0 + 435 + false + 435 + + + 0 + 38 + true + 434 + + + 0 + 436 + false + 436 + + + 0 + 39 + true + 434 + + + 0 + 438 + false + 438 + + + 0 + 37 + true + 429 + + + 0 + 439 + false + 439 + + + 0 + 440 + false + 440 + + + 0 + 47 + true + 439 + + + 0 + 441 + false + 441 + + + 0 + 40 + true + 441 + + + 0 + 41 + true + 441 + + + 0 + 442 + false + 442 + + + 0 + 42 + true + 441 + + + 0 + 443 + false + 443 + + + 0 + 446 + false + 446 + + + 0 + 43 + true + 441 + + + 0 + 447 + false + 447 + + + 0 + 449 + false + 449 + + + 0 + 450 + false + 450 + + + 0 + 44 + true + 449 + + + 0 + 451 + false + 451 + + + 0 + 45 + true + 449 + + + 0 + 439 + false + 439 + + + 0 + 439 + false + 439 + + + 0 + 452 + false + 452 + + + 0 + 46 + true + 439 + + + 0 + 453 + false + 453 + + + 0 + 418 + false + 418 + + + 0 + 32 + true + 424 + + + 0 + 418 + false + 418 + + + 0 + 454 + false + 454 + + + 0 + 48 + true + 418 + + + 0 + 457 + false + 457 + + + 0 + 458 + false + 458 + + + 0 + 459 + false + 459 + + + 0 + 460 + false + 460 + + + 0 + 461 + false + 461 + + + 0 + 462 + false + 462 + + + 0 + 463 + false + 463 + + + 0 + 464 + false + 464 + + + 0 + 465 + false + 465 + + + 0 + 360 + false + 360 + + + 0 + 50 + true + 360 + + + 0 + 466 + false + 466 + + + 0 + 469 + false + 469 + + + 0 + 470 + false + 470 + + + 0 + 471 + false + 471 + + + 0 + 0 + true + 470 + + + 0 + 472 + false + 472 + + + 0 + 475 + false + 475 + + + 0 + 1 + true + 470 + + + 0 + 476 + false + 476 + + + 0 + 478 + false + 478 + + + 0 + 478 + false + 478 + + + 0 + 478 + false + 478 + + + 0 + 17 + true + 478 + + + 0 + 479 + false + 479 + + + 0 + 480 + false + 480 + + + 0 + 481 + false + 481 + + + 0 + 481 + false + 481 + + + 0 + 483 + false + 483 + + + 0 + 3 + true + 481 + + + 0 + 484 + false + 484 + + + 0 + 484 + false + 484 + + + 0 + 4 + true + 484 + + + 0 + 5 + true + 484 + + + 0 + 484 + false + 484 + + + 0 + 15 + true + 484 + + + 0 + 485 + false + 485 + + + 0 + 486 + false + 486 + + + 0 + 487 + false + 487 + + + 0 + 488 + false + 488 + + + 0 + 491 + false + 491 + + + 0 + 492 + false + 492 + + + 0 + 6 + true + 491 + + + 0 + 493 + false + 493 + + + 0 + 494 + false + 494 + + + 0 + 496 + false + 496 + + + 0 + 9 + true + 493 + + + 0 + 497 + false + 497 + + + 0 + 499 + false + 499 + + + 0 + 7 + true + 491 + + + 0 + 500 + false + 500 + + + 0 + 10 + true + 499 + + + 0 + 501 + false + 501 + + + 0 + 502 + false + 502 + + + 0 + 503 + false + 503 + + + 0 + 505 + false + 505 + + + 0 + 11 + true + 499 + + + 0 + 506 + false + 506 + + + 0 + 12 + true + 505 + + + 0 + 507 + false + 507 + + + 0 + 508 + false + 508 + + + 0 + 509 + false + 509 + + + 0 + 510 + false + 510 + + + 0 + 13 + true + 505 + + + 0 + 484 + false + 484 + + + 0 + 8 + true + 493 + + + 0 + 14 + true + 484 + + + 0 + 511 + false + 511 + + + 0 + 478 + false + 478 + + + 0 + 2 + true + 481 + + + 0 + 16 + true + 478 + + + 0 + 513 + false + 513 + + + 0 + 18 + true + 513 + + + 0 + 19 + true + 513 + + + 0 + 515 + false + 515 + + + 0 + 516 + false + 516 + + + 0 + 518 + false + 518 + + + 0 + 519 + false + 519 + + + 0 + 20 + true + 518 + + + 0 + 520 + false + 520 + + + 0 + 523 + false + 523 + + + 0 + 21 + true + 518 + + + 0 + 524 + false + 524 + + + 0 + 103 + false + 103 + + + 0 + 104 + false + 104 + + + 0 + 105 + false + 105 + + + 0 + 107 + false + 107 + + + 0 + 108 + false + 108 + + + 0 + 69 + false + 63 + + + 0 + 70 + false + 70 + + + 0 + 71 + false + 71 + + + 0 + 72 + false + 72 + + + 0 + 0 + true + 72 + + + 0 + 73 + false + 73 + + + 0 + 1 + true + 72 + + + 0 + 74 + false + 74 + + + 0 + 75 + false + 75 + + + 0 + 76 + false + 76 + + + 0 + 77 + false + 77 + + + 0 + 78 + false + 78 + + + 0 + 79 + false + 79 + + + 0 + 80 + false + 80 + + + 0 + 81 + false + 81 + + + 0 + 87 + false + 83 + + + 0 + 88 + false + 88 + + + 0 + 89 + false + 89 + + + 0 + 90 + false + 90 + + + 0 + 91 + false + 91 + + + 0 + 92 + false + 92 + + + 0 + 93 + false + 93 + + + 0 + 94 + false + 94 + + + 0 + 95 + false + 95 + + + 0 + 96 + false + 96 + + + 0 + 97 + false + 97 + + + 0 + 484 + false + 484 + + + 0 + 392 + false + 392 + + + 1 + 12 + false + 12 + + + 1 + 12 + false + 12 + + + 1 + 13 + false + 13 + + + 1 + 13 + false + 13 + + + 1 + 14 + false + 14 + + + 1 + 14 + false + 14 + + + 1 + 18 + false + 18 + + + 1 + 19 + false + 19 + + + 1 + 0 + true + 19 + + + 1 + 1 + true + 19 + + + 1 + 19 + false + 19 + + + 1 + 2 + true + 19 + + + 1 + 20 + false + 20 + + + 1 + 3 + true + 19 + + + 1 + 4 + true + 20 + + + 1 + 5 + true + 20 + + + 1 + 21 + false + 21 + + + 1 + 26 + false + 26 + + + 1 + 26 + false + 26 + + + 1 + 26 + false + 26 + + + 1 + 27 + false + 27 + + + 1 + 27 + false + 27 + + + 1 + 27 + false + 27 + + + 2 + 17 + false + 17 + + + 2 + 17 + false + 17 + + + 2 + 19 + false + 19 + + + 2 + 19 + false + 19 + + + 2 + 21 + false + 21 + + + 2 + 21 + false + 21 + + + 2 + 23 + false + 23 + + + 2 + 23 + false + 23 + + + 2 + 25 + false + 25 + + + 2 + 25 + false + 25 + + + 2 + 27 + false + 27 + + + 2 + 27 + false + 27 + + + 2 + 30 + false + 30 + + + 2 + 31 + false + 31 + + + 2 + 32 + false + 32 + + + 2 + 35 + false + 35 + + + 2 + 36 + false + 36 + + + 2 + 37 + false + 37 + + + 2 + 38 + false + 38 + + + 2 + 39 + false + 39 + + + 2 + 40 + false + 40 + + + 3 + 13 + false + 13 + + + 3 + 13 + false + 13 + + + 3 + 14 + false + 14 + + + 3 + 14 + false + 14 + + + 3 + 15 + false + 15 + + + 3 + 15 + false + 15 + + + 3 + 16 + false + 16 + + + 3 + 16 + false + 16 + + + 3 + 17 + false + 17 + + + 3 + 17 + false + 17 + + + 3 + 18 + false + 18 + + + 3 + 18 + false + 18 + + + 3 + 27 + false + 27 + + + 3 + 28 + false + 28 + + + 3 + 29 + false + 29 + + + 3 + 30 + false + 30 + + + 3 + 31 + false + 31 + + + 3 + 42 + false + 42 + + + 3 + 42 + false + 42 + + + 3 + 43 + false + 43 + + + 3 + 43 + false + 43 + + + 3 + 44 + false + 44 + + + 3 + 44 + false + 44 + + + 3 + 45 + false + 45 + + + 3 + 45 + false + 45 + + + 3 + 50 + false + 50 + + + 3 + 51 + false + 51 + + + 3 + 51 + false + 51 + + + 3 + 51 + false + 51 + + + 3 + 23 + true + 51 + + + 3 + 52 + false + 52 + + + 3 + 53 + false + 53 + + + 3 + 54 + false + 54 + + + 3 + 0 + true + 53 + + + 3 + 55 + false + 55 + + + 3 + 56 + false + 56 + + + 3 + 58 + false + 58 + + + 3 + 1 + true + 53 + + + 3 + 59 + false + 59 + + + 3 + 59 + false + 59 + + + 3 + 59 + false + 59 + + + 3 + 21 + true + 59 + + + 3 + 60 + false + 60 + + + 3 + 61 + false + 61 + + + 3 + 62 + false + 62 + + + 3 + 2 + true + 61 + + + 3 + 63 + false + 63 + + + 3 + 64 + false + 64 + + + 3 + 66 + false + 66 + + + 3 + 3 + true + 61 + + + 3 + 67 + false + 67 + + + 3 + 67 + false + 67 + + + 3 + 67 + false + 67 + + + 3 + 19 + true + 67 + + + 3 + 68 + false + 68 + + + 3 + 69 + false + 69 + + + 3 + 70 + false + 70 + + + 3 + 4 + true + 69 + + + 3 + 71 + false + 71 + + + 3 + 72 + false + 72 + + + 3 + 74 + false + 74 + + + 3 + 5 + true + 69 + + + 3 + 75 + false + 75 + + + 3 + 75 + false + 75 + + + 3 + 75 + false + 75 + + + 3 + 17 + true + 75 + + + 3 + 76 + false + 76 + + + 3 + 77 + false + 77 + + + 3 + 78 + false + 78 + + + 3 + 6 + true + 77 + + + 3 + 79 + false + 79 + + + 3 + 80 + false + 80 + + + 3 + 82 + false + 82 + + + 3 + 7 + true + 77 + + + 3 + 83 + false + 83 + + + 3 + 83 + false + 83 + + + 3 + 83 + false + 83 + + + 3 + 11 + true + 83 + + + 3 + 84 + false + 84 + + + 3 + 85 + false + 85 + + + 3 + 86 + false + 86 + + + 3 + 8 + true + 85 + + + 3 + 87 + false + 87 + + + 3 + 88 + false + 88 + + + 3 + 90 + false + 90 + + + 3 + 9 + true + 85 + + + 3 + 91 + false + 91 + + + 3 + 92 + false + 92 + + + 3 + 93 + false + 93 + + + 3 + 83 + false + 83 + + + 3 + 10 + true + 83 + + + 3 + 95 + false + 95 + + + 3 + 95 + false + 95 + + + 3 + 15 + true + 95 + + + 3 + 95 + false + 95 + + + 3 + 96 + false + 96 + + + 3 + 97 + false + 97 + + + 3 + 98 + false + 98 + + + 3 + 99 + false + 99 + + + 3 + 100 + false + 100 + + + 3 + 12 + true + 99 + + + 3 + 102 + false + 102 + + + 3 + 13 + true + 99 + + + 3 + 103 + false + 103 + + + 3 + 95 + false + 95 + + + 3 + 14 + true + 95 + + + 3 + 104 + false + 104 + + + 3 + 105 + false + 105 + + + 3 + 75 + false + 75 + + + 3 + 16 + true + 75 + + + 3 + 106 + false + 106 + + + 3 + 107 + false + 107 + + + 3 + 67 + false + 67 + + + 3 + 18 + true + 67 + + + 3 + 108 + false + 108 + + + 3 + 109 + false + 109 + + + 3 + 59 + false + 59 + + + 3 + 20 + true + 59 + + + 3 + 110 + false + 110 + + + 3 + 111 + false + 111 + + + 3 + 51 + false + 51 + + + 3 + 22 + true + 51 + + + 3 + 112 + false + 112 + + + 3 + 115 + false + 115 + + + 3 + 116 + false + 116 + + + 3 + 117 + false + 117 + + + 3 + 120 + false + 120 + + + 3 + 1 + true + 117 + + + 3 + 121 + false + 121 + + + 3 + 122 + false + 122 + + + 3 + 4 + true + 121 + + + 3 + 124 + false + 124 + + + 3 + 5 + true + 121 + + + 3 + 124 + false + 124 + + + 3 + 124 + false + 124 + + + 3 + 7 + true + 124 + + + 3 + 125 + false + 125 + + + 3 + 126 + false + 126 + + + 3 + 127 + false + 127 + + + 3 + 128 + false + 128 + + + 3 + 130 + false + 130 + + + 3 + 131 + false + 131 + + + 3 + 124 + false + 124 + + + 3 + 6 + true + 124 + + + 3 + 132 + false + 132 + + + 3 + 133 + false + 133 + + + 3 + 135 + false + 135 + + + 3 + 2 + true + 117 + + + 3 + 136 + false + 136 + + + 3 + 137 + false + 137 + + + 3 + 138 + false + 138 + + + 3 + 140 + false + 140 + + + 3 + 141 + false + 141 + + + 3 + 142 + false + 142 + + + 3 + 144 + false + 144 + + + 3 + 3 + true + 117 + + + 3 + 145 + false + 145 + + + 3 + 146 + false + 146 + + + 3 + 147 + false + 147 + + + 3 + 149 + false + 149 + + + 3 + 150 + false + 150 + + + 3 + 151 + false + 151 + + + 3 + 154 + false + 154 + + + 3 + 0 + true + 117 + + + 3 + 155 + false + 155 + + + 3 + 160 + false + 160 + + + 3 + 162 + false + 161 + + + 3 + 0 + true + 161 + + + 3 + 1 + true + 161 + + + 3 + 163 + false + 163 + + + 3 + 2 + true + 161 + + + 3 + 164 + false + 164 + + + 3 + 165 + false + 165 + + + 3 + 168 + false + 167 + + + 3 + 3 + true + 161 + + + 3 + 4 + true + 167 + + + 3 + 5 + true + 167 + + + 3 + 169 + false + 169 + + + 3 + 6 + true + 167 + + + 3 + 170 + false + 170 + + + 3 + 171 + false + 171 + + + 3 + 174 + false + 173 + + + 3 + 7 + true + 167 + + + 3 + 8 + true + 173 + + + 3 + 9 + true + 173 + + + 3 + 175 + false + 175 + + + 3 + 10 + true + 173 + + + 3 + 176 + false + 176 + + + 3 + 177 + false + 177 + + + 3 + 179 + false + 179 + + + 3 + 11 + true + 173 + + + 3 + 180 + false + 180 + + + 3 + 47 + false + 47 + + + 3 + 47 + false + 47 + + + 3 + 47 + false + 47 + + + 3 + 98 + false + 98 + + + 3 + 0 + true + 98 + + + 3 + 2 + true + 98 + + + 3 + 4 + true + 98 + + + 3 + 6 + true + 98 + + + 3 + 1 + true + 98 + + + 3 + 3 + true + 98 + + + 3 + 5 + true + 98 + + + 3 + 7 + true + 98 + + + 4 + 13 + false + 13 + + + 4 + 14 + false + 14 + + + 4 + 15 + false + 15 + + + 4 + 16 + false + 16 + + + 4 + 17 + false + 17 + + + 4 + 18 + false + 18 + + + 4 + 21 + false + 21 + + + 4 + 22 + false + 22 + + + 4 + 23 + false + 23 + + + 4 + 23 + false + 23 + + + 4 + 23 + false + 23 + + + 4 + 1 + true + 23 + + + 4 + 24 + false + 24 + + + 4 + 25 + false + 25 + + + 4 + 26 + false + 26 + + + 4 + 27 + false + 27 + + + 4 + 28 + false + 28 + + + 4 + 23 + false + 23 + + + 4 + 0 + true + 23 + + + 4 + 29 + false + 29 + + + 4 + 30 + false + 30 + + + 4 + 33 + false + 33 + + + 4 + 34 + false + 34 + + + 4 + 35 + false + 35 + + + 4 + 35 + false + 35 + + + 4 + 35 + false + 35 + + + 4 + 1 + true + 35 + + + 4 + 36 + false + 36 + + + 4 + 37 + false + 37 + + + 4 + 38 + false + 38 + + + 4 + 39 + false + 39 + + + 4 + 40 + false + 40 + + + 4 + 35 + false + 35 + + + 4 + 0 + true + 35 + + + 4 + 41 + false + 41 + + + 4 + 42 + false + 42 + + + 4 + 45 + false + 45 + + + 4 + 46 + false + 46 + + + 4 + 47 + false + 47 + + + 4 + 47 + false + 47 + + + 4 + 47 + false + 47 + + + 4 + 1 + true + 47 + + + 4 + 48 + false + 48 + + + 4 + 49 + false + 49 + + + 4 + 50 + false + 50 + + + 4 + 51 + false + 51 + + + 4 + 52 + false + 52 + + + 4 + 47 + false + 47 + + + 4 + 0 + true + 47 + + + 4 + 53 + false + 53 + + + 4 + 54 + false + 54 + + + 4 + 57 + false + 57 + + + 4 + 58 + false + 58 + + + 4 + 59 + false + 59 + + + 4 + 61 + false + 61 + + + 4 + 62 + false + 62 + + + 4 + 0 + true + 61 + + + 4 + 64 + false + 64 + + + 4 + 1 + true + 61 + + + 4 + 64 + false + 64 + + + 4 + 64 + false + 64 + + + 4 + 3 + true + 64 + + + 4 + 65 + false + 65 + + + 4 + 66 + false + 66 + + + 4 + 67 + false + 67 + + + 4 + 68 + false + 68 + + + 4 + 69 + false + 69 + + + 4 + 70 + false + 70 + + + 4 + 64 + false + 64 + + + 4 + 2 + true + 64 + + + 4 + 71 + false + 71 + + + 4 + 72 + false + 72 + + + 4 + 73 + false + 73 + + + 4 + 76 + false + 76 + + + 4 + 77 + false + 77 + + + 4 + 78 + false + 78 + + + 4 + 79 + false + 79 + + + 4 + 80 + false + 80 + + + 4 + 81 + false + 81 + + + 4 + 84 + false + 84 + + + 4 + 86 + false + 86 + + + 4 + 87 + false + 87 + + + 4 + 0 + true + 86 + + + 4 + 88 + false + 88 + + + 4 + 91 + false + 91 + + + 4 + 1 + true + 86 + + + 4 + 92 + false + 92 + + + 4 + 92 + false + 92 + + + 4 + 92 + false + 92 + + + 4 + 5 + true + 92 + + + 4 + 93 + false + 93 + + + 4 + 94 + false + 94 + + + 4 + 95 + false + 95 + + + 4 + 2 + true + 94 + + + 4 + 96 + false + 96 + + + 4 + 97 + false + 97 + + + 4 + 98 + false + 98 + + + 4 + 3 + true + 94 + + + 4 + 99 + false + 99 + + + 4 + 92 + false + 92 + + + 4 + 4 + true + 92 + + + 4 + 101 + false + 101 + + + 4 + 102 + false + 102 + + + 4 + 102 + false + 102 + + + 4 + 102 + false + 102 + + + 4 + 7 + true + 102 + + + 4 + 103 + false + 103 + + + 4 + 105 + false + 105 + + + 4 + 106 + false + 106 + + + 4 + 107 + false + 107 + + + 4 + 108 + false + 108 + + + 4 + 109 + false + 109 + + + 4 + 110 + false + 110 + + + 4 + 111 + false + 111 + + + 4 + 113 + false + 113 + + + 4 + 102 + false + 102 + + + 4 + 6 + true + 102 + + + 4 + 114 + false + 114 + + + 4 + 115 + false + 115 + + + 4 + 118 + false + 118 + + + 4 + 119 + false + 119 + + + 4 + 120 + false + 120 + + + 4 + 123 + false + 123 + + + 4 + 124 + false + 124 + + + 4 + 125 + false + 125 + + + 4 + 128 + false + 128 + + + 4 + 129 + false + 129 + + + 4 + 130 + false + 130 + + + 4 + 133 + false + 133 + + + 4 + 134 + false + 134 + + + 4 + 135 + false + 135 + + + 4 + 138 + false + 138 + + + 4 + 139 + false + 139 + + + 4 + 140 + false + 140 + + + 4 + 143 + false + 143 + + + 4 + 144 + false + 144 + + + 4 + 145 + false + 145 + + + 4 + 148 + false + 148 + + + 4 + 149 + false + 149 + + + 4 + 150 + false + 150 + + + 4 + 153 + false + 153 + + + 4 + 154 + false + 154 + + + 4 + 155 + false + 155 + + + 4 + 158 + false + 158 + + + 4 + 159 + false + 159 + + + 4 + 160 + false + 160 + + + 4 + 160 + false + 160 + + + 4 + 160 + false + 160 + + + 4 + 1 + true + 160 + + + 4 + 161 + false + 161 + + + 4 + 162 + false + 162 + + + 4 + 163 + false + 163 + + + 4 + 164 + false + 164 + + + 4 + 165 + false + 165 + + + 4 + 160 + false + 160 + + + 4 + 0 + true + 160 + + + 4 + 166 + false + 166 + + + 4 + 167 + false + 167 + + + 4 + 170 + false + 170 + + + 4 + 171 + false + 171 + + + 4 + 172 + false + 172 + + + 4 + 172 + false + 172 + + + 4 + 172 + false + 172 + + + 4 + 1 + true + 172 + + + 4 + 173 + false + 173 + + + 4 + 174 + false + 174 + + + 4 + 175 + false + 175 + + + 4 + 176 + false + 176 + + + 4 + 177 + false + 177 + + + 4 + 172 + false + 172 + + + 4 + 0 + true + 172 + + + 4 + 178 + false + 178 + + + 4 + 179 + false + 179 + + + 4 + 182 + false + 182 + + + 4 + 183 + false + 183 + + + 4 + 184 + false + 184 + + + 4 + 184 + false + 184 + + + 4 + 184 + false + 184 + + + 4 + 1 + true + 184 + + + 4 + 185 + false + 185 + + + 4 + 186 + false + 186 + + + 4 + 187 + false + 187 + + + 4 + 188 + false + 188 + + + 4 + 189 + false + 189 + + + 4 + 184 + false + 184 + + + 4 + 0 + true + 184 + + + 4 + 190 + false + 190 + + + 4 + 191 + false + 191 + + + 4 + 194 + false + 194 + + + 4 + 195 + false + 195 + + + 4 + 196 + false + 196 + + + 4 + 198 + false + 198 + + + 4 + 199 + false + 199 + + + 4 + 0 + true + 198 + + + 4 + 201 + false + 201 + + + 4 + 1 + true + 198 + + + 4 + 201 + false + 201 + + + 4 + 201 + false + 201 + + + 4 + 3 + true + 201 + + + 4 + 202 + false + 202 + + + 4 + 203 + false + 203 + + + 4 + 204 + false + 204 + + + 4 + 205 + false + 205 + + + 4 + 206 + false + 206 + + + 4 + 207 + false + 207 + + + 4 + 201 + false + 201 + + + 4 + 2 + true + 201 + + + 4 + 208 + false + 208 + + + 4 + 4 + true + 208 + + + 4 + 5 + true + 208 + + + 4 + 209 + false + 209 + + + 4 + 210 + false + 210 + + + 4 + 213 + false + 213 + + + 4 + 214 + false + 214 + + + 4 + 215 + false + 215 + + + 4 + 0 + true + 215 + + + 4 + 1 + true + 215 + + + 4 + 216 + false + 216 + + + 4 + 217 + false + 217 + + + 4 + 218 + false + 218 + + + 4 + 221 + false + 221 + + + 4 + 222 + false + 222 + + + 4 + 223 + false + 223 + + + 4 + 224 + false + 224 + + + 4 + 224 + false + 224 + + + 4 + 224 + false + 224 + + + 4 + 1 + true + 224 + + + 4 + 225 + false + 225 + + + 4 + 226 + false + 226 + + + 4 + 227 + false + 227 + + + 4 + 228 + false + 228 + + + 4 + 224 + false + 224 + + + 4 + 0 + true + 224 + + + 4 + 229 + false + 229 + + + 4 + 230 + false + 230 + + + 4 + 231 + false + 231 + + + 4 + 234 + false + 234 + + + 4 + 235 + false + 235 + + + 4 + 236 + false + 236 + + + 4 + 236 + false + 236 + + + 4 + 236 + false + 236 + + + 4 + 1 + true + 236 + + + 4 + 237 + false + 237 + + + 4 + 238 + false + 238 + + + 4 + 239 + false + 239 + + + 4 + 240 + false + 240 + + + 4 + 241 + false + 241 + + + 4 + 236 + false + 236 + + + 4 + 0 + true + 236 + + + 4 + 242 + false + 242 + + + 4 + 243 + false + 243 + + + 4 + 246 + false + 246 + + + 4 + 247 + false + 247 + + + 4 + 248 + false + 248 + + + 4 + 248 + false + 248 + + + 4 + 248 + false + 248 + + + 4 + 1 + true + 248 + + + 4 + 249 + false + 249 + + + 4 + 250 + false + 250 + + + 4 + 251 + false + 251 + + + 4 + 252 + false + 252 + + + 4 + 253 + false + 253 + + + 4 + 248 + false + 248 + + + 4 + 0 + true + 248 + + + 4 + 254 + false + 254 + + + 4 + 255 + false + 255 + + + 4 + 258 + false + 258 + + + 4 + 259 + false + 259 + + + 4 + 260 + false + 260 + + + 4 + 262 + false + 262 + + + 4 + 263 + false + 263 + + + 4 + 0 + true + 262 + + + 4 + 265 + false + 265 + + + 4 + 1 + true + 262 + + + 4 + 265 + false + 265 + + + 4 + 265 + false + 265 + + + 4 + 3 + true + 265 + + + 4 + 266 + false + 266 + + + 4 + 267 + false + 267 + + + 4 + 268 + false + 268 + + + 4 + 269 + false + 269 + + + 4 + 270 + false + 270 + + + 4 + 271 + false + 271 + + + 4 + 265 + false + 265 + + + 4 + 2 + true + 265 + + + 4 + 272 + false + 272 + + + 4 + 4 + true + 272 + + + 4 + 5 + true + 272 + + + 4 + 273 + false + 273 + + + 4 + 274 + false + 274 + + + 4 + 124 + false + 124 + + + 4 + 129 + false + 129 + + + 4 + 134 + false + 134 + + + 4 + 154 + false + 154 + + + 4 + 15 + false + 15 + + + 4 + 78 + false + 78 + + + 4 + 215 + false + 215 + + + 4 + 223 + false + 223 + + + 5 + 18 + false + 18 + + + 5 + 18 + false + 18 + + + 5 + 23 + false + 23 + + + 5 + 23 + false + 23 + + + 5 + 28 + false + 28 + + + 5 + 28 + false + 28 + + + 5 + 33 + false + 33 + + + 5 + 33 + false + 33 + + + 5 + 38 + false + 38 + + + 5 + 38 + false + 38 + + + 5 + 44 + false + 44 + + + 5 + 44 + false + 44 + + + 5 + 49 + false + 49 + + + 5 + 49 + false + 49 + + + 6 + 29 + false + 29 + + + 6 + 30 + false + 30 + + + 6 + 32 + false + 32 + + + 6 + 3 + true + 31 + + + 6 + 33 + false + 33 + + + 6 + 34 + false + 34 + + + 6 + 0 + true + 33 + + + 6 + 35 + false + 35 + + + 6 + 37 + false + 37 + + + 6 + 1 + true + 33 + + + 6 + 38 + false + 38 + + + 6 + 31 + false + 31 + + + 6 + 40 + false + 40 + + + 6 + 2 + true + 31 + + + 6 + 41 + false + 41 + + + 6 + 44 + false + 44 + + + 6 + 45 + false + 45 + + + 6 + 46 + false + 46 + + + 6 + 49 + false + 49 + + + 6 + 50 + false + 50 + + + 6 + 0 + true + 50 + + + 6 + 1 + true + 50 + + + 6 + 51 + false + 51 + + + 6 + 2 + true + 50 + + + 6 + 52 + false + 52 + + + 6 + 52 + false + 52 + + + 6 + 52 + false + 52 + + + 6 + 7 + true + 52 + + + 6 + 53 + false + 53 + + + 6 + 54 + false + 54 + + + 6 + 55 + false + 55 + + + 6 + 4 + true + 54 + + + 6 + 56 + false + 56 + + + 6 + 58 + false + 58 + + + 6 + 5 + true + 54 + + + 6 + 52 + false + 52 + + + 6 + 6 + true + 52 + + + 6 + 59 + false + 59 + + + 6 + 61 + false + 61 + + + 6 + 3 + true + 50 + + + 6 + 62 + false + 62 + + + 6 + 65 + false + 65 + + + 6 + 66 + false + 66 + + + 6 + 0 + true + 66 + + + 6 + 1 + true + 66 + + + 6 + 67 + false + 67 + + + 6 + 2 + true + 66 + + + 6 + 68 + false + 68 + + + 6 + 68 + false + 68 + + + 6 + 68 + false + 68 + + + 6 + 7 + true + 68 + + + 6 + 69 + false + 69 + + + 6 + 70 + false + 70 + + + 6 + 71 + false + 71 + + + 6 + 4 + true + 70 + + + 6 + 72 + false + 72 + + + 6 + 74 + false + 74 + + + 6 + 5 + true + 70 + + + 6 + 68 + false + 68 + + + 6 + 6 + true + 68 + + + 6 + 75 + false + 75 + + + 6 + 77 + false + 77 + + + 6 + 3 + true + 66 + + + 6 + 78 + false + 78 + + + 6 + 81 + false + 81 + + + 6 + 82 + false + 82 + + + 6 + 83 + false + 83 + + + 6 + 0 + true + 82 + + + 6 + 84 + false + 84 + + + 6 + 87 + false + 87 + + + 6 + 1 + true + 82 + + + 6 + 88 + false + 88 + + + 6 + 2 + true + 87 + + + 6 + 89 + false + 89 + + + 6 + 89 + false + 89 + + + 6 + 89 + false + 89 + + + 6 + 7 + true + 89 + + + 6 + 90 + false + 90 + + + 6 + 91 + false + 91 + + + 6 + 92 + false + 92 + + + 6 + 4 + true + 91 + + + 6 + 93 + false + 93 + + + 6 + 95 + false + 95 + + + 6 + 5 + true + 91 + + + 6 + 89 + false + 89 + + + 6 + 6 + true + 89 + + + 6 + 96 + false + 96 + + + 6 + 98 + false + 98 + + + 6 + 3 + true + 87 + + + 6 + 99 + false + 99 + + + 6 + 102 + false + 102 + + + 6 + 119 + false + 110 + + + 6 + 0 + true + 110 + + + 6 + 1 + true + 110 + + + 6 + 2 + true + 110 + + + 6 + 4 + true + 110 + + + 6 + 6 + true + 110 + + + 6 + 7 + true + 110 + + + 6 + 8 + true + 110 + + + 6 + 10 + true + 110 + + + 6 + 9 + true + 110 + + + 6 + 12 + true + 110 + + + 6 + 14 + true + 110 + + + 6 + 16 + true + 110 + + + 6 + 3 + true + 110 + + + 6 + 5 + true + 110 + + + 6 + 11 + true + 110 + + + 6 + 13 + true + 110 + + + 6 + 15 + true + 110 + + + 6 + 17 + true + 110 + + + 6 + 18 + true + 110 + + + 6 + 19 + true + 110 + + + 6 + 120 + false + 120 + + + 6 + 123 + false + 123 + + + 6 + 171 + false + 171 + + + 6 + 172 + false + 172 + + + 6 + 173 + false + 173 + + + 6 + 11 + true + 172 + + + 6 + 177 + false + 174 + + + 6 + 0 + true + 174 + + + 6 + 2 + true + 174 + + + 6 + 1 + true + 174 + + + 6 + 3 + true + 174 + + + 6 + 4 + true + 174 + + + 6 + 5 + true + 174 + + + 6 + 178 + false + 178 + + + 6 + 6 + true + 174 + + + 6 + 179 + false + 179 + + + 6 + 181 + false + 181 + + + 6 + 7 + true + 174 + + + 6 + 172 + false + 172 + + + 6 + 172 + false + 172 + + + 6 + 172 + false + 172 + + + 6 + 8 + true + 172 + + + 6 + 9 + true + 172 + + + 6 + 182 + false + 182 + + + 6 + 10 + true + 172 + + + 6 + 183 + false + 183 + + + 6 + 186 + false + 186 + + + 6 + 205 + false + 188 + + + 6 + 0 + true + 188 + + + 6 + 2 + true + 188 + + + 6 + 4 + true + 188 + + + 6 + 6 + true + 188 + + + 6 + 8 + true + 188 + + + 6 + 5 + true + 188 + + + 6 + 7 + true + 188 + + + 6 + 9 + true + 188 + + + 6 + 10 + true + 188 + + + 6 + 12 + true + 188 + + + 6 + 14 + true + 188 + + + 6 + 16 + true + 188 + + + 6 + 18 + true + 188 + + + 6 + 13 + true + 188 + + + 6 + 15 + true + 188 + + + 6 + 17 + true + 188 + + + 6 + 19 + true + 188 + + + 6 + 1 + true + 188 + + + 6 + 3 + true + 188 + + + 6 + 11 + true + 188 + + + 6 + 206 + false + 206 + + + 6 + 20 + true + 188 + + + 6 + 207 + false + 207 + + + 6 + 209 + false + 209 + + + 6 + 21 + true + 188 + + + 6 + 210 + false + 210 + + + 6 + 213 + false + 213 + + + 6 + 239 + false + 239 + + + 6 + 240 + false + 240 + + + 6 + 241 + false + 241 + + + 6 + 11 + true + 240 + + + 6 + 246 + false + 242 + + + 6 + 0 + true + 242 + + + 6 + 2 + true + 242 + + + 6 + 4 + true + 242 + + + 6 + 1 + true + 242 + + + 6 + 3 + true + 242 + + + 6 + 5 + true + 242 + + + 6 + 247 + false + 247 + + + 6 + 6 + true + 242 + + + 6 + 248 + false + 248 + + + 6 + 250 + false + 250 + + + 6 + 7 + true + 242 + + + 6 + 240 + false + 240 + + + 6 + 240 + false + 240 + + + 6 + 240 + false + 240 + + + 6 + 8 + true + 240 + + + 6 + 9 + true + 240 + + + 6 + 251 + false + 251 + + + 6 + 10 + true + 240 + + + 6 + 252 + false + 252 + + + 6 + 255 + false + 255 + + + 6 + 275 + false + 275 + + + 6 + 286 + false + 277 + + + 6 + 0 + true + 277 + + + 6 + 2 + true + 277 + + + 6 + 4 + true + 277 + + + 6 + 6 + true + 277 + + + 6 + 1 + true + 277 + + + 6 + 3 + true + 277 + + + 6 + 5 + true + 277 + + + 6 + 7 + true + 277 + + + 6 + 287 + false + 287 + + + 6 + 290 + false + 290 + + + 6 + 402 + false + 402 + + + 6 + 403 + false + 403 + + + 6 + 0 + true + 402 + + + 6 + 404 + false + 404 + + + 6 + 405 + false + 405 + + + 6 + 407 + false + 407 + + + 6 + 408 + false + 408 + + + 6 + 408 + false + 408 + + + 6 + 15 + true + 408 + + + 6 + 408 + false + 408 + + + 6 + 409 + false + 409 + + + 6 + 410 + false + 410 + + + 6 + 411 + false + 411 + + + 6 + 2 + true + 410 + + + 6 + 413 + false + 413 + + + 6 + 414 + false + 414 + + + 6 + 417 + false + 417 + + + 6 + 3 + true + 410 + + + 6 + 419 + false + 419 + + + 6 + 420 + false + 420 + + + 6 + 13 + true + 419 + + + 6 + 425 + false + 422 + + + 6 + 4 + true + 422 + + + 6 + 5 + true + 422 + + + 6 + 429 + false + 427 + + + 6 + 6 + true + 427 + + + 6 + 8 + true + 427 + + + 6 + 7 + true + 427 + + + 6 + 9 + true + 427 + + + 6 + 430 + false + 430 + + + 6 + 10 + true + 427 + + + 6 + 431 + false + 431 + + + 6 + 432 + false + 432 + + + 6 + 434 + false + 434 + + + 6 + 11 + true + 427 + + + 6 + 435 + false + 435 + + + 6 + 419 + false + 419 + + + 6 + 419 + false + 419 + + + 6 + 436 + false + 436 + + + 6 + 12 + true + 419 + + + 6 + 408 + false + 408 + + + 6 + 14 + true + 408 + + + 6 + 438 + false + 438 + + + 6 + 439 + false + 439 + + + 6 + 441 + false + 441 + + + 6 + 1 + true + 402 + + + 6 + 442 + false + 442 + + + 6 + 445 + false + 445 + + + 6 + 464 + false + 464 + + + 6 + 468 + false + 466 + + + 6 + 0 + true + 466 + + + 6 + 2 + true + 466 + + + 6 + 1 + true + 466 + + + 6 + 3 + true + 466 + + + 6 + 614 + false + 614 + + + 6 + 617 + false + 617 + + + 6 + 618 + false + 618 + + + 6 + 621 + false + 620 + + + 6 + 0 + true + 620 + + + 6 + 1 + true + 620 + + + 6 + 796 + false + 796 + + + 6 + 800 + false + 800 + + + 6 + 811 + false + 811 + + + 6 + 814 + false + 813 + + + 6 + 0 + true + 813 + + + 6 + 1 + true + 813 + + + 6 + 893 + false + 893 + + + 6 + 896 + false + 896 + + + 6 + 908 + false + 908 + + + 6 + 911 + false + 910 + + + 6 + 0 + true + 910 + + + 6 + 1 + true + 910 + + + 6 + 912 + false + 912 + + + 6 + 2 + true + 910 + + + 6 + 913 + false + 913 + + + 6 + 922 + false + 916 + + + 6 + 3 + true + 910 + + + 6 + 4 + true + 916 + + + 6 + 6 + true + 916 + + + 6 + 8 + true + 916 + + + 6 + 10 + true + 916 + + + 6 + 12 + true + 916 + + + 6 + 14 + true + 916 + + + 6 + 15 + true + 916 + + + 6 + 5 + true + 916 + + + 6 + 7 + true + 916 + + + 6 + 9 + true + 916 + + + 6 + 11 + true + 916 + + + 6 + 13 + true + 916 + + + 6 + 923 + false + 923 + + + 6 + 16 + true + 916 + + + 6 + 924 + false + 924 + + + 6 + 926 + false + 926 + + + 6 + 17 + true + 916 + + + 6 + 927 + false + 927 + + + 6 + 933 + false + 930 + + + 6 + 0 + true + 930 + + + 6 + 2 + true + 930 + + + 6 + 4 + true + 930 + + + 6 + 6 + true + 930 + + + 6 + 8 + true + 930 + + + 6 + 10 + true + 930 + + + 6 + 12 + true + 930 + + + 6 + 13 + true + 930 + + + 6 + 1 + true + 930 + + + 6 + 3 + true + 930 + + + 6 + 5 + true + 930 + + + 6 + 7 + true + 930 + + + 6 + 9 + true + 930 + + + 6 + 11 + true + 930 + + + 6 + 936 + false + 936 + + + 6 + 937 + false + 937 + + + 6 + 938 + false + 938 + + + 6 + 939 + false + 939 + + + 6 + 0 + true + 938 + + + 6 + 940 + false + 940 + + + 6 + 943 + false + 943 + + + 6 + 1 + true + 938 + + + 6 + 944 + false + 944 + + + 6 + 946 + false + 946 + + + 6 + 947 + false + 947 + + + 6 + 2 + true + 947 + + + 6 + 3 + true + 947 + + + 6 + 948 + false + 948 + + + 6 + 4 + true + 948 + + + 6 + 5 + true + 948 + + + 6 + 954 + false + 954 + + + 6 + 955 + false + 955 + + + 6 + 957 + false + 957 + + + 6 + 957 + false + 957 + + + 6 + 957 + false + 957 + + + 6 + 47 + true + 957 + + + 6 + 958 + false + 958 + + + 6 + 960 + false + 960 + + + 6 + 961 + false + 961 + + + 6 + 962 + false + 962 + + + 6 + 6 + true + 961 + + + 6 + 963 + false + 963 + + + 6 + 964 + false + 964 + + + 6 + 965 + false + 965 + + + 6 + 968 + false + 968 + + + 6 + 7 + true + 961 + + + 6 + 969 + false + 969 + + + 6 + 8 + true + 968 + + + 6 + 970 + false + 970 + + + 6 + 971 + false + 971 + + + 6 + 974 + false + 974 + + + 6 + 9 + true + 968 + + + 6 + 975 + false + 975 + + + 6 + 10 + true + 974 + + + 6 + 976 + false + 976 + + + 6 + 12 + true + 976 + + + 6 + 13 + true + 976 + + + 6 + 977 + false + 977 + + + 6 + 14 + true + 976 + + + 6 + 978 + false + 978 + + + 6 + 980 + false + 980 + + + 6 + 15 + true + 976 + + + 6 + 982 + false + 982 + + + 6 + 11 + true + 974 + + + 6 + 983 + false + 983 + + + 6 + 16 + true + 982 + + + 6 + 984 + false + 984 + + + 6 + 987 + false + 987 + + + 6 + 17 + true + 982 + + + 6 + 988 + false + 988 + + + 6 + 18 + true + 987 + + + 6 + 989 + false + 989 + + + 6 + 992 + false + 992 + + + 6 + 19 + true + 987 + + + 6 + 993 + false + 993 + + + 6 + 20 + true + 992 + + + 6 + 997 + false + 994 + + + 6 + 22 + true + 994 + + + 6 + 24 + true + 994 + + + 6 + 26 + true + 994 + + + 6 + 23 + true + 994 + + + 6 + 25 + true + 994 + + + 6 + 27 + true + 994 + + + 6 + 998 + false + 998 + + + 6 + 28 + true + 994 + + + 6 + 999 + false + 999 + + + 6 + 1001 + false + 1001 + + + 6 + 29 + true + 994 + + + 6 + 1003 + false + 1003 + + + 6 + 21 + true + 992 + + + 6 + 1004 + false + 1004 + + + 6 + 30 + true + 1003 + + + 6 + 1005 + false + 1005 + + + 6 + 1006 + false + 1006 + + + 6 + 32 + true + 1005 + + + 6 + 1007 + false + 1007 + + + 6 + 1009 + false + 1009 + + + 6 + 33 + true + 1005 + + + 6 + 1011 + false + 1011 + + + 6 + 31 + true + 1003 + + + 6 + 1012 + false + 1012 + + + 6 + 34 + true + 1011 + + + 6 + 1013 + false + 1013 + + + 6 + 1016 + false + 1016 + + + 6 + 35 + true + 1011 + + + 6 + 1017 + false + 1017 + + + 6 + 36 + true + 1016 + + + 6 + 1018 + false + 1018 + + + 6 + 1021 + false + 1021 + + + 6 + 37 + true + 1016 + + + 6 + 1022 + false + 1022 + + + 6 + 38 + true + 1021 + + + 6 + 1023 + false + 1023 + + + 6 + 1026 + false + 1026 + + + 6 + 39 + true + 1021 + + + 6 + 1029 + false + 1029 + + + 6 + 1030 + false + 1030 + + + 6 + 40 + true + 1030 + + + 6 + 41 + true + 1030 + + + 6 + 1031 + false + 1031 + + + 6 + 1032 + false + 1032 + + + 6 + 1034 + false + 1034 + + + 6 + 1035 + false + 1035 + + + 6 + 42 + true + 1034 + + + 6 + 1036 + false + 1036 + + + 6 + 1039 + false + 1039 + + + 6 + 43 + true + 1034 + + + 6 + 1040 + false + 1040 + + + 6 + 44 + true + 1039 + + + 6 + 1041 + false + 1041 + + + 6 + 1043 + false + 1043 + + + 6 + 45 + true + 1039 + + + 6 + 1044 + false + 1044 + + + 6 + 1045 + false + 1045 + + + 6 + 1046 + false + 1046 + + + 6 + 1048 + false + 1048 + + + 6 + 957 + false + 957 + + + 6 + 46 + true + 957 + + + 6 + 1049 + false + 1049 + + + 6 + 1050 + false + 1050 + + + 6 + 1055 + false + 1055 + + + 6 + 1059 + false + 1059 + + + 6 + 1061 + false + 1061 + + + 6 + 1076 + false + 1064 + + + 6 + 0 + true + 1064 + + + 6 + 1 + true + 1064 + + + 6 + 1079 + false + 1079 + + + 6 + 1080 + false + 1080 + + + 6 + 2 + true + 1079 + + + 6 + 1082 + false + 1082 + + + 6 + 1083 + false + 1083 + + + 6 + 4 + true + 1082 + + + 6 + 1086 + false + 1085 + + + 6 + 5 + true + 1082 + + + 6 + 1087 + false + 1087 + + + 6 + 1089 + false + 1089 + + + 6 + 3 + true + 1079 + + + 6 + 1090 + false + 1090 + + + 6 + 6 + true + 1090 + + + 6 + 7 + true + 1090 + + + 6 + 1091 + false + 1091 + + + 6 + 8 + true + 1090 + + + 6 + 1094 + false + 1093 + + + 6 + 9 + true + 1090 + + + 6 + 1095 + false + 1095 + + + 6 + 1096 + false + 1096 + + + 6 + 1097 + false + 1097 + + + 6 + 1101 + false + 1101 + + + 6 + 1102 + false + 1102 + + + 6 + 1117 + false + 1105 + + + 6 + 0 + true + 1105 + + + 6 + 1 + true + 1105 + + + 6 + 1128 + false + 1122 + + + 6 + 1134 + false + 1130 + + + 6 + 1136 + false + 1136 + + + 6 + 1137 + false + 1137 + + + 6 + 1139 + false + 1139 + + + 6 + 1143 + false + 1141 + + + 6 + 1146 + false + 1145 + + + 6 + 1148 + false + 1148 + + + 6 + 2 + true + 1148 + + + 6 + 3 + true + 1148 + + + 6 + 1149 + false + 1149 + + + 6 + 4 + true + 1148 + + + 6 + 1150 + false + 1150 + + + 6 + 1151 + false + 1151 + + + 6 + 1152 + false + 1152 + + + 6 + 1153 + false + 1153 + + + 6 + 5 + true + 1148 + + + 6 + 1154 + false + 1154 + + + 6 + 1158 + false + 1158 + + + 6 + 1159 + false + 1159 + + + 6 + 1160 + false + 1160 + + + 6 + 1175 + false + 1162 + + + 6 + 0 + true + 1162 + + + 6 + 1 + true + 1162 + + + 6 + 1176 + false + 1176 + + + 6 + 1177 + false + 1177 + + + 6 + 1178 + false + 1178 + + + 6 + 1182 + false + 1181 + + + 6 + 0 + true + 1181 + + + 6 + 1 + true + 1181 + + + 6 + 1225 + false + 1225 + + + 6 + 1226 + false + 1226 + + + 6 + 1227 + false + 1227 + + + 6 + 0 + true + 1226 + + + 6 + 1228 + false + 1228 + + + 6 + 1231 + false + 1231 + + + 6 + 1 + true + 1226 + + + 6 + 1232 + false + 1232 + + + 6 + 2 + true + 1231 + + + 6 + 1233 + false + 1233 + + + 6 + 1237 + false + 1237 + + + 6 + 3 + true + 1231 + + + 6 + 1240 + false + 1238 + + + 6 + 4 + true + 1238 + + + 6 + 6 + true + 1238 + + + 6 + 8 + true + 1238 + + + 6 + 5 + true + 1238 + + + 6 + 7 + true + 1238 + + + 6 + 9 + true + 1238 + + + 6 + 1241 + false + 1241 + + + 6 + 10 + true + 1238 + + + 6 + 1242 + false + 1242 + + + 6 + 1246 + false + 1246 + + + 6 + 11 + true + 1238 + + + 6 + 1248 + false + 1248 + + + 6 + 19 + true + 1247 + + + 6 + 1249 + false + 1249 + + + 6 + 12 + true + 1249 + + + 6 + 14 + true + 1249 + + + 6 + 15 + true + 1249 + + + 6 + 13 + true + 1249 + + + 6 + 1250 + false + 1250 + + + 6 + 16 + true + 1249 + + + 6 + 1251 + false + 1251 + + + 6 + 1252 + false + 1252 + + + 6 + 1254 + false + 1254 + + + 6 + 17 + true + 1249 + + + 6 + 1255 + false + 1255 + + + 6 + 1247 + false + 1247 + + + 6 + 1259 + false + 1257 + + + 6 + 18 + true + 1247 + + + 6 + 20 + true + 1257 + + + 6 + 22 + true + 1257 + + + 6 + 24 + true + 1257 + + + 6 + 21 + true + 1257 + + + 6 + 23 + true + 1257 + + + 6 + 25 + true + 1257 + + + 6 + 1276 + false + 1276 + + + 6 + 1279 + false + 1279 + + + 6 + 1280 + false + 1280 + + + 6 + 0 + true + 1280 + + + 6 + 2 + true + 1280 + + + 6 + 1 + true + 1280 + + + 6 + 3 + true + 1280 + + + 6 + 1281 + false + 1281 + + + 6 + 4 + true + 1280 + + + 6 + 1282 + false + 1282 + + + 6 + 1302 + false + 1296 + + + 6 + 5 + true + 1280 + + + 6 + 6 + true + 1296 + + + 6 + 8 + true + 1296 + + + 6 + 10 + true + 1296 + + + 6 + 12 + true + 1296 + + + 6 + 13 + true + 1296 + + + 6 + 14 + true + 1296 + + + 6 + 15 + true + 1296 + + + 6 + 16 + true + 1296 + + + 6 + 17 + true + 1296 + + + 6 + 18 + true + 1296 + + + 6 + 20 + true + 1296 + + + 6 + 21 + true + 1296 + + + 6 + 22 + true + 1296 + + + 6 + 23 + true + 1296 + + + 6 + 24 + true + 1296 + + + 6 + 25 + true + 1296 + + + 6 + 26 + true + 1296 + + + 6 + 27 + true + 1296 + + + 6 + 28 + true + 1296 + + + 6 + 30 + true + 1296 + + + 6 + 31 + true + 1296 + + + 6 + 32 + true + 1296 + + + 6 + 33 + true + 1296 + + + 6 + 34 + true + 1296 + + + 6 + 35 + true + 1296 + + + 6 + 36 + true + 1296 + + + 6 + 38 + true + 1296 + + + 6 + 39 + true + 1296 + + + 6 + 7 + true + 1296 + + + 6 + 9 + true + 1296 + + + 6 + 11 + true + 1296 + + + 6 + 19 + true + 1296 + + + 6 + 29 + true + 1296 + + + 6 + 37 + true + 1296 + + + 6 + 1303 + false + 1303 + + + 6 + 40 + true + 1296 + + + 6 + 1304 + false + 1304 + + + 6 + 1305 + false + 1305 + + + 6 + 42 + true + 1304 + + + 6 + 1306 + false + 1306 + + + 6 + 1307 + false + 1307 + + + 6 + 1308 + false + 1308 + + + 6 + 43 + true + 1304 + + + 6 + 1309 + false + 1309 + + + 6 + 1310 + false + 1310 + + + 6 + 1311 + false + 1311 + + + 6 + 1313 + false + 1313 + + + 6 + 41 + true + 1296 + + + 6 + 1314 + false + 1314 + + + 6 + 1317 + false + 1317 + + + 6 + 1318 + false + 1318 + + + 6 + 0 + true + 1318 + + + 6 + 1 + true + 1318 + + + 6 + 1318 + false + 1318 + + + 6 + 2 + true + 1318 + + + 6 + 1321 + false + 1320 + + + 6 + 3 + true + 1318 + + + 6 + 4 + true + 1320 + + + 6 + 5 + true + 1320 + + + 6 + 1322 + false + 1322 + + + 6 + 1325 + false + 1325 + + + 6 + 1347 + false + 1345 + + + 6 + 1352 + false + 1349 + + + 6 + 0 + true + 1349 + + + 6 + 2 + true + 1349 + + + 6 + 3 + true + 1349 + + + 6 + 4 + true + 1349 + + + 6 + 5 + true + 1349 + + + 6 + 6 + true + 1349 + + + 6 + 7 + true + 1349 + + + 6 + 8 + true + 1349 + + + 6 + 9 + true + 1349 + + + 6 + 10 + true + 1349 + + + 6 + 12 + true + 1349 + + + 6 + 13 + true + 1349 + + + 6 + 14 + true + 1349 + + + 6 + 15 + true + 1349 + + + 6 + 16 + true + 1349 + + + 6 + 1 + true + 1349 + + + 6 + 11 + true + 1349 + + + 6 + 17 + true + 1349 + + + 6 + 1353 + false + 1353 + + + 6 + 1356 + false + 1356 + + + 6 + 1368 + false + 1366 + + + 6 + 0 + true + 1366 + + + 6 + 2 + true + 1366 + + + 6 + 3 + true + 1366 + + + 6 + 4 + true + 1366 + + + 6 + 5 + true + 1366 + + + 6 + 6 + true + 1366 + + + 6 + 7 + true + 1366 + + + 6 + 8 + true + 1366 + + + 6 + 10 + true + 1366 + + + 6 + 11 + true + 1366 + + + 6 + 12 + true + 1366 + + + 6 + 1 + true + 1366 + + + 6 + 9 + true + 1366 + + + 6 + 13 + true + 1366 + + + 6 + 1369 + false + 1369 + + + 6 + 1372 + false + 1372 + + + 6 + 1373 + false + 1373 + + + 6 + 1374 + false + 1374 + + + 6 + 0 + true + 1373 + + + 6 + 1379 + false + 1377 + + + 6 + 1 + true + 1373 + + + 6 + 1381 + false + 1381 + + + 6 + 1381 + false + 1381 + + + 6 + 1381 + false + 1381 + + + 6 + 11 + true + 1381 + + + 6 + 1382 + false + 1382 + + + 6 + 1383 + false + 1383 + + + 6 + 1384 + false + 1384 + + + 6 + 1387 + false + 1387 + + + 6 + 5 + true + 1386 + + + 6 + 1388 + false + 1388 + + + 6 + 1389 + false + 1389 + + + 6 + 1386 + false + 1386 + + + 6 + 2 + true + 1386 + + + 6 + 3 + true + 1386 + + + 6 + 1391 + false + 1391 + + + 6 + 4 + true + 1386 + + + 6 + 6 + true + 1391 + + + 6 + 7 + true + 1391 + + + 6 + 1392 + false + 1392 + + + 6 + 8 + true + 1391 + + + 6 + 1393 + false + 1393 + + + 6 + 1395 + false + 1395 + + + 6 + 9 + true + 1391 + + + 6 + 1381 + false + 1381 + + + 6 + 10 + true + 1381 + + + 6 + 1397 + false + 1397 + + + 6 + 1398 + false + 1398 + + + 6 + 1401 + false + 1401 + + + 6 + 1402 + false + 1402 + + + 6 + 1403 + false + 1403 + + + 6 + 0 + true + 1402 + + + 6 + 1408 + false + 1406 + + + 6 + 1 + true + 1402 + + + 6 + 1416 + false + 1410 + + + 6 + 1417 + false + 1417 + + + 6 + 1420 + false + 1420 + + + 6 + 1421 + false + 1421 + + + 6 + 1422 + false + 1422 + + + 6 + 1423 + false + 1423 + + + 6 + 1426 + false + 1426 + + + 6 + 1427 + false + 1427 + + + 6 + 1429 + false + 1429 + + + 6 + 1430 + false + 1430 + + + 6 + 0 + true + 1429 + + + 6 + 1431 + false + 1431 + + + 6 + 1432 + false + 1432 + + + 6 + 1434 + false + 1434 + + + 6 + 7 + true + 1433 + + + 6 + 1435 + false + 1435 + + + 6 + 1436 + false + 1436 + + + 6 + 2 + true + 1435 + + + 6 + 1437 + false + 1437 + + + 6 + 1438 + false + 1438 + + + 6 + 1439 + false + 1439 + + + 6 + 1441 + false + 1441 + + + 6 + 3 + true + 1435 + + + 6 + 1442 + false + 1442 + + + 6 + 1444 + false + 1444 + + + 6 + 1433 + false + 1433 + + + 6 + 4 + true + 1433 + + + 6 + 5 + true + 1433 + + + 6 + 1445 + false + 1445 + + + 6 + 6 + true + 1433 + + + 6 + 1447 + false + 1447 + + + 6 + 1 + true + 1429 + + + 6 + 1448 + false + 1448 + + + 6 + 1451 + false + 1451 + + + 6 + 1452 + false + 1452 + + + 6 + 1453 + false + 1453 + + + 6 + 1454 + false + 1454 + + + 6 + 0 + true + 1453 + + + 6 + 1455 + false + 1455 + + + 6 + 1 + true + 1453 + + + 6 + 1457 + false + 1457 + + + 6 + 1458 + false + 1458 + + + 6 + 2 + true + 1457 + + + 6 + 1460 + false + 1460 + + + 6 + 1461 + false + 1461 + + + 6 + 1462 + false + 1462 + + + 6 + 1464 + false + 1464 + + + 6 + 3 + true + 1457 + + + 6 + 1466 + false + 1466 + + + 6 + 1467 + false + 1467 + + + 6 + 1469 + false + 1469 + + + 6 + 1470 + false + 1470 + + + 6 + 1473 + false + 1473 + + + 6 + 1474 + false + 1474 + + + 6 + 1475 + false + 1475 + + + 6 + 0 + true + 1475 + + + 6 + 1 + true + 1475 + + + 6 + 1476 + false + 1476 + + + 6 + 482 + false + 482 + + + 6 + 491 + false + 490 + + + 6 + 0 + true + 490 + + + 6 + 1 + true + 490 + + + 6 + 492 + false + 492 + + + 6 + 2 + true + 490 + + + 6 + 493 + false + 493 + + + 6 + 504 + false + 496 + + + 6 + 3 + true + 490 + + + 6 + 4 + true + 496 + + + 6 + 6 + true + 496 + + + 6 + 7 + true + 496 + + + 6 + 8 + true + 496 + + + 6 + 10 + true + 496 + + + 6 + 12 + true + 496 + + + 6 + 14 + true + 496 + + + 6 + 13 + true + 496 + + + 6 + 15 + true + 496 + + + 6 + 16 + true + 496 + + + 6 + 18 + true + 496 + + + 6 + 20 + true + 496 + + + 6 + 19 + true + 496 + + + 6 + 21 + true + 496 + + + 6 + 17 + true + 496 + + + 6 + 5 + true + 496 + + + 6 + 9 + true + 496 + + + 6 + 11 + true + 496 + + + 6 + 505 + false + 505 + + + 6 + 22 + true + 496 + + + 6 + 506 + false + 506 + + + 6 + 509 + false + 509 + + + 6 + 23 + true + 496 + + + 6 + 510 + false + 510 + + + 6 + 513 + false + 513 + + + 6 + 533 + false + 532 + + + 6 + 0 + true + 532 + + + 6 + 1 + true + 532 + + + 6 + 534 + false + 534 + + + 6 + 2 + true + 532 + + + 6 + 535 + false + 535 + + + 6 + 540 + false + 540 + + + 6 + 3 + true + 532 + + + 6 + 542 + false + 542 + + + 6 + 543 + false + 543 + + + 6 + 31 + true + 542 + + + 6 + 548 + false + 544 + + + 6 + 4 + true + 544 + + + 6 + 6 + true + 544 + + + 6 + 8 + true + 544 + + + 6 + 7 + true + 544 + + + 6 + 9 + true + 544 + + + 6 + 10 + true + 544 + + + 6 + 12 + true + 544 + + + 6 + 14 + true + 544 + + + 6 + 13 + true + 544 + + + 6 + 15 + true + 544 + + + 6 + 11 + true + 544 + + + 6 + 5 + true + 544 + + + 6 + 549 + false + 549 + + + 6 + 16 + true + 544 + + + 6 + 552 + false + 552 + + + 6 + 554 + false + 554 + + + 6 + 555 + false + 555 + + + 6 + 29 + true + 554 + + + 6 + 560 + false + 556 + + + 6 + 18 + true + 556 + + + 6 + 20 + true + 556 + + + 6 + 22 + true + 556 + + + 6 + 24 + true + 556 + + + 6 + 19 + true + 556 + + + 6 + 21 + true + 556 + + + 6 + 23 + true + 556 + + + 6 + 25 + true + 556 + + + 6 + 561 + false + 561 + + + 6 + 26 + true + 556 + + + 6 + 562 + false + 562 + + + 6 + 564 + false + 564 + + + 6 + 27 + true + 556 + + + 6 + 554 + false + 554 + + + 6 + 554 + false + 554 + + + 6 + 565 + false + 565 + + + 6 + 28 + true + 554 + + + 6 + 566 + false + 566 + + + 6 + 17 + true + 544 + + + 6 + 542 + false + 542 + + + 6 + 542 + false + 542 + + + 6 + 568 + false + 568 + + + 6 + 30 + true + 542 + + + 6 + 569 + false + 569 + + + 6 + 572 + false + 572 + + + 6 + 589 + false + 588 + + + 6 + 0 + true + 588 + + + 6 + 1 + true + 588 + + + 6 + 590 + false + 590 + + + 6 + 2 + true + 588 + + + 6 + 591 + false + 591 + + + 6 + 594 + false + 594 + + + 6 + 3 + true + 588 + + + 6 + 596 + false + 596 + + + 6 + 597 + false + 597 + + + 6 + 23 + true + 596 + + + 6 + 606 + false + 598 + + + 6 + 4 + true + 598 + + + 6 + 6 + true + 598 + + + 6 + 8 + true + 598 + + + 6 + 10 + true + 598 + + + 6 + 12 + true + 598 + + + 6 + 14 + true + 598 + + + 6 + 16 + true + 598 + + + 6 + 18 + true + 598 + + + 6 + 11 + true + 598 + + + 6 + 13 + true + 598 + + + 6 + 15 + true + 598 + + + 6 + 17 + true + 598 + + + 6 + 19 + true + 598 + + + 6 + 5 + true + 598 + + + 6 + 7 + true + 598 + + + 6 + 9 + true + 598 + + + 6 + 607 + false + 607 + + + 6 + 20 + true + 598 + + + 6 + 608 + false + 608 + + + 6 + 610 + false + 610 + + + 6 + 21 + true + 598 + + + 6 + 596 + false + 596 + + + 6 + 596 + false + 596 + + + 6 + 612 + false + 612 + + + 6 + 22 + true + 596 + + + 6 + 613 + false + 613 + + + 6 + 624 + false + 624 + + + 6 + 664 + false + 663 + + + 6 + 0 + true + 663 + + + 6 + 1 + true + 663 + + + 6 + 665 + false + 665 + + + 6 + 2 + true + 663 + + + 6 + 666 + false + 666 + + + 6 + 669 + false + 669 + + + 6 + 3 + true + 663 + + + 6 + 673 + false + 671 + + + 6 + 4 + true + 671 + + + 6 + 6 + true + 671 + + + 6 + 5 + true + 671 + + + 6 + 7 + true + 671 + + + 6 + 674 + false + 674 + + + 6 + 8 + true + 671 + + + 6 + 675 + false + 675 + + + 6 + 677 + false + 677 + + + 6 + 678 + false + 678 + + + 6 + 25 + true + 677 + + + 6 + 685 + false + 679 + + + 6 + 10 + true + 679 + + + 6 + 12 + true + 679 + + + 6 + 14 + true + 679 + + + 6 + 16 + true + 679 + + + 6 + 18 + true + 679 + + + 6 + 20 + true + 679 + + + 6 + 11 + true + 679 + + + 6 + 13 + true + 679 + + + 6 + 15 + true + 679 + + + 6 + 17 + true + 679 + + + 6 + 19 + true + 679 + + + 6 + 21 + true + 679 + + + 6 + 686 + false + 686 + + + 6 + 22 + true + 679 + + + 6 + 687 + false + 687 + + + 6 + 688 + false + 688 + + + 6 + 690 + false + 690 + + + 6 + 23 + true + 679 + + + 6 + 677 + false + 677 + + + 6 + 677 + false + 677 + + + 6 + 691 + false + 691 + + + 6 + 24 + true + 677 + + + 6 + 707 + false + 692 + + + 6 + 9 + true + 671 + + + 6 + 26 + true + 692 + + + 6 + 28 + true + 692 + + + 6 + 30 + true + 692 + + + 6 + 32 + true + 692 + + + 6 + 34 + true + 692 + + + 6 + 27 + true + 692 + + + 6 + 29 + true + 692 + + + 6 + 31 + true + 692 + + + 6 + 33 + true + 692 + + + 6 + 35 + true + 692 + + + 6 + 36 + true + 692 + + + 6 + 38 + true + 692 + + + 6 + 40 + true + 692 + + + 6 + 42 + true + 692 + + + 6 + 44 + true + 692 + + + 6 + 46 + true + 692 + + + 6 + 39 + true + 692 + + + 6 + 41 + true + 692 + + + 6 + 43 + true + 692 + + + 6 + 45 + true + 692 + + + 6 + 47 + true + 692 + + + 6 + 48 + true + 692 + + + 6 + 50 + true + 692 + + + 6 + 52 + true + 692 + + + 6 + 54 + true + 692 + + + 6 + 37 + true + 692 + + + 6 + 49 + true + 692 + + + 6 + 51 + true + 692 + + + 6 + 53 + true + 692 + + + 6 + 55 + true + 692 + + + 6 + 708 + false + 708 + + + 6 + 56 + true + 692 + + + 6 + 709 + false + 709 + + + 6 + 710 + false + 710 + + + 6 + 712 + false + 712 + + + 6 + 57 + true + 692 + + + 6 + 713 + false + 713 + + + 6 + 58 + true + 712 + + + 6 + 714 + false + 714 + + + 6 + 716 + false + 716 + + + 6 + 717 + false + 717 + + + 6 + 71 + true + 716 + + + 6 + 722 + false + 718 + + + 6 + 60 + true + 718 + + + 6 + 61 + true + 718 + + + 6 + 62 + true + 718 + + + 6 + 64 + true + 718 + + + 6 + 66 + true + 718 + + + 6 + 63 + true + 718 + + + 6 + 65 + true + 718 + + + 6 + 67 + true + 718 + + + 6 + 723 + false + 723 + + + 6 + 68 + true + 718 + + + 6 + 724 + false + 724 + + + 6 + 726 + false + 726 + + + 6 + 69 + true + 718 + + + 6 + 716 + false + 716 + + + 6 + 716 + false + 716 + + + 6 + 727 + false + 727 + + + 6 + 70 + true + 716 + + + 6 + 729 + false + 729 + + + 6 + 59 + true + 712 + + + 6 + 730 + false + 730 + + + 6 + 733 + false + 733 + + + 6 + 761 + false + 758 + + + 6 + 0 + true + 758 + + + 6 + 2 + true + 758 + + + 6 + 4 + true + 758 + + + 6 + 1 + true + 758 + + + 6 + 3 + true + 758 + + + 6 + 5 + true + 758 + + + 6 + 762 + false + 762 + + + 6 + 6 + true + 758 + + + 6 + 763 + false + 763 + + + 6 + 768 + false + 766 + + + 6 + 7 + true + 758 + + + 6 + 8 + true + 766 + + + 6 + 10 + true + 766 + + + 6 + 11 + true + 766 + + + 6 + 9 + true + 766 + + + 6 + 769 + false + 769 + + + 6 + 12 + true + 766 + + + 6 + 770 + false + 770 + + + 6 + 772 + false + 772 + + + 6 + 773 + false + 773 + + + 6 + 31 + true + 772 + + + 6 + 776 + false + 774 + + + 6 + 14 + true + 774 + + + 6 + 16 + true + 774 + + + 6 + 15 + true + 774 + + + 6 + 17 + true + 774 + + + 6 + 777 + false + 777 + + + 6 + 18 + true + 774 + + + 6 + 778 + false + 778 + + + 6 + 780 + false + 780 + + + 6 + 781 + false + 781 + + + 6 + 29 + true + 780 + + + 6 + 785 + false + 782 + + + 6 + 20 + true + 782 + + + 6 + 22 + true + 782 + + + 6 + 24 + true + 782 + + + 6 + 21 + true + 782 + + + 6 + 23 + true + 782 + + + 6 + 25 + true + 782 + + + 6 + 786 + false + 786 + + + 6 + 26 + true + 782 + + + 6 + 787 + false + 787 + + + 6 + 789 + false + 789 + + + 6 + 27 + true + 782 + + + 6 + 780 + false + 780 + + + 6 + 780 + false + 780 + + + 6 + 790 + false + 790 + + + 6 + 28 + true + 780 + + + 6 + 791 + false + 791 + + + 6 + 19 + true + 774 + + + 6 + 772 + false + 772 + + + 6 + 772 + false + 772 + + + 6 + 792 + false + 792 + + + 6 + 30 + true + 772 + + + 6 + 794 + false + 794 + + + 6 + 13 + true + 766 + + + 6 + 795 + false + 795 + + + 6 + 817 + false + 817 + + + 6 + 836 + false + 836 + + + 6 + 837 + false + 837 + + + 6 + 0 + true + 836 + + + 6 + 838 + false + 838 + + + 6 + 841 + false + 841 + + + 6 + 1 + true + 836 + + + 6 + 843 + false + 843 + + + 6 + 844 + false + 844 + + + 6 + 15 + true + 843 + + + 6 + 849 + false + 845 + + + 6 + 2 + true + 845 + + + 6 + 4 + true + 845 + + + 6 + 6 + true + 845 + + + 6 + 8 + true + 845 + + + 6 + 10 + true + 845 + + + 6 + 11 + true + 845 + + + 6 + 3 + true + 845 + + + 6 + 5 + true + 845 + + + 6 + 7 + true + 845 + + + 6 + 9 + true + 845 + + + 6 + 850 + false + 850 + + + 6 + 12 + true + 845 + + + 6 + 851 + false + 851 + + + 6 + 853 + false + 853 + + + 6 + 13 + true + 845 + + + 6 + 843 + false + 843 + + + 6 + 843 + false + 843 + + + 6 + 855 + false + 855 + + + 6 + 14 + true + 843 + + + 6 + 856 + false + 856 + + + 6 + 859 + false + 859 + + + 6 + 874 + false + 873 + + + 6 + 0 + true + 873 + + + 6 + 1 + true + 873 + + + 6 + 875 + false + 875 + + + 6 + 2 + true + 873 + + + 6 + 876 + false + 876 + + + 6 + 886 + false + 879 + + + 6 + 3 + true + 873 + + + 6 + 4 + true + 879 + + + 6 + 6 + true + 879 + + + 6 + 8 + true + 879 + + + 6 + 10 + true + 879 + + + 6 + 9 + true + 879 + + + 6 + 11 + true + 879 + + + 6 + 12 + true + 879 + + + 6 + 14 + true + 879 + + + 6 + 16 + true + 879 + + + 6 + 13 + true + 879 + + + 6 + 18 + true + 879 + + + 6 + 20 + true + 879 + + + 6 + 21 + true + 879 + + + 6 + 5 + true + 879 + + + 6 + 7 + true + 879 + + + 6 + 15 + true + 879 + + + 6 + 17 + true + 879 + + + 6 + 19 + true + 879 + + + 6 + 887 + false + 887 + + + 6 + 22 + true + 879 + + + 6 + 888 + false + 888 + + + 6 + 891 + false + 891 + + + 6 + 23 + true + 879 + + + 6 + 892 + false + 892 + + + 6 + 1263 + false + 1263 + + + 6 + 1264 + false + 1264 + + + 6 + 1266 + false + 1266 + + + 6 + 3 + true + 1265 + + + 6 + 1267 + false + 1267 + + + 6 + 1268 + false + 1268 + + + 6 + 0 + true + 1267 + + + 6 + 1269 + false + 1269 + + + 6 + 1271 + false + 1271 + + + 6 + 1 + true + 1267 + + + 6 + 1272 + false + 1272 + + + 6 + 1265 + false + 1265 + + + 6 + 1274 + false + 1274 + + + 6 + 2 + true + 1265 + + + 6 + 1275 + false + 1275 + + + 6 + 23 + false + 23 + + + 6 + 24 + false + 24 + + + 6 + 1481 + false + 1481 + + + 6 + 1482 + false + 1482 + + + 6 + 1483 + false + 1483 + + + 6 + 33 + false + 33 + + + 6 + 45 + false + 45 + + + 6 + 87 + false + 87 + + + 6 + 957 + false + 957 + + + 6 + 1031 + false + 1031 + + + 6 + 1032 + false + 1032 + + + 6 + 1143 + false + 1143 + + + 6 + 1143 + false + 1143 + + + 6 + 1347 + false + 1346 + + + 6 + 0 + true + 1346 + + + 6 + 1 + true + 1346 + + + 6 + 1346 + false + 1346 + + + 6 + 1352 + false + 1352 + + + 6 + 1378 + false + 1378 + + + 6 + 1407 + false + 1407 + + + 6 + 1412 + false + 1412 + + + 6 + 1413 + false + 1413 + + + 6 + 1415 + false + 1415 + + + 6 + 1416 + false + 1416 + + + 6 + 1421 + false + 1421 + + + 6 + 1422 + false + 1422 + + + 6 + 280 + false + 277 + + + 6 + 0 + true + 277 + + + 6 + 2 + true + 277 + + + 6 + 4 + true + 277 + + + 6 + 1 + true + 277 + + + 6 + 3 + true + 277 + + + 6 + 5 + true + 277 + + + 6 + 410 + false + 410 + + + 6 + 425 + false + 423 + + + 6 + 0 + true + 423 + + + 6 + 1 + true + 423 + + + 6 + 2 + true + 423 + + + 6 + 3 + true + 423 + + + 6 + 1030 + false + 1030 + + + 6 + 1139 + false + 1139 + + + 6 + 0 + true + 1139 + + + 6 + 1 + true + 1139 + + + 6 + 1142 + false + 1142 + + + 6 + 1143 + false + 1143 + + + 6 + 1146 + false + 1146 + + + 6 + 1175 + false + 1163 + + + 6 + 0 + true + 1163 + + + 6 + 1 + true + 1163 + + + 6 + 1411 + false + 1411 + + + 6 + 1412 + false + 1412 + + + 6 + 1416 + false + 1414 + + + 6 + 1416 + false + 1416 + + + 6 + 0 + true + 1416 + + + 6 + 1 + true + 1416 + + + 6 + 1422 + false + 1422 + + + 6 + 0 + true + 1422 + + + 6 + 1 + true + 1422 + + + 6 + 1452 + false + 1452 + + + 7 + 18 + false + 18 + + + 7 + 20 + false + 20 + + + 7 + 22 + false + 22 + + + 7 + 25 + false + 25 + + + 7 + 26 + false + 26 + + + 7 + 28 + false + 28 + + + 7 + 29 + false + 29 + + + 7 + 31 + false + 31 + + + 7 + 32 + false + 32 + + + 7 + 33 + false + 33 + + + 7 + 34 + false + 34 + + + 7 + 35 + false + 35 + + + 7 + 36 + false + 36 + + + 7 + 38 + false + 38 + + + 7 + 40 + false + 40 + + + 7 + 41 + false + 41 + + + 7 + 42 + false + 42 + + + 7 + 0 + true + 41 + + + 7 + 43 + false + 43 + + + 7 + 44 + false + 44 + + + 7 + 45 + false + 45 + + + 7 + 47 + false + 47 + + + 7 + 1 + true + 41 + + + 7 + 48 + false + 48 + + + 7 + 48 + false + 48 + + + 7 + 48 + false + 48 + + + 7 + 21 + true + 48 + + + 7 + 49 + false + 49 + + + 7 + 50 + false + 50 + + + 7 + 51 + false + 51 + + + 7 + 52 + false + 52 + + + 7 + 53 + false + 53 + + + 7 + 54 + false + 54 + + + 7 + 56 + false + 56 + + + 7 + 57 + false + 57 + + + 7 + 57 + false + 57 + + + 7 + 57 + false + 57 + + + 7 + 19 + true + 57 + + + 7 + 58 + false + 58 + + + 7 + 59 + false + 59 + + + 7 + 59 + false + 59 + + + 7 + 59 + false + 59 + + + 7 + 17 + true + 59 + + + 7 + 60 + false + 60 + + + 7 + 61 + false + 61 + + + 7 + 62 + false + 62 + + + 7 + 64 + false + 64 + + + 7 + 65 + false + 65 + + + 7 + 2 + true + 64 + + + 7 + 66 + false + 66 + + + 7 + 67 + false + 67 + + + 7 + 69 + false + 69 + + + 7 + 3 + true + 64 + + + 7 + 70 + false + 70 + + + 7 + 71 + false + 71 + + + 7 + 72 + false + 72 + + + 7 + 73 + false + 73 + + + 7 + 74 + false + 74 + + + 7 + 75 + false + 75 + + + 7 + 77 + false + 77 + + + 7 + 78 + false + 78 + + + 7 + 80 + false + 80 + + + 7 + 80 + false + 80 + + + 7 + 80 + false + 80 + + + 7 + 15 + true + 80 + + + 7 + 81 + false + 81 + + + 7 + 83 + false + 83 + + + 7 + 84 + false + 84 + + + 7 + 86 + false + 86 + + + 7 + 5 + true + 83 + + + 7 + 87 + false + 87 + + + 7 + 88 + false + 88 + + + 7 + 89 + false + 89 + + + 7 + 90 + false + 90 + + + 7 + 91 + false + 91 + + + 7 + 93 + false + 93 + + + 7 + 94 + false + 94 + + + 7 + 94 + false + 94 + + + 7 + 13 + true + 94 + + + 7 + 94 + false + 94 + + + 7 + 95 + false + 95 + + + 7 + 96 + false + 96 + + + 7 + 97 + false + 97 + + + 7 + 98 + false + 98 + + + 7 + 99 + false + 99 + + + 7 + 100 + false + 100 + + + 7 + 102 + false + 102 + + + 7 + 103 + false + 103 + + + 7 + 6 + true + 102 + + + 7 + 104 + false + 104 + + + 7 + 105 + false + 105 + + + 7 + 106 + false + 106 + + + 7 + 107 + false + 107 + + + 7 + 108 + false + 108 + + + 7 + 109 + false + 109 + + + 7 + 109 + false + 109 + + + 7 + 109 + false + 109 + + + 7 + 11 + true + 109 + + + 7 + 110 + false + 110 + + + 7 + 111 + false + 111 + + + 7 + 112 + false + 112 + + + 7 + 113 + false + 113 + + + 7 + 8 + true + 113 + + + 7 + 9 + true + 113 + + + 7 + 114 + false + 114 + + + 7 + 115 + false + 115 + + + 7 + 116 + false + 116 + + + 7 + 109 + false + 109 + + + 7 + 10 + true + 109 + + + 7 + 118 + false + 118 + + + 7 + 119 + false + 119 + + + 7 + 121 + false + 121 + + + 7 + 7 + true + 102 + + + 7 + 122 + false + 122 + + + 7 + 123 + false + 123 + + + 7 + 94 + false + 94 + + + 7 + 12 + true + 94 + + + 7 + 125 + false + 125 + + + 7 + 126 + false + 126 + + + 7 + 127 + false + 127 + + + 7 + 80 + false + 80 + + + 7 + 4 + true + 83 + + + 7 + 14 + true + 80 + + + 7 + 129 + false + 129 + + + 7 + 130 + false + 130 + + + 7 + 131 + false + 131 + + + 7 + 132 + false + 132 + + + 7 + 59 + false + 59 + + + 7 + 16 + true + 59 + + + 7 + 133 + false + 133 + + + 7 + 57 + false + 57 + + + 7 + 18 + true + 57 + + + 7 + 135 + false + 135 + + + 7 + 136 + false + 136 + + + 7 + 137 + false + 137 + + + 7 + 48 + false + 48 + + + 7 + 20 + true + 48 + + + 7 + 139 + false + 139 + + + 7 + 140 + false + 140 + + + 7 + 141 + false + 141 + + + 7 + 142 + false + 142 + + + 7 + 144 + false + 144 + + + 7 + 145 + false + 145 + + + 7 + 146 + false + 146 + + + 7 + 148 + false + 148 + + + 7 + 149 + false + 149 + + + 7 + 151 + false + 151 + + + 7 + 152 + false + 152 + + + 7 + 155 + false + 155 + + + 7 + 179 + false + 179 + + + 7 + 180 + false + 180 + + + 7 + 0 + true + 179 + + + 7 + 181 + false + 181 + + + 7 + 212 + false + 184 + + + 7 + 1 + true + 179 + + + 7 + 2 + true + 184 + + + 7 + 3 + true + 184 + + + 7 + 213 + false + 213 + + + 7 + 216 + false + 216 + + + 7 + 217 + false + 217 + + + 7 + 218 + false + 218 + + + 7 + 0 + true + 217 + + + 7 + 219 + false + 219 + + + 7 + 222 + false + 222 + + + 7 + 1 + true + 217 + + + 7 + 222 + false + 222 + + + 7 + 222 + false + 222 + + + 7 + 5 + true + 222 + + + 7 + 223 + false + 223 + + + 7 + 224 + false + 224 + + + 7 + 225 + false + 225 + + + 7 + 2 + true + 224 + + + 7 + 226 + false + 226 + + + 7 + 228 + false + 228 + + + 7 + 3 + true + 224 + + + 7 + 222 + false + 222 + + + 7 + 4 + true + 222 + + + 7 + 229 + false + 229 + + + 7 + 230 + false + 230 + + + 7 + 108 + false + 108 + + + 7 + 108 + false + 108 + + + 7 + 108 + false + 108 + + + 7 + 184 + false + 184 + + + 7 + 185 + false + 185 + + + 7 + 187 + false + 186 + + + 7 + 188 + false + 188 + + + 7 + 189 + false + 189 + + + 7 + 0 + true + 188 + + + 7 + 190 + false + 190 + + + 7 + 193 + false + 193 + + + 7 + 1 + true + 188 + + + 7 + 194 + false + 194 + + + 7 + 210 + false + 195 + + + 7 + 211 + false + 211 + + + 7 + 212 + false + 212 + + + 7 + 186 + false + 186 + + + 7 + 187 + false + 187 + + + 7 + 195 + false + 195 + + + 7 + 44 + false + 44 + + + 7 + 96 + false + 96 + + + 7 + 104 + false + 104 + + + 7 + 196 + false + 196 + + + 7 + 197 + false + 197 + + + 7 + 198 + false + 198 + + + 7 + 0 + true + 197 + + + 7 + 199 + false + 199 + + + 7 + 202 + false + 202 + + + 7 + 1 + true + 197 + + + 7 + 203 + false + 203 + + + 7 + 2 + true + 202 + + + 7 + 204 + false + 204 + + + 7 + 205 + false + 205 + + + 7 + 207 + false + 207 + + + 7 + 3 + true + 202 + + + 7 + 208 + false + 208 + + + 7 + 209 + false + 209 + + + 7 + 210 + false + 210 + + + 7 + 202 + false + 202 + + + 8 + 11 + false + 11 + + + 8 + 13 + false + 13 + + + 8 + 15 + false + 15 + + + 8 + 18 + false + 18 + + + 8 + 19 + false + 19 + + + 8 + 20 + false + 20 + + + 9 + 13 + false + 13 + + + 9 + 15 + false + 15 + + + 9 + 17 + false + 17 + + + 9 + 20 + false + 20 + + + 9 + 21 + false + 21 + + + 9 + 22 + false + 22 + + + 9 + 0 + true + 21 + + + 9 + 23 + false + 23 + + + 9 + 26 + false + 26 + + + 9 + 1 + true + 21 + + + 9 + 27 + false + 27 + + + 9 + 29 + false + 29 + + + 9 + 29 + false + 29 + + + 9 + 29 + false + 29 + + + 9 + 15 + true + 29 + + + 9 + 30 + false + 30 + + + 9 + 31 + false + 31 + + + 9 + 31 + false + 31 + + + 9 + 31 + false + 31 + + + 9 + 13 + true + 31 + + + 9 + 32 + false + 32 + + + 9 + 33 + false + 33 + + + 9 + 34 + false + 34 + + + 9 + 35 + false + 35 + + + 9 + 37 + false + 37 + + + 9 + 38 + false + 38 + + + 9 + 38 + false + 38 + + + 9 + 38 + false + 38 + + + 9 + 11 + true + 38 + + + 9 + 39 + false + 39 + + + 9 + 40 + false + 40 + + + 9 + 40 + false + 40 + + + 9 + 40 + false + 40 + + + 9 + 9 + true + 40 + + + 9 + 41 + false + 41 + + + 9 + 43 + false + 43 + + + 9 + 44 + false + 44 + + + 9 + 46 + false + 46 + + + 9 + 3 + true + 43 + + + 9 + 47 + false + 47 + + + 9 + 49 + false + 49 + + + 9 + 49 + false + 49 + + + 9 + 49 + false + 49 + + + 9 + 5 + true + 49 + + + 9 + 50 + false + 50 + + + 9 + 49 + false + 49 + + + 9 + 4 + true + 49 + + + 9 + 52 + false + 52 + + + 9 + 52 + false + 52 + + + 9 + 52 + false + 52 + + + 9 + 7 + true + 52 + + + 9 + 53 + false + 53 + + + 9 + 54 + false + 54 + + + 9 + 55 + false + 55 + + + 9 + 52 + false + 52 + + + 9 + 6 + true + 52 + + + 9 + 56 + false + 56 + + + 9 + 40 + false + 40 + + + 9 + 2 + true + 43 + + + 9 + 8 + true + 40 + + + 9 + 57 + false + 57 + + + 9 + 38 + false + 38 + + + 9 + 10 + true + 38 + + + 9 + 59 + false + 59 + + + 9 + 60 + false + 60 + + + 9 + 62 + false + 62 + + + 9 + 63 + false + 63 + + + 9 + 65 + false + 65 + + + 9 + 66 + false + 66 + + + 9 + 68 + false + 68 + + + 9 + 69 + false + 69 + + + 9 + 31 + false + 31 + + + 9 + 12 + true + 31 + + + 9 + 70 + false + 70 + + + 9 + 29 + false + 29 + + + 9 + 14 + true + 29 + + + 9 + 72 + false + 72 + + + 9 + 73 + false + 73 + + + 10 + 16 + false + 16 + + + 10 + 18 + false + 18 + + + 10 + 20 + false + 20 + + + 10 + 23 + false + 23 + + + 10 + 24 + false + 24 + + + 10 + 25 + false + 25 + + + 10 + 0 + true + 24 + + + 10 + 26 + false + 26 + + + 10 + 29 + false + 29 + + + 10 + 1 + true + 24 + + + 10 + 30 + false + 30 + + + 10 + 31 + false + 31 + + + 10 + 32 + false + 32 + + + 10 + 33 + false + 33 + + + 10 + 35 + false + 35 + + + 10 + 35 + false + 35 + + + 10 + 36 + false + 36 + + + 10 + 36 + false + 36 + + + 10 + 38 + false + 38 + + + 10 + 40 + false + 40 + + + 10 + 40 + false + 40 + + + 10 + 40 + false + 40 + + + 10 + 27 + true + 40 + + + 10 + 41 + false + 41 + + + 10 + 42 + false + 42 + + + 10 + 43 + false + 43 + + + 10 + 45 + false + 45 + + + 10 + 46 + false + 46 + + + 10 + 47 + false + 47 + + + 10 + 49 + false + 49 + + + 10 + 50 + false + 50 + + + 10 + 51 + false + 51 + + + 10 + 53 + false + 53 + + + 10 + 54 + false + 54 + + + 10 + 56 + false + 56 + + + 10 + 56 + false + 56 + + + 10 + 56 + false + 56 + + + 10 + 25 + true + 56 + + + 10 + 57 + false + 57 + + + 10 + 58 + false + 58 + + + 10 + 59 + false + 59 + + + 10 + 60 + false + 60 + + + 10 + 61 + false + 61 + + + 10 + 63 + false + 63 + + + 10 + 63 + false + 63 + + + 10 + 63 + false + 63 + + + 10 + 23 + true + 63 + + + 10 + 64 + false + 64 + + + 10 + 65 + false + 65 + + + 10 + 66 + false + 66 + + + 10 + 68 + false + 68 + + + 10 + 70 + false + 70 + + + 10 + 71 + false + 71 + + + 10 + 72 + false + 72 + + + 10 + 74 + false + 74 + + + 10 + 74 + false + 74 + + + 10 + 74 + false + 74 + + + 10 + 17 + true + 74 + + + 10 + 75 + false + 75 + + + 10 + 77 + false + 77 + + + 10 + 78 + false + 78 + + + 10 + 80 + false + 80 + + + 10 + 3 + true + 77 + + + 10 + 81 + false + 81 + + + 10 + 82 + false + 82 + + + 10 + 83 + false + 83 + + + 10 + 85 + false + 85 + + + 10 + 87 + false + 87 + + + 10 + 88 + false + 88 + + + 10 + 89 + false + 89 + + + 10 + 90 + false + 90 + + + 10 + 91 + false + 91 + + + 10 + 92 + false + 92 + + + 10 + 93 + false + 93 + + + 10 + 94 + false + 94 + + + 10 + 4 + true + 94 + + + 10 + 5 + true + 94 + + + 10 + 96 + false + 96 + + + 10 + 98 + false + 98 + + + 10 + 99 + false + 99 + + + 10 + 101 + false + 101 + + + 10 + 102 + false + 102 + + + 10 + 103 + false + 103 + + + 10 + 104 + false + 104 + + + 10 + 105 + false + 105 + + + 10 + 106 + false + 106 + + + 10 + 107 + false + 107 + + + 10 + 108 + false + 108 + + + 10 + 109 + false + 109 + + + 10 + 110 + false + 110 + + + 10 + 111 + false + 111 + + + 10 + 112 + false + 112 + + + 10 + 113 + false + 113 + + + 10 + 116 + false + 116 + + + 10 + 117 + false + 117 + + + 10 + 118 + false + 118 + + + 10 + 119 + false + 119 + + + 10 + 120 + false + 120 + + + 10 + 121 + false + 121 + + + 10 + 123 + false + 123 + + + 10 + 123 + false + 123 + + + 10 + 9 + true + 123 + + + 10 + 123 + false + 123 + + + 10 + 124 + false + 124 + + + 10 + 125 + false + 125 + + + 10 + 126 + false + 126 + + + 10 + 128 + false + 128 + + + 10 + 129 + false + 129 + + + 10 + 130 + false + 130 + + + 10 + 131 + false + 131 + + + 10 + 132 + false + 132 + + + 10 + 133 + false + 133 + + + 10 + 134 + false + 134 + + + 10 + 135 + false + 135 + + + 10 + 136 + false + 136 + + + 10 + 137 + false + 137 + + + 10 + 138 + false + 138 + + + 10 + 139 + false + 139 + + + 10 + 141 + false + 141 + + + 10 + 142 + false + 142 + + + 10 + 6 + true + 141 + + + 10 + 143 + false + 143 + + + 10 + 144 + false + 144 + + + 10 + 145 + false + 145 + + + 10 + 147 + false + 147 + + + 10 + 7 + true + 141 + + + 10 + 148 + false + 148 + + + 10 + 123 + false + 123 + + + 10 + 8 + true + 123 + + + 10 + 150 + false + 150 + + + 10 + 150 + false + 150 + + + 10 + 150 + false + 150 + + + 10 + 11 + true + 150 + + + 10 + 151 + false + 151 + + + 10 + 152 + false + 152 + + + 10 + 153 + false + 153 + + + 10 + 154 + false + 154 + + + 10 + 155 + false + 155 + + + 10 + 156 + false + 156 + + + 10 + 157 + false + 157 + + + 10 + 158 + false + 158 + + + 10 + 159 + false + 159 + + + 10 + 160 + false + 160 + + + 10 + 161 + false + 161 + + + 10 + 162 + false + 162 + + + 10 + 163 + false + 163 + + + 10 + 150 + false + 150 + + + 10 + 10 + true + 150 + + + 10 + 165 + false + 165 + + + 10 + 166 + false + 166 + + + 10 + 167 + false + 167 + + + 10 + 12 + true + 166 + + + 10 + 169 + false + 169 + + + 10 + 13 + true + 166 + + + 10 + 170 + false + 170 + + + 10 + 171 + false + 171 + + + 10 + 172 + false + 172 + + + 10 + 173 + false + 173 + + + 10 + 174 + false + 174 + + + 10 + 175 + false + 175 + + + 10 + 176 + false + 176 + + + 10 + 177 + false + 177 + + + 10 + 178 + false + 178 + + + 10 + 179 + false + 179 + + + 10 + 14 + true + 179 + + + 10 + 15 + true + 179 + + + 10 + 180 + false + 180 + + + 10 + 182 + false + 182 + + + 10 + 183 + false + 183 + + + 10 + 184 + false + 184 + + + 10 + 185 + false + 185 + + + 10 + 186 + false + 186 + + + 10 + 187 + false + 187 + + + 10 + 188 + false + 188 + + + 10 + 189 + false + 189 + + + 10 + 190 + false + 190 + + + 10 + 191 + false + 191 + + + 10 + 74 + false + 74 + + + 10 + 2 + true + 77 + + + 10 + 16 + true + 74 + + + 10 + 193 + false + 193 + + + 10 + 194 + false + 194 + + + 10 + 195 + false + 195 + + + 10 + 18 + true + 194 + + + 10 + 197 + false + 197 + + + 10 + 19 + true + 194 + + + 10 + 198 + false + 198 + + + 10 + 199 + false + 199 + + + 10 + 200 + false + 200 + + + 10 + 201 + false + 201 + + + 10 + 203 + false + 203 + + + 10 + 204 + false + 204 + + + 10 + 205 + false + 205 + + + 10 + 206 + false + 206 + + + 10 + 207 + false + 207 + + + 10 + 208 + false + 208 + + + 10 + 209 + false + 209 + + + 10 + 210 + false + 210 + + + 10 + 211 + false + 211 + + + 10 + 20 + true + 211 + + + 10 + 21 + true + 211 + + + 10 + 212 + false + 212 + + + 10 + 213 + false + 213 + + + 10 + 214 + false + 214 + + + 10 + 216 + false + 216 + + + 10 + 217 + false + 217 + + + 10 + 218 + false + 218 + + + 10 + 219 + false + 219 + + + 10 + 220 + false + 220 + + + 10 + 63 + false + 63 + + + 10 + 22 + true + 63 + + + 10 + 221 + false + 221 + + + 10 + 222 + false + 222 + + + 10 + 56 + false + 56 + + + 10 + 24 + true + 56 + + + 10 + 224 + false + 224 + + + 10 + 225 + false + 225 + + + 10 + 226 + false + 226 + + + 10 + 227 + false + 227 + + + 10 + 40 + false + 40 + + + 10 + 26 + true + 40 + + + 10 + 229 + false + 229 + + + 10 + 230 + false + 230 + + + 10 + 231 + false + 231 + + + 10 + 232 + false + 232 + + + 10 + 234 + false + 234 + + + 10 + 235 + false + 235 + + + 10 + 236 + false + 236 + + + 10 + 237 + false + 237 + + + 10 + 238 + false + 238 + + + 10 + 239 + false + 239 + + + 10 + 240 + false + 240 + + + 10 + 241 + false + 241 + + + 10 + 242 + false + 242 + + + 10 + 243 + false + 243 + + + 10 + 244 + false + 244 + + + 10 + 245 + false + 245 + + + 10 + 247 + false + 247 + + + 10 + 248 + false + 248 + + + 10 + 249 + false + 249 + + + 10 + 251 + false + 251 + + + 10 + 252 + false + 252 + + + 10 + 254 + false + 254 + + + 10 + 255 + false + 255 + + + 10 + 125 + false + 125 + + + 11 + 26 + false + 26 + + + 11 + 27 + false + 27 + + + 11 + 28 + false + 28 + + + 11 + 31 + false + 31 + + + 11 + 31 + false + 31 + + + 11 + 15 + false + 15 + + + 11 + 16 + false + 16 + + + 11 + 17 + false + 17 + + + 11 + 22 + false + 18 + + + 11 + 23 + false + 23 + + + 12 + 13 + false + 13 + + + 12 + 15 + false + 15 + + + 12 + 17 + false + 17 + + + 12 + 20 + false + 20 + + + 12 + 21 + false + 21 + + + 12 + 22 + false + 22 + + + 12 + 0 + true + 21 + + + 12 + 23 + false + 23 + + + 12 + 27 + false + 27 + + + 12 + 1 + true + 21 + + + 12 + 28 + false + 28 + + + 12 + 29 + false + 29 + + + 12 + 30 + false + 30 + + + 12 + 33 + false + 33 + + + 12 + 34 + false + 34 + + + 12 + 35 + false + 35 + + + 12 + 36 + false + 36 + + + 12 + 39 + false + 39 + + + 12 + 40 + false + 40 + + + 12 + 43 + false + 43 + + + 12 + 45 + false + 45 + + + 12 + 48 + false + 48 + + + 12 + 49 + false + 49 + + + 12 + 52 + false + 52 + + + 12 + 54 + false + 54 + + + 12 + 57 + false + 57 + + + 12 + 58 + false + 58 + + + 12 + 61 + false + 61 + + + 12 + 63 + false + 63 + + + 12 + 66 + false + 66 + + + 12 + 67 + false + 67 + + + 12 + 70 + false + 70 + + + 12 + 71 + false + 71 + + + 12 + 72 + false + 72 + + + 13 + 88 + false + 88 + + + 13 + 89 + false + 89 + + + 13 + 90 + false + 90 + + + 13 + 0 + true + 89 + + + 13 + 91 + false + 91 + + + 13 + 94 + false + 94 + + + 13 + 1 + true + 89 + + + 13 + 95 + false + 95 + + + 13 + 2 + true + 94 + + + 13 + 96 + false + 96 + + + 13 + 99 + false + 99 + + + 13 + 3 + true + 94 + + + 13 + 100 + false + 100 + + + 13 + 4 + true + 99 + + + 13 + 101 + false + 101 + + + 13 + 104 + false + 104 + + + 13 + 5 + true + 99 + + + 13 + 105 + false + 105 + + + 13 + 9 + true + 104 + + + 13 + 106 + false + 106 + + + 13 + 107 + false + 107 + + + 13 + 6 + true + 106 + + + 13 + 108 + false + 108 + + + 13 + 110 + false + 110 + + + 13 + 7 + true + 106 + + + 13 + 104 + false + 104 + + + 13 + 104 + false + 104 + + + 13 + 112 + false + 112 + + + 13 + 8 + true + 104 + + + 13 + 113 + false + 113 + + + 13 + 116 + false + 116 + + + 13 + 117 + false + 117 + + + 13 + 118 + false + 118 + + + 13 + 0 + true + 117 + + + 13 + 119 + false + 119 + + + 13 + 122 + false + 122 + + + 13 + 1 + true + 117 + + + 13 + 124 + false + 124 + + + 13 + 125 + false + 125 + + + 13 + 127 + false + 127 + + + 13 + 128 + false + 128 + + + 13 + 129 + false + 129 + + + 13 + 131 + false + 131 + + + 13 + 132 + false + 132 + + + 13 + 2 + true + 131 + + + 13 + 133 + false + 133 + + + 13 + 136 + false + 136 + + + 13 + 3 + true + 131 + + + 13 + 139 + false + 139 + + + 13 + 142 + false + 142 + + + 13 + 144 + false + 144 + + + 13 + 145 + false + 145 + + + 13 + 160 + false + 160 + + + 13 + 161 + false + 161 + + + 13 + 163 + false + 163 + + + 13 + 164 + false + 164 + + + 13 + 0 + true + 163 + + + 13 + 165 + false + 165 + + + 13 + 166 + false + 166 + + + 13 + 169 + false + 169 + + + 13 + 1 + true + 163 + + + 13 + 170 + false + 170 + + + 13 + 2 + true + 169 + + + 13 + 171 + false + 171 + + + 13 + 174 + false + 174 + + + 13 + 3 + true + 169 + + + 13 + 175 + false + 175 + + + 13 + 177 + false + 177 + + + 13 + 177 + false + 177 + + + 13 + 177 + false + 177 + + + 13 + 13 + true + 177 + + + 13 + 178 + false + 178 + + + 13 + 179 + false + 179 + + + 13 + 180 + false + 180 + + + 13 + 181 + false + 181 + + + 13 + 182 + false + 182 + + + 13 + 182 + false + 182 + + + 13 + 182 + false + 182 + + + 13 + 11 + true + 182 + + + 13 + 183 + false + 183 + + + 13 + 185 + false + 185 + + + 13 + 186 + false + 186 + + + 13 + 4 + true + 185 + + + 13 + 187 + false + 187 + + + 13 + 5 + true + 185 + + + 13 + 191 + false + 191 + + + 13 + 192 + false + 192 + + + 13 + 193 + false + 193 + + + 13 + 194 + false + 194 + + + 13 + 6 + true + 193 + + + 13 + 195 + false + 195 + + + 13 + 199 + false + 199 + + + 13 + 7 + true + 193 + + + 13 + 200 + false + 200 + + + 13 + 8 + true + 199 + + + 13 + 201 + false + 201 + + + 13 + 202 + false + 202 + + + 13 + 203 + false + 203 + + + 13 + 9 + true + 199 + + + 13 + 204 + false + 204 + + + 13 + 205 + false + 205 + + + 13 + 207 + false + 207 + + + 13 + 208 + false + 208 + + + 13 + 209 + false + 209 + + + 13 + 182 + false + 182 + + + 13 + 10 + true + 182 + + + 13 + 210 + false + 210 + + + 13 + 177 + false + 177 + + + 13 + 212 + false + 212 + + + 13 + 12 + true + 177 + + + 13 + 213 + false + 213 + + + 13 + 14 + true + 212 + + + 13 + 214 + false + 214 + + + 13 + 217 + false + 217 + + + 13 + 15 + true + 212 + + + 13 + 218 + false + 218 + + + 13 + 54 + false + 54 + + + 13 + 56 + false + 56 + + + 13 + 58 + false + 58 + + + 13 + 59 + false + 59 + + + 13 + 60 + false + 60 + + + 13 + 61 + false + 61 + + + 13 + 62 + false + 62 + + + 13 + 63 + false + 63 + + + 13 + 64 + false + 64 + + + 13 + 65 + false + 65 + + + 13 + 67 + false + 67 + + + 13 + 68 + false + 68 + + + 13 + 70 + false + 70 + + + 13 + 71 + false + 71 + + + 13 + 72 + false + 72 + + + 13 + 73 + false + 73 + + + 13 + 83 + false + 77 + + + 13 + 84 + false + 84 + + + 13 + 201 + false + 201 + + + 13 + 83 + false + 77 + + + 13 + 259 + false + 259 + + + 13 + 260 + false + 260 + + + 13 + 262 + false + 262 + + + 13 + 262 + false + 262 + + + 13 + 262 + false + 262 + + + 13 + 7 + true + 262 + + + 13 + 263 + false + 263 + + + 13 + 264 + false + 264 + + + 13 + 265 + false + 265 + + + 13 + 0 + true + 264 + + + 13 + 266 + false + 266 + + + 13 + 269 + false + 269 + + + 13 + 1 + true + 264 + + + 13 + 270 + false + 270 + + + 13 + 270 + false + 270 + + + 13 + 270 + false + 270 + + + 13 + 5 + true + 270 + + + 13 + 271 + false + 271 + + + 13 + 272 + false + 272 + + + 13 + 273 + false + 273 + + + 13 + 2 + true + 272 + + + 13 + 274 + false + 274 + + + 13 + 275 + false + 275 + + + 13 + 276 + false + 276 + + + 13 + 278 + false + 278 + + + 13 + 3 + true + 272 + + + 13 + 270 + false + 270 + + + 13 + 279 + false + 279 + + + 13 + 4 + true + 270 + + + 13 + 262 + false + 262 + + + 13 + 6 + true + 262 + + + 13 + 281 + false + 281 + + + 13 + 282 + false + 282 + + + 13 + 223 + false + 223 + + + 13 + 226 + false + 226 + + + 13 + 227 + false + 227 + + + 13 + 228 + false + 228 + + + 13 + 232 + false + 230 + + + 13 + 233 + false + 233 + + + 13 + 234 + false + 234 + + + 13 + 0 + true + 233 + + + 13 + 235 + false + 235 + + + 13 + 238 + false + 238 + + + 13 + 1 + true + 233 + + + 13 + 239 + false + 239 + + + 13 + 240 + false + 240 + + + 13 + 241 + false + 241 + + + 13 + 242 + false + 242 + + + 13 + 242 + false + 242 + + + 13 + 242 + false + 242 + + + 13 + 3 + true + 242 + + + 13 + 243 + false + 243 + + + 13 + 244 + false + 244 + + + 13 + 245 + false + 245 + + + 13 + 247 + false + 246 + + + 13 + 248 + false + 248 + + + 13 + 249 + false + 249 + + + 13 + 242 + false + 242 + + + 13 + 2 + true + 242 + + + 13 + 251 + false + 251 + + + 13 + 252 + false + 252 + + + 13 + 252 + false + 252 + + + 13 + 252 + false + 252 + + + 13 + 5 + true + 252 + + + 13 + 253 + false + 253 + + + 13 + 254 + false + 254 + + + 13 + 255 + false + 255 + + + 13 + 252 + false + 252 + + + 13 + 4 + true + 252 + + + 13 + 256 + false + 256 + + + 13 + 246 + false + 246 + + + 13 + 247 + false + 247 + + + 13 + 295 + false + 295 + + + 13 + 298 + false + 296 + + + 13 + 300 + false + 300 + + + 13 + 301 + false + 301 + + + 13 + 0 + true + 301 + + + 13 + 1 + true + 301 + + + 13 + 302 + false + 302 + + + 13 + 303 + false + 303 + + + 13 + 2 + true + 302 + + + 13 + 304 + false + 304 + + + 13 + 307 + false + 307 + + + 13 + 3 + true + 302 + + + 13 + 4 + true + 307 + + + 13 + 5 + true + 307 + + + 13 + 308 + false + 308 + + + 13 + 309 + false + 309 + + + 13 + 6 + true + 308 + + + 13 + 310 + false + 310 + + + 13 + 313 + false + 313 + + + 13 + 7 + true + 308 + + + 13 + 314 + false + 314 + + + 13 + 289 + false + 289 + + + 13 + 290 + false + 290 + + + 13 + 291 + false + 291 + + + 13 + 292 + false + 292 + + + 13 + 310 + false + 310 + + + 14 + 55 + false + 55 + + + 14 + 55 + false + 55 + + + 14 + 83 + false + 83 + + + 14 + 84 + false + 84 + + + 14 + 85 + false + 85 + + + 14 + 0 + true + 84 + + + 14 + 86 + false + 86 + + + 14 + 88 + false + 88 + + + 14 + 1 + true + 84 + + + 14 + 89 + false + 89 + + + 14 + 92 + false + 92 + + + 14 + 100 + false + 93 + + + 14 + 0 + true + 93 + + + 14 + 1 + true + 93 + + + 14 + 101 + false + 101 + + + 14 + 104 + false + 104 + + + 14 + 106 + false + 106 + + + 14 + 107 + false + 107 + + + 14 + 108 + false + 108 + + + 14 + 0 + true + 107 + + + 14 + 109 + false + 109 + + + 14 + 110 + false + 110 + + + 14 + 2 + true + 109 + + + 14 + 111 + false + 111 + + + 14 + 114 + false + 114 + + + 14 + 3 + true + 109 + + + 14 + 115 + false + 115 + + + 14 + 4 + true + 114 + + + 14 + 116 + false + 116 + + + 14 + 119 + false + 119 + + + 14 + 5 + true + 114 + + + 14 + 120 + false + 120 + + + 14 + 124 + false + 124 + + + 14 + 1 + true + 107 + + + 14 + 125 + false + 125 + + + 14 + 128 + false + 128 + + + 14 + 129 + false + 129 + + + 14 + 130 + false + 130 + + + 14 + 131 + false + 131 + + + 14 + 133 + false + 133 + + + 14 + 136 + false + 136 + + + 14 + 140 + false + 137 + + + 14 + 147 + false + 142 + + + 14 + 149 + false + 149 + + + 14 + 151 + false + 151 + + + 14 + 152 + false + 152 + + + 14 + 0 + true + 151 + + + 14 + 153 + false + 153 + + + 14 + 153 + false + 153 + + + 14 + 153 + false + 153 + + + 14 + 3 + true + 153 + + + 14 + 154 + false + 154 + + + 14 + 155 + false + 155 + + + 14 + 156 + false + 156 + + + 14 + 153 + false + 153 + + + 14 + 2 + true + 153 + + + 14 + 157 + false + 157 + + + 14 + 159 + false + 159 + + + 14 + 1 + true + 151 + + + 14 + 4 + true + 159 + + + 14 + 5 + true + 159 + + + 14 + 161 + false + 161 + + + 14 + 162 + false + 162 + + + 14 + 167 + false + 167 + + + 14 + 168 + false + 168 + + + 14 + 169 + false + 169 + + + 14 + 5 + true + 168 + + + 14 + 171 + false + 171 + + + 14 + 0 + true + 171 + + + 14 + 1 + true + 171 + + + 14 + 172 + false + 172 + + + 14 + 2 + true + 171 + + + 14 + 173 + false + 173 + + + 14 + 175 + false + 175 + + + 14 + 3 + true + 171 + + + 14 + 168 + false + 168 + + + 14 + 168 + false + 168 + + + 14 + 177 + false + 177 + + + 14 + 4 + true + 168 + + + 14 + 178 + false + 178 + + + 14 + 182 + false + 182 + + + 14 + 183 + false + 183 + + + 14 + 0 + true + 183 + + + 14 + 1 + true + 183 + + + 14 + 184 + false + 184 + + + 14 + 189 + false + 189 + + + 14 + 190 + false + 190 + + + 14 + 191 + false + 191 + + + 14 + 192 + false + 192 + + + 14 + 193 + false + 193 + + + 14 + 194 + false + 194 + + + 14 + 195 + false + 195 + + + 14 + 0 + true + 194 + + + 14 + 196 + false + 196 + + + 14 + 197 + false + 197 + + + 14 + 199 + false + 199 + + + 14 + 1 + true + 194 + + + 14 + 200 + false + 200 + + + 14 + 201 + false + 201 + + + 14 + 201 + false + 201 + + + 14 + 204 + false + 204 + + + 14 + 205 + false + 205 + + + 14 + 207 + false + 207 + + + 14 + 208 + false + 208 + + + 14 + 209 + false + 209 + + + 14 + 210 + false + 210 + + + 14 + 211 + false + 211 + + + 14 + 212 + false + 212 + + + 14 + 0 + true + 211 + + + 14 + 213 + false + 213 + + + 14 + 214 + false + 214 + + + 14 + 216 + false + 216 + + + 14 + 1 + true + 211 + + + 14 + 217 + false + 217 + + + 14 + 217 + false + 217 + + + 14 + 217 + false + 217 + + + 14 + 5 + true + 217 + + + 14 + 218 + false + 218 + + + 14 + 219 + false + 219 + + + 14 + 220 + false + 220 + + + 14 + 2 + true + 219 + + + 14 + 221 + false + 221 + + + 14 + 222 + false + 222 + + + 14 + 223 + false + 223 + + + 14 + 225 + false + 225 + + + 14 + 3 + true + 219 + + + 14 + 217 + false + 217 + + + 14 + 4 + true + 217 + + + 14 + 227 + false + 227 + + + 14 + 228 + false + 228 + + + 14 + 229 + false + 229 + + + 14 + 231 + false + 231 + + + 14 + 232 + false + 232 + + + 14 + 233 + false + 233 + + + 14 + 6 + true + 232 + + + 14 + 234 + false + 234 + + + 14 + 235 + false + 235 + + + 14 + 237 + false + 237 + + + 14 + 7 + true + 232 + + + 14 + 237 + false + 237 + + + 14 + 237 + false + 237 + + + 14 + 19 + true + 237 + + + 14 + 238 + false + 238 + + + 14 + 243 + false + 239 + + + 14 + 8 + true + 239 + + + 14 + 10 + true + 239 + + + 14 + 9 + true + 239 + + + 14 + 11 + true + 239 + + + 14 + 244 + false + 244 + + + 14 + 12 + true + 239 + + + 14 + 245 + false + 245 + + + 14 + 246 + false + 246 + + + 14 + 14 + true + 245 + + + 14 + 247 + false + 247 + + + 14 + 16 + true + 247 + + + 14 + 17 + true + 247 + + + 14 + 248 + false + 248 + + + 14 + 250 + false + 250 + + + 14 + 15 + true + 245 + + + 14 + 251 + false + 251 + + + 14 + 252 + false + 252 + + + 14 + 253 + false + 253 + + + 14 + 254 + false + 254 + + + 14 + 13 + true + 239 + + + 14 + 237 + false + 237 + + + 14 + 18 + true + 237 + + + 14 + 257 + false + 257 + + + 14 + 258 + false + 258 + + + 14 + 20 + true + 257 + + + 14 + 260 + false + 259 + + + 14 + 261 + false + 261 + + + 14 + 263 + false + 263 + + + 14 + 21 + true + 257 + + + 14 + 265 + false + 265 + + + 14 + 266 + false + 266 + + + 14 + 22 + true + 265 + + + 14 + 270 + false + 270 + + + 14 + 271 + false + 271 + + + 14 + 273 + false + 273 + + + 14 + 23 + true + 265 + + + 14 + 274 + false + 274 + + + 14 + 275 + false + 275 + + + 14 + 276 + false + 276 + + + 14 + 277 + false + 277 + + + 14 + 278 + false + 278 + + + 14 + 24 + true + 278 + + + 14 + 25 + true + 278 + + + 14 + 279 + false + 279 + + + 14 + 280 + false + 280 + + + 14 + 281 + false + 281 + + + 14 + 283 + false + 283 + + + 14 + 284 + false + 284 + + + 14 + 26 + true + 283 + + + 14 + 289 + false + 289 + + + 14 + 290 + false + 290 + + + 14 + 291 + false + 291 + + + 14 + 292 + false + 292 + + + 14 + 294 + false + 294 + + + 14 + 295 + false + 295 + + + 14 + 296 + false + 296 + + + 14 + 299 + false + 299 + + + 14 + 300 + false + 300 + + + 14 + 301 + false + 301 + + + 14 + 302 + false + 302 + + + 14 + 303 + false + 303 + + + 14 + 304 + false + 304 + + + 14 + 305 + false + 305 + + + 14 + 306 + false + 306 + + + 14 + 307 + false + 307 + + + 14 + 308 + false + 308 + + + 14 + 309 + false + 309 + + + 14 + 310 + false + 310 + + + 14 + 311 + false + 311 + + + 14 + 311 + false + 311 + + + 14 + 311 + false + 311 + + + 14 + 33 + true + 311 + + + 14 + 312 + false + 312 + + + 14 + 314 + false + 314 + + + 14 + 28 + true + 314 + + + 14 + 29 + true + 314 + + + 14 + 315 + false + 315 + + + 14 + 30 + true + 314 + + + 14 + 316 + false + 316 + + + 14 + 317 + false + 317 + + + 14 + 318 + false + 318 + + + 14 + 319 + false + 319 + + + 14 + 320 + false + 320 + + + 14 + 321 + false + 321 + + + 14 + 31 + true + 314 + + + 14 + 311 + false + 311 + + + 14 + 328 + false + 322 + + + 14 + 32 + true + 311 + + + 14 + 330 + false + 330 + + + 14 + 331 + false + 331 + + + 14 + 333 + false + 333 + + + 14 + 27 + true + 283 + + + 14 + 334 + false + 334 + + + 14 + 334 + false + 334 + + + 14 + 337 + false + 337 + + + 14 + 338 + false + 338 + + + 14 + 339 + false + 339 + + + 14 + 341 + false + 340 + + + 14 + 344 + false + 343 + + + 14 + 346 + false + 346 + + + 14 + 347 + false + 347 + + + 14 + 347 + false + 347 + + + 14 + 347 + false + 347 + + + 14 + 9 + true + 347 + + + 14 + 348 + false + 348 + + + 14 + 349 + false + 349 + + + 14 + 350 + false + 350 + + + 14 + 352 + false + 352 + + + 14 + 354 + false + 354 + + + 14 + 355 + false + 355 + + + 14 + 0 + true + 354 + + + 14 + 356 + false + 356 + + + 14 + 1 + true + 354 + + + 14 + 357 + false + 357 + + + 14 + 2 + true + 356 + + + 14 + 358 + false + 358 + + + 14 + 3 + true + 356 + + + 14 + 359 + false + 359 + + + 14 + 4 + true + 358 + + + 14 + 360 + false + 360 + + + 14 + 5 + true + 358 + + + 14 + 361 + false + 361 + + + 14 + 6 + true + 360 + + + 14 + 362 + false + 362 + + + 14 + 7 + true + 360 + + + 14 + 347 + false + 347 + + + 14 + 8 + true + 347 + + + 14 + 364 + false + 364 + + + 14 + 364 + false + 364 + + + 14 + 364 + false + 364 + + + 14 + 33 + true + 364 + + + 14 + 365 + false + 365 + + + 14 + 366 + false + 366 + + + 14 + 368 + false + 368 + + + 14 + 368 + false + 368 + + + 14 + 368 + false + 368 + + + 14 + 11 + true + 368 + + + 14 + 369 + false + 369 + + + 14 + 370 + false + 370 + + + 14 + 371 + false + 371 + + + 14 + 368 + false + 368 + + + 14 + 10 + true + 368 + + + 14 + 373 + false + 373 + + + 14 + 373 + false + 373 + + + 14 + 373 + false + 373 + + + 14 + 13 + true + 373 + + + 14 + 374 + false + 374 + + + 14 + 375 + false + 375 + + + 14 + 376 + false + 376 + + + 14 + 373 + false + 373 + + + 14 + 12 + true + 373 + + + 14 + 378 + false + 378 + + + 14 + 380 + false + 380 + + + 14 + 381 + false + 381 + + + 14 + 382 + false + 382 + + + 14 + 14 + true + 381 + + + 14 + 384 + false + 384 + + + 14 + 15 + true + 381 + + + 14 + 384 + false + 384 + + + 14 + 384 + false + 384 + + + 14 + 27 + true + 384 + + + 14 + 385 + false + 385 + + + 14 + 386 + false + 386 + + + 14 + 387 + false + 387 + + + 14 + 16 + true + 386 + + + 14 + 388 + false + 388 + + + 14 + 389 + false + 389 + + + 14 + 18 + true + 388 + + + 14 + 391 + false + 391 + + + 14 + 392 + false + 392 + + + 14 + 394 + false + 394 + + + 14 + 19 + true + 388 + + + 14 + 396 + false + 396 + + + 14 + 397 + false + 397 + + + 14 + 397 + false + 397 + + + 14 + 397 + false + 397 + + + 14 + 21 + true + 397 + + + 14 + 398 + false + 398 + + + 14 + 397 + false + 397 + + + 14 + 20 + true + 397 + + + 14 + 400 + false + 400 + + + 14 + 401 + false + 401 + + + 14 + 402 + false + 402 + + + 14 + 17 + true + 386 + + + 14 + 403 + false + 403 + + + 14 + 404 + false + 404 + + + 14 + 22 + true + 403 + + + 14 + 405 + false + 405 + + + 14 + 406 + false + 406 + + + 14 + 407 + false + 407 + + + 14 + 23 + true + 403 + + + 14 + 408 + false + 408 + + + 14 + 24 + true + 407 + + + 14 + 409 + false + 409 + + + 14 + 410 + false + 410 + + + 14 + 412 + false + 412 + + + 14 + 25 + true + 407 + + + 14 + 413 + false + 413 + + + 14 + 384 + false + 384 + + + 14 + 26 + true + 384 + + + 14 + 415 + false + 415 + + + 14 + 415 + false + 415 + + + 14 + 415 + false + 415 + + + 14 + 31 + true + 415 + + + 14 + 416 + false + 416 + + + 14 + 417 + false + 417 + + + 14 + 418 + false + 418 + + + 14 + 28 + true + 417 + + + 14 + 419 + false + 419 + + + 14 + 420 + false + 420 + + + 14 + 422 + false + 422 + + + 14 + 29 + true + 417 + + + 14 + 423 + false + 423 + + + 14 + 415 + false + 415 + + + 14 + 30 + true + 415 + + + 14 + 425 + false + 425 + + + 14 + 426 + false + 426 + + + 14 + 364 + false + 364 + + + 14 + 32 + true + 364 + + + 14 + 428 + false + 428 + + + 14 + 429 + false + 429 + + + 14 + 431 + false + 431 + + + 14 + 432 + false + 432 + + + 14 + 433 + false + 433 + + + 14 + 436 + false + 436 + + + 14 + 438 + false + 438 + + + 14 + 439 + false + 439 + + + 14 + 440 + false + 440 + + + 14 + 0 + true + 439 + + + 14 + 441 + false + 441 + + + 14 + 445 + false + 445 + + + 14 + 1 + true + 439 + + + 14 + 445 + false + 445 + + + 14 + 445 + false + 445 + + + 14 + 9 + true + 445 + + + 14 + 446 + false + 446 + + + 14 + 449 + false + 449 + + + 14 + 450 + false + 450 + + + 14 + 2 + true + 449 + + + 14 + 454 + false + 454 + + + 14 + 455 + false + 455 + + + 14 + 4 + true + 454 + + + 14 + 456 + false + 456 + + + 14 + 457 + false + 457 + + + 14 + 6 + true + 456 + + + 14 + 458 + false + 458 + + + 14 + 460 + false + 460 + + + 14 + 7 + true + 456 + + + 14 + 461 + false + 461 + + + 14 + 5 + true + 454 + + + 14 + 462 + false + 462 + + + 14 + 3 + true + 449 + + + 14 + 445 + false + 445 + + + 14 + 8 + true + 445 + + + 14 + 463 + false + 463 + + + 14 + 464 + false + 464 + + + 14 + 467 + false + 467 + + + 14 + 468 + false + 468 + + + 14 + 472 + false + 472 + + + 14 + 473 + false + 473 + + + 14 + 473 + false + 473 + + + 14 + 31 + true + 473 + + + 14 + 473 + false + 473 + + + 14 + 474 + false + 474 + + + 14 + 475 + false + 475 + + + 14 + 476 + false + 476 + + + 14 + 477 + false + 477 + + + 14 + 478 + false + 478 + + + 14 + 0 + true + 477 + + + 14 + 2 + true + 478 + + + 14 + 3 + true + 478 + + + 14 + 480 + false + 480 + + + 14 + 1 + true + 477 + + + 14 + 4 + true + 480 + + + 14 + 5 + true + 480 + + + 14 + 481 + false + 481 + + + 14 + 6 + true + 480 + + + 14 + 482 + false + 482 + + + 14 + 8 + true + 482 + + + 14 + 9 + true + 482 + + + 14 + 483 + false + 483 + + + 14 + 10 + true + 482 + + + 14 + 484 + false + 484 + + + 14 + 488 + false + 487 + + + 14 + 11 + true + 482 + + + 14 + 489 + false + 489 + + + 14 + 12 + true + 489 + + + 14 + 13 + true + 489 + + + 14 + 490 + false + 490 + + + 14 + 14 + true + 489 + + + 14 + 491 + false + 491 + + + 14 + 15 + true + 489 + + + 14 + 493 + false + 493 + + + 14 + 7 + true + 480 + + + 14 + 495 + false + 495 + + + 14 + 496 + false + 496 + + + 14 + 16 + true + 495 + + + 14 + 497 + false + 497 + + + 14 + 500 + false + 500 + + + 14 + 17 + true + 495 + + + 14 + 501 + false + 501 + + + 14 + 18 + true + 500 + + + 14 + 502 + false + 502 + + + 14 + 505 + false + 505 + + + 14 + 19 + true + 500 + + + 14 + 20 + true + 505 + + + 14 + 21 + true + 505 + + + 14 + 506 + false + 506 + + + 14 + 22 + true + 505 + + + 14 + 507 + false + 507 + + + 14 + 510 + false + 510 + + + 14 + 23 + true + 505 + + + 14 + 511 + false + 511 + + + 14 + 24 + true + 510 + + + 14 + 512 + false + 512 + + + 14 + 513 + false + 513 + + + 14 + 515 + false + 515 + + + 14 + 25 + true + 510 + + + 14 + 516 + false + 516 + + + 14 + 26 + true + 516 + + + 14 + 27 + true + 516 + + + 14 + 517 + false + 517 + + + 14 + 28 + true + 517 + + + 14 + 29 + true + 517 + + + 14 + 518 + false + 518 + + + 14 + 519 + false + 519 + + + 14 + 473 + false + 473 + + + 14 + 30 + true + 473 + + + 14 + 521 + false + 521 + + + 14 + 522 + false + 522 + + + 14 + 522 + false + 522 + + + 14 + 522 + false + 522 + + + 14 + 35 + true + 522 + + + 14 + 523 + false + 523 + + + 14 + 524 + false + 524 + + + 14 + 525 + false + 525 + + + 14 + 32 + true + 524 + + + 14 + 526 + false + 526 + + + 14 + 527 + false + 527 + + + 14 + 528 + false + 528 + + + 14 + 33 + true + 524 + + + 14 + 522 + false + 522 + + + 14 + 34 + true + 522 + + + 14 + 529 + false + 529 + + + 14 + 532 + false + 532 + + + 14 + 533 + false + 533 + + + 14 + 535 + false + 535 + + + 14 + 535 + false + 535 + + + 14 + 537 + false + 537 + + + 14 + 1 + true + 535 + + + 14 + 2 + true + 537 + + + 14 + 3 + true + 537 + + + 14 + 538 + false + 538 + + + 14 + 4 + true + 537 + + + 14 + 539 + false + 539 + + + 14 + 6 + true + 539 + + + 14 + 7 + true + 539 + + + 14 + 540 + false + 540 + + + 14 + 8 + true + 539 + + + 14 + 541 + false + 541 + + + 14 + 542 + false + 542 + + + 14 + 543 + false + 543 + + + 14 + 546 + false + 546 + + + 14 + 5 + true + 537 + + + 14 + 547 + false + 547 + + + 14 + 548 + false + 548 + + + 14 + 550 + false + 550 + + + 14 + 11 + true + 547 + + + 14 + 551 + false + 551 + + + 14 + 553 + false + 553 + + + 14 + 13 + true + 550 + + + 14 + 554 + false + 554 + + + 14 + 0 + true + 535 + + + 14 + 9 + true + 539 + + + 14 + 10 + true + 547 + + + 14 + 12 + true + 550 + + + 14 + 568 + false + 568 + + + 14 + 569 + false + 569 + + + 14 + 570 + false + 570 + + + 14 + 571 + false + 571 + + + 14 + 572 + false + 572 + + + 14 + 573 + false + 573 + + + 14 + 574 + false + 574 + + + 14 + 575 + false + 575 + + + 14 + 576 + false + 576 + + + 14 + 577 + false + 577 + + + 14 + 27 + true + 577 + + + 14 + 578 + false + 578 + + + 14 + 579 + false + 579 + + + 14 + 580 + false + 580 + + + 14 + 581 + false + 581 + + + 14 + 584 + false + 584 + + + 14 + 586 + false + 586 + + + 14 + 3 + true + 585 + + + 14 + 587 + false + 587 + + + 14 + 588 + false + 588 + + + 14 + 585 + false + 585 + + + 14 + 0 + true + 585 + + + 14 + 1 + true + 585 + + + 14 + 591 + false + 591 + + + 14 + 2 + true + 585 + + + 14 + 592 + false + 592 + + + 14 + 593 + false + 593 + + + 14 + 4 + true + 592 + + + 14 + 594 + false + 594 + + + 14 + 595 + false + 595 + + + 14 + 6 + true + 595 + + + 14 + 7 + true + 595 + + + 14 + 596 + false + 596 + + + 14 + 599 + false + 599 + + + 14 + 5 + true + 592 + + + 14 + 8 + true + 599 + + + 14 + 9 + true + 599 + + + 14 + 600 + false + 600 + + + 14 + 10 + true + 599 + + + 14 + 601 + false + 601 + + + 14 + 602 + false + 602 + + + 14 + 605 + false + 605 + + + 14 + 11 + true + 599 + + + 14 + 12 + true + 605 + + + 14 + 13 + true + 605 + + + 14 + 606 + false + 606 + + + 14 + 14 + true + 605 + + + 14 + 607 + false + 607 + + + 14 + 608 + false + 608 + + + 14 + 16 + true + 607 + + + 14 + 609 + false + 609 + + + 14 + 610 + false + 610 + + + 14 + 613 + false + 613 + + + 14 + 17 + true + 607 + + + 14 + 614 + false + 614 + + + 14 + 616 + false + 616 + + + 14 + 617 + false + 617 + + + 14 + 619 + false + 619 + + + 14 + 15 + true + 605 + + + 14 + 619 + false + 619 + + + 14 + 619 + false + 619 + + + 14 + 25 + true + 619 + + + 14 + 620 + false + 620 + + + 14 + 627 + false + 627 + + + 14 + 18 + true + 627 + + + 14 + 19 + true + 627 + + + 14 + 628 + false + 628 + + + 14 + 630 + false + 630 + + + 14 + 21 + true + 627 + + + 14 + 631 + false + 631 + + + 14 + 632 + false + 632 + + + 14 + 22 + true + 631 + + + 14 + 634 + false + 634 + + + 14 + 23 + true + 631 + + + 14 + 635 + false + 635 + + + 14 + 619 + false + 619 + + + 14 + 20 + true + 627 + + + 14 + 24 + true + 619 + + + 14 + 637 + false + 637 + + + 14 + 638 + false + 638 + + + 14 + 577 + false + 577 + + + 14 + 577 + false + 577 + + + 14 + 640 + false + 640 + + + 14 + 26 + true + 577 + + + 14 + 640 + false + 640 + + + 14 + 640 + false + 640 + + + 14 + 29 + true + 640 + + + 14 + 641 + false + 641 + + + 14 + 640 + false + 640 + + + 14 + 28 + true + 640 + + + 14 + 643 + false + 643 + + + 14 + 643 + false + 643 + + + 14 + 643 + false + 643 + + + 14 + 31 + true + 643 + + + 14 + 644 + false + 644 + + + 14 + 643 + false + 643 + + + 14 + 30 + true + 643 + + + 14 + 646 + false + 646 + + + 14 + 647 + false + 647 + + + 14 + 650 + false + 650 + + + 14 + 651 + false + 651 + + + 14 + 652 + false + 652 + + + 14 + 0 + true + 651 + + + 14 + 653 + false + 653 + + + 14 + 654 + false + 654 + + + 14 + 655 + false + 655 + + + 14 + 656 + false + 656 + + + 14 + 658 + false + 658 + + + 14 + 1 + true + 651 + + + 14 + 659 + false + 659 + + + 14 + 5 + true + 658 + + + 14 + 660 + false + 660 + + + 14 + 661 + false + 661 + + + 14 + 2 + true + 660 + + + 14 + 662 + false + 662 + + + 14 + 3 + true + 660 + + + 14 + 658 + false + 658 + + + 14 + 658 + false + 658 + + + 14 + 664 + false + 664 + + + 14 + 4 + true + 658 + + + 14 + 666 + false + 666 + + + 14 + 667 + false + 667 + + + 14 + 670 + false + 670 + + + 14 + 671 + false + 671 + + + 14 + 672 + false + 672 + + + 14 + 0 + true + 671 + + + 14 + 673 + false + 673 + + + 14 + 674 + false + 674 + + + 14 + 675 + false + 675 + + + 14 + 676 + false + 676 + + + 14 + 678 + false + 678 + + + 14 + 1 + true + 671 + + + 14 + 679 + false + 679 + + + 14 + 680 + false + 680 + + + 14 + 2 + true + 679 + + + 14 + 693 + false + 681 + + + 14 + 695 + false + 695 + + + 14 + 696 + false + 696 + + + 14 + 4 + true + 695 + + + 14 + 697 + false + 697 + + + 14 + 698 + false + 698 + + + 14 + 6 + true + 697 + + + 14 + 699 + false + 699 + + + 14 + 700 + false + 700 + + + 14 + 702 + false + 702 + + + 14 + 7 + true + 697 + + + 14 + 703 + false + 703 + + + 14 + 8 + true + 702 + + + 14 + 704 + false + 704 + + + 14 + 705 + false + 705 + + + 14 + 706 + false + 706 + + + 14 + 9 + true + 702 + + + 14 + 707 + false + 707 + + + 14 + 5 + true + 695 + + + 14 + 709 + false + 709 + + + 14 + 3 + true + 679 + + + 14 + 711 + false + 711 + + + 14 + 712 + false + 712 + + + 14 + 715 + false + 715 + + + 14 + 716 + false + 716 + + + 14 + 717 + false + 717 + + + 14 + 0 + true + 716 + + + 14 + 719 + false + 719 + + + 14 + 720 + false + 720 + + + 14 + 2 + true + 719 + + + 14 + 723 + false + 721 + + + 14 + 4 + true + 721 + + + 14 + 5 + true + 721 + + + 14 + 724 + false + 724 + + + 14 + 726 + false + 726 + + + 14 + 3 + true + 719 + + + 14 + 729 + false + 727 + + + 14 + 6 + true + 727 + + + 14 + 7 + true + 727 + + + 14 + 730 + false + 730 + + + 14 + 733 + false + 732 + + + 14 + 734 + false + 734 + + + 14 + 735 + false + 735 + + + 14 + 737 + false + 737 + + + 14 + 1 + true + 716 + + + 14 + 738 + false + 738 + + + 14 + 740 + false + 740 + + + 14 + 741 + false + 741 + + + 14 + 743 + false + 743 + + + 14 + 744 + false + 744 + + + 14 + 747 + false + 747 + + + 14 + 748 + false + 748 + + + 14 + 749 + false + 749 + + + 14 + 0 + true + 748 + + + 14 + 750 + false + 750 + + + 14 + 751 + false + 751 + + + 14 + 2 + true + 750 + + + 14 + 752 + false + 752 + + + 14 + 753 + false + 753 + + + 14 + 754 + false + 754 + + + 14 + 3 + true + 750 + + + 14 + 755 + false + 755 + + + 14 + 1 + true + 748 + + + 14 + 756 + false + 756 + + + 14 + 4 + true + 755 + + + 14 + 757 + false + 757 + + + 14 + 758 + false + 758 + + + 14 + 9 + true + 757 + + + 14 + 759 + false + 759 + + + 14 + 760 + false + 760 + + + 14 + 6 + true + 759 + + + 14 + 761 + false + 761 + + + 14 + 7 + true + 759 + + + 14 + 757 + false + 757 + + + 14 + 757 + false + 757 + + + 14 + 762 + false + 762 + + + 14 + 8 + true + 757 + + + 14 + 763 + false + 763 + + + 14 + 5 + true + 755 + + + 14 + 766 + false + 766 + + + 14 + 767 + false + 767 + + + 14 + 0 + true + 767 + + + 14 + 1 + true + 767 + + + 14 + 768 + false + 768 + + + 14 + 2 + true + 767 + + + 14 + 770 + false + 770 + + + 14 + 3 + true + 767 + + + 14 + 4 + true + 770 + + + 14 + 5 + true + 770 + + + 14 + 771 + false + 771 + + + 14 + 6 + true + 770 + + + 14 + 773 + false + 773 + + + 14 + 7 + true + 770 + + + 14 + 8 + true + 773 + + + 14 + 9 + true + 773 + + + 14 + 774 + false + 774 + + + 14 + 10 + true + 773 + + + 14 + 776 + false + 776 + + + 14 + 11 + true + 773 + + + 14 + 12 + true + 776 + + + 14 + 13 + true + 776 + + + 14 + 777 + false + 777 + + + 14 + 14 + true + 776 + + + 14 + 779 + false + 779 + + + 14 + 15 + true + 776 + + + 14 + 16 + true + 779 + + + 14 + 17 + true + 779 + + + 14 + 780 + false + 780 + + + 14 + 18 + true + 779 + + + 14 + 781 + false + 781 + + + 14 + 19 + true + 779 + + + 14 + 784 + false + 784 + + + 14 + 785 + false + 785 + + + 14 + 786 + false + 786 + + + 14 + 789 + false + 789 + + + 14 + 791 + false + 791 + + + 14 + 792 + false + 792 + + + 14 + 0 + true + 792 + + + 14 + 1 + true + 792 + + + 14 + 794 + false + 794 + + + 14 + 795 + false + 795 + + + 14 + 796 + false + 796 + + + 14 + 798 + false + 798 + + + 14 + 802 + false + 802 + + + 14 + 803 + false + 803 + + + 14 + 804 + false + 804 + + + 14 + 0 + true + 803 + + + 14 + 805 + false + 805 + + + 14 + 808 + false + 808 + + + 14 + 1 + true + 803 + + + 14 + 812 + false + 812 + + + 14 + 15 + true + 811 + + + 14 + 816 + false + 815 + + + 14 + 2 + true + 815 + + + 14 + 4 + true + 815 + + + 14 + 5 + true + 815 + + + 14 + 3 + true + 815 + + + 14 + 817 + false + 817 + + + 14 + 6 + true + 815 + + + 14 + 818 + false + 818 + + + 14 + 822 + false + 822 + + + 14 + 7 + true + 815 + + + 14 + 822 + false + 822 + + + 14 + 822 + false + 822 + + + 14 + 13 + true + 822 + + + 14 + 823 + false + 823 + + + 14 + 828 + false + 827 + + + 14 + 8 + true + 827 + + + 14 + 9 + true + 827 + + + 14 + 829 + false + 829 + + + 14 + 10 + true + 827 + + + 14 + 830 + false + 830 + + + 14 + 832 + false + 832 + + + 14 + 11 + true + 827 + + + 14 + 822 + false + 822 + + + 14 + 12 + true + 822 + + + 14 + 833 + false + 833 + + + 14 + 834 + false + 834 + + + 14 + 811 + false + 811 + + + 14 + 836 + false + 836 + + + 14 + 14 + true + 811 + + + 14 + 837 + false + 837 + + + 14 + 843 + false + 843 + + + 14 + 852 + false + 844 + + + 14 + 0 + true + 844 + + + 14 + 2 + true + 844 + + + 14 + 4 + true + 844 + + + 14 + 6 + true + 844 + + + 14 + 7 + true + 844 + + + 14 + 1 + true + 844 + + + 14 + 3 + true + 844 + + + 14 + 5 + true + 844 + + + 14 + 853 + false + 853 + + + 14 + 533 + false + 533 + + + 14 + 65 + false + 57 + + + 14 + 66 + false + 66 + + + 14 + 67 + false + 67 + + + 14 + 68 + false + 68 + + + 14 + 69 + false + 69 + + + 14 + 70 + false + 70 + + + 14 + 71 + false + 71 + + + 14 + 72 + false + 72 + + + 14 + 73 + false + 73 + + + 14 + 74 + false + 74 + + + 14 + 75 + false + 75 + + + 14 + 76 + false + 76 + + + 14 + 77 + false + 77 + + + 14 + 78 + false + 78 + + + 14 + 79 + false + 79 + + + 14 + 80 + false + 80 + + + 14 + 876 + false + 876 + + + 14 + 877 + false + 877 + + + 14 + 878 + false + 878 + + + 14 + 892 + false + 892 + + + 14 + 893 + false + 893 + + + 14 + 894 + false + 894 + + + 14 + 897 + false + 897 + + + 14 + 898 + false + 898 + + + 14 + 899 + false + 899 + + + 14 + 900 + false + 900 + + + 14 + 901 + false + 901 + + + 14 + 904 + false + 904 + + + 14 + 905 + false + 905 + + + 14 + 906 + false + 906 + + + 14 + 907 + false + 907 + + + 14 + 908 + false + 908 + + + 14 + 911 + false + 911 + + + 14 + 912 + false + 912 + + + 14 + 913 + false + 913 + + + 14 + 915 + false + 915 + + + 14 + 915 + false + 915 + + + 14 + 915 + false + 915 + + + 14 + 3 + true + 915 + + + 14 + 916 + false + 916 + + + 14 + 917 + false + 917 + + + 14 + 918 + false + 918 + + + 14 + 0 + true + 917 + + + 14 + 919 + false + 919 + + + 14 + 922 + false + 922 + + + 14 + 1 + true + 917 + + + 14 + 923 + false + 923 + + + 14 + 915 + false + 915 + + + 14 + 2 + true + 915 + + + 14 + 925 + false + 925 + + + 14 + 926 + false + 926 + + + 14 + 4 + true + 925 + + + 14 + 927 + false + 927 + + + 14 + 928 + false + 928 + + + 14 + 930 + false + 930 + + + 14 + 5 + true + 925 + + + 14 + 931 + false + 931 + + + 14 + 885 + false + 885 + + + 14 + 886 + false + 886 + + + 14 + 887 + false + 887 + + + 14 + 888 + false + 888 + + + 14 + 889 + false + 889 + + + 14 + 97 + false + 97 + + + 14 + 0 + true + 97 + + + 14 + 1 + true + 97 + + + 14 + 231 + false + 231 + + + 14 + 449 + false + 449 + + + 14 + 482 + false + 482 + + + 14 + 695 + false + 695 + + + 14 + 405 + false + 405 + + + 14 + 478 + false + 478 + + + 14 + 488 + false + 487 + + + 14 + 0 + true + 487 + + + 14 + 1 + true + 487 + + + 14 + 2 + true + 487 + + + 14 + 4 + true + 487 + + + 14 + 5 + true + 487 + + + 14 + 3 + true + 487 + + + 14 + 581 + false + 581 + + + 14 + 816 + false + 816 + + + 14 + 856 + false + 856 + + + 14 + 857 + false + 857 + + + 14 + 857 + false + 857 + + + 14 + 0 + true + 857 + + + 14 + 859 + false + 859 + + + 14 + 1 + true + 857 + + + 14 + 859 + false + 859 + + + 14 + 859 + false + 859 + + + 14 + 9 + true + 859 + + + 14 + 860 + false + 860 + + + 14 + 861 + false + 861 + + + 14 + 2 + true + 861 + + + 14 + 4 + true + 861 + + + 14 + 3 + true + 861 + + + 14 + 5 + true + 861 + + + 14 + 862 + false + 862 + + + 14 + 6 + true + 861 + + + 14 + 863 + false + 863 + + + 14 + 864 + false + 864 + + + 14 + 865 + false + 865 + + + 14 + 7 + true + 861 + + + 14 + 859 + false + 859 + + + 14 + 8 + true + 859 + + + 14 + 866 + false + 866 + + + 14 + 958 + false + 958 + + + 14 + 959 + false + 959 + + + 14 + 0 + true + 959 + + + 14 + 1 + true + 959 + + + 14 + 960 + false + 960 + + + 14 + 2 + true + 959 + + + 14 + 963 + false + 963 + + + 14 + 3 + true + 959 + + + 14 + 4 + true + 963 + + + 14 + 5 + true + 963 + + + 14 + 964 + false + 964 + + + 14 + 941 + false + 941 + + + 14 + 942 + false + 942 + + + 14 + 943 + false + 943 + + + 14 + 0 + true + 943 + + + 14 + 1 + true + 943 + + + 14 + 944 + false + 944 + + + 14 + 2 + true + 943 + + + 14 + 945 + false + 945 + + + 14 + 946 + false + 946 + + + 14 + 946 + false + 946 + + + 14 + 946 + false + 946 + + + 14 + 9 + true + 946 + + + 14 + 947 + false + 947 + + + 14 + 948 + false + 948 + + + 14 + 949 + false + 949 + + + 14 + 4 + true + 948 + + + 14 + 950 + false + 950 + + + 14 + 952 + false + 952 + + + 14 + 5 + true + 948 + + + 14 + 6 + true + 952 + + + 14 + 7 + true + 952 + + + 14 + 953 + false + 953 + + + 14 + 946 + false + 946 + + + 14 + 954 + false + 954 + + + 14 + 8 + true + 946 + + + 14 + 955 + false + 955 + + + 14 + 3 + true + 943 + + + 15 + 48 + false + 48 + + + 15 + 48 + false + 48 + + + 15 + 50 + false + 50 + + + 15 + 50 + false + 50 + + + 15 + 52 + false + 52 + + + 15 + 54 + false + 54 + + + 15 + 0 + true + 54 + + + 15 + 2 + true + 54 + + + 15 + 1 + true + 54 + + + 15 + 3 + true + 54 + + + 15 + 57 + false + 57 + + + 15 + 58 + false + 58 + + + 15 + 59 + false + 59 + + + 15 + 45 + false + 45 + + + 15 + 45 + false + 45 + + + 15 + 76 + false + 76 + + + 15 + 76 + false + 76 + + + 15 + 78 + false + 78 + + + 15 + 78 + false + 78 + + + 15 + 65 + false + 65 + + + 15 + 66 + false + 66 + + + 15 + 67 + false + 67 + + + 15 + 68 + false + 68 + + + 15 + 69 + false + 69 + + + 15 + 89 + false + 89 + + + 15 + 89 + false + 89 + + + 15 + 91 + false + 91 + + + 15 + 91 + false + 91 + + + 15 + 93 + false + 93 + + + 15 + 93 + false + 93 + + + 15 + 95 + false + 95 + + + 15 + 95 + false + 95 + + + 15 + 96 + false + 96 + + + 15 + 96 + false + 96 + + + 15 + 86 + false + 86 + + + 15 + 86 + false + 86 + + + 15 + 119 + false + 119 + + + 15 + 119 + false + 119 + + + 15 + 121 + false + 121 + + + 15 + 121 + false + 121 + + + 15 + 102 + false + 102 + + + 15 + 103 + false + 103 + + + 15 + 104 + false + 104 + + + 15 + 105 + false + 105 + + + 15 + 106 + false + 106 + + + 16 + 252 + false + 252 + + + 16 + 253 + false + 253 + + + 16 + 254 + false + 254 + + + 16 + 0 + true + 253 + + + 16 + 255 + false + 255 + + + 16 + 258 + false + 258 + + + 16 + 1 + true + 253 + + + 16 + 259 + false + 259 + + + 16 + 260 + false + 260 + + + 16 + 260 + false + 260 + + + 16 + 260 + false + 260 + + + 16 + 25 + true + 260 + + + 16 + 261 + false + 261 + + + 16 + 262 + false + 262 + + + 16 + 262 + false + 262 + + + 16 + 262 + false + 262 + + + 16 + 23 + true + 262 + + + 16 + 263 + false + 263 + + + 16 + 264 + false + 264 + + + 16 + 265 + false + 265 + + + 16 + 2 + true + 264 + + + 16 + 266 + false + 266 + + + 16 + 3 + true + 264 + + + 16 + 271 + false + 271 + + + 16 + 272 + false + 272 + + + 16 + 273 + false + 273 + + + 16 + 4 + true + 272 + + + 16 + 274 + false + 274 + + + 16 + 277 + false + 277 + + + 16 + 5 + true + 272 + + + 16 + 278 + false + 278 + + + 16 + 279 + false + 279 + + + 16 + 280 + false + 280 + + + 16 + 281 + false + 281 + + + 16 + 284 + false + 284 + + + 16 + 284 + false + 284 + + + 16 + 284 + false + 284 + + + 16 + 21 + true + 284 + + + 16 + 285 + false + 285 + + + 16 + 286 + false + 286 + + + 16 + 287 + false + 287 + + + 16 + 6 + true + 286 + + + 16 + 288 + false + 288 + + + 16 + 291 + false + 291 + + + 16 + 7 + true + 286 + + + 16 + 292 + false + 292 + + + 16 + 293 + false + 293 + + + 16 + 8 + true + 292 + + + 16 + 294 + false + 294 + + + 16 + 297 + false + 297 + + + 16 + 9 + true + 292 + + + 16 + 301 + false + 301 + + + 16 + 302 + false + 302 + + + 16 + 303 + false + 303 + + + 16 + 304 + false + 304 + + + 16 + 305 + false + 305 + + + 16 + 306 + false + 306 + + + 16 + 307 + false + 307 + + + 16 + 308 + false + 308 + + + 16 + 310 + false + 310 + + + 16 + 311 + false + 311 + + + 16 + 10 + true + 310 + + + 16 + 312 + false + 312 + + + 16 + 315 + false + 315 + + + 16 + 11 + true + 310 + + + 16 + 316 + false + 316 + + + 16 + 12 + true + 315 + + + 16 + 317 + false + 317 + + + 16 + 320 + false + 320 + + + 16 + 13 + true + 315 + + + 16 + 321 + false + 321 + + + 16 + 321 + false + 321 + + + 16 + 321 + false + 321 + + + 16 + 17 + true + 321 + + + 16 + 322 + false + 322 + + + 16 + 323 + false + 323 + + + 16 + 324 + false + 324 + + + 16 + 14 + true + 323 + + + 16 + 325 + false + 325 + + + 16 + 326 + false + 326 + + + 16 + 328 + false + 328 + + + 16 + 15 + true + 323 + + + 16 + 321 + false + 321 + + + 16 + 16 + true + 321 + + + 16 + 330 + false + 330 + + + 16 + 331 + false + 331 + + + 16 + 18 + true + 330 + + + 16 + 332 + false + 332 + + + 16 + 333 + false + 333 + + + 16 + 334 + false + 334 + + + 16 + 335 + false + 335 + + + 16 + 19 + true + 330 + + + 16 + 284 + false + 284 + + + 16 + 20 + true + 284 + + + 16 + 336 + false + 336 + + + 16 + 262 + false + 262 + + + 16 + 22 + true + 262 + + + 16 + 337 + false + 337 + + + 16 + 260 + false + 260 + + + 16 + 24 + true + 260 + + + 16 + 339 + false + 339 + + + 16 + 341 + false + 341 + + + 16 + 342 + false + 342 + + + 16 + 367 + false + 367 + + + 16 + 369 + false + 369 + + + 16 + 370 + false + 370 + + + 16 + 0 + true + 369 + + + 16 + 371 + false + 371 + + + 16 + 375 + false + 375 + + + 16 + 1 + true + 369 + + + 16 + 376 + false + 376 + + + 16 + 2 + true + 375 + + + 16 + 377 + false + 377 + + + 16 + 380 + false + 380 + + + 16 + 3 + true + 375 + + + 16 + 383 + false + 383 + + + 16 + 384 + false + 384 + + + 16 + 4 + true + 383 + + + 16 + 385 + false + 385 + + + 16 + 388 + false + 388 + + + 16 + 5 + true + 383 + + + 16 + 390 + false + 390 + + + 16 + 392 + false + 392 + + + 16 + 393 + false + 393 + + + 16 + 394 + false + 394 + + + 16 + 401 + false + 401 + + + 16 + 402 + false + 402 + + + 16 + 404 + false + 404 + + + 16 + 405 + false + 405 + + + 16 + 405 + false + 405 + + + 16 + 405 + false + 405 + + + 16 + 7 + true + 405 + + + 16 + 406 + false + 406 + + + 16 + 407 + false + 407 + + + 16 + 0 + true + 407 + + + 16 + 1 + true + 407 + + + 16 + 409 + false + 409 + + + 16 + 410 + false + 410 + + + 16 + 2 + true + 409 + + + 16 + 411 + false + 411 + + + 16 + 413 + false + 413 + + + 16 + 414 + false + 414 + + + 16 + 4 + true + 413 + + + 16 + 415 + false + 415 + + + 16 + 416 + false + 416 + + + 16 + 418 + false + 418 + + + 16 + 5 + true + 413 + + + 16 + 419 + false + 419 + + + 16 + 420 + false + 420 + + + 16 + 421 + false + 421 + + + 16 + 422 + false + 422 + + + 16 + 3 + true + 409 + + + 16 + 405 + false + 405 + + + 16 + 6 + true + 405 + + + 16 + 424 + false + 424 + + + 16 + 425 + false + 425 + + + 16 + 431 + false + 431 + + + 16 + 435 + false + 435 + + + 16 + 436 + false + 436 + + + 16 + 0 + true + 435 + + + 16 + 438 + false + 438 + + + 16 + 440 + false + 440 + + + 16 + 441 + false + 441 + + + 16 + 441 + false + 441 + + + 16 + 441 + false + 441 + + + 16 + 5 + true + 441 + + + 16 + 442 + false + 442 + + + 16 + 444 + false + 444 + + + 16 + 445 + false + 445 + + + 16 + 2 + true + 444 + + + 16 + 446 + false + 446 + + + 16 + 449 + false + 449 + + + 16 + 3 + true + 444 + + + 16 + 450 + false + 450 + + + 16 + 441 + false + 441 + + + 16 + 451 + false + 451 + + + 16 + 4 + true + 441 + + + 16 + 452 + false + 452 + + + 16 + 1 + true + 435 + + + 16 + 453 + false + 453 + + + 16 + 6 + true + 452 + + + 16 + 456 + false + 456 + + + 16 + 457 + false + 457 + + + 16 + 8 + true + 456 + + + 16 + 458 + false + 458 + + + 16 + 459 + false + 459 + + + 16 + 460 + false + 460 + + + 16 + 462 + false + 462 + + + 16 + 9 + true + 456 + + + 16 + 463 + false + 463 + + + 16 + 464 + false + 464 + + + 16 + 465 + false + 465 + + + 16 + 466 + false + 466 + + + 16 + 467 + false + 467 + + + 16 + 7 + true + 452 + + + 16 + 468 + false + 468 + + + 16 + 10 + true + 467 + + + 16 + 472 + false + 472 + + + 16 + 473 + false + 473 + + + 16 + 473 + false + 473 + + + 16 + 473 + false + 473 + + + 16 + 23 + true + 473 + + + 16 + 474 + false + 474 + + + 16 + 475 + false + 475 + + + 16 + 476 + false + 476 + + + 16 + 12 + true + 475 + + + 16 + 477 + false + 477 + + + 16 + 480 + false + 480 + + + 16 + 13 + true + 475 + + + 16 + 481 + false + 481 + + + 16 + 483 + false + 483 + + + 16 + 17 + true + 482 + + + 16 + 484 + false + 484 + + + 16 + 485 + false + 485 + + + 16 + 482 + false + 482 + + + 16 + 14 + true + 482 + + + 16 + 15 + true + 482 + + + 16 + 487 + false + 487 + + + 16 + 16 + true + 482 + + + 16 + 18 + true + 487 + + + 16 + 19 + true + 487 + + + 16 + 488 + false + 488 + + + 16 + 20 + true + 487 + + + 16 + 489 + false + 489 + + + 16 + 490 + false + 490 + + + 16 + 492 + false + 492 + + + 16 + 21 + true + 487 + + + 16 + 473 + false + 473 + + + 16 + 22 + true + 473 + + + 16 + 494 + false + 494 + + + 16 + 495 + false + 495 + + + 16 + 24 + true + 494 + + + 16 + 496 + false + 496 + + + 16 + 504 + false + 504 + + + 16 + 25 + true + 494 + + + 16 + 505 + false + 505 + + + 16 + 506 + false + 506 + + + 16 + 507 + false + 507 + + + 16 + 11 + true + 467 + + + 16 + 508 + false + 508 + + + 16 + 26 + true + 507 + + + 16 + 516 + false + 516 + + + 16 + 517 + false + 517 + + + 16 + 518 + false + 518 + + + 16 + 520 + false + 520 + + + 16 + 27 + true + 507 + + + 16 + 521 + false + 521 + + + 16 + 524 + false + 524 + + + 16 + 525 + false + 525 + + + 16 + 531 + false + 531 + + + 16 + 532 + false + 532 + + + 16 + 534 + false + 534 + + + 16 + 536 + false + 536 + + + 16 + 537 + false + 537 + + + 16 + 7 + true + 536 + + + 16 + 538 + false + 538 + + + 16 + 541 + false + 541 + + + 16 + 542 + false + 542 + + + 16 + 0 + true + 541 + + + 16 + 543 + false + 543 + + + 16 + 544 + false + 544 + + + 16 + 546 + false + 546 + + + 16 + 1 + true + 541 + + + 16 + 547 + false + 547 + + + 16 + 548 + false + 548 + + + 16 + 550 + false + 550 + + + 16 + 551 + false + 551 + + + 16 + 2 + true + 550 + + + 16 + 552 + false + 552 + + + 16 + 553 + false + 553 + + + 16 + 4 + true + 552 + + + 16 + 555 + false + 555 + + + 16 + 559 + false + 559 + + + 16 + 5 + true + 552 + + + 16 + 563 + false + 563 + + + 16 + 565 + false + 565 + + + 16 + 566 + false + 566 + + + 16 + 568 + false + 568 + + + 16 + 3 + true + 550 + + + 16 + 570 + false + 570 + + + 16 + 571 + false + 571 + + + 16 + 572 + false + 572 + + + 16 + 536 + false + 536 + + + 16 + 536 + false + 536 + + + 16 + 574 + false + 574 + + + 16 + 6 + true + 536 + + + 16 + 575 + false + 575 + + + 16 + 584 + false + 584 + + + 16 + 585 + false + 585 + + + 16 + 587 + false + 587 + + + 16 + 589 + false + 589 + + + 16 + 592 + false + 592 + + + 16 + 9 + true + 591 + + + 16 + 593 + false + 593 + + + 16 + 595 + false + 595 + + + 16 + 596 + false + 596 + + + 16 + 0 + true + 595 + + + 16 + 598 + false + 598 + + + 16 + 602 + false + 602 + + + 16 + 1 + true + 595 + + + 16 + 604 + false + 604 + + + 16 + 605 + false + 605 + + + 16 + 2 + true + 604 + + + 16 + 607 + false + 607 + + + 16 + 607 + false + 607 + + + 16 + 607 + false + 607 + + + 16 + 5 + true + 607 + + + 16 + 608 + false + 608 + + + 16 + 609 + false + 609 + + + 16 + 610 + false + 610 + + + 16 + 611 + false + 611 + + + 16 + 607 + false + 607 + + + 16 + 612 + false + 612 + + + 16 + 4 + true + 607 + + + 16 + 616 + false + 616 + + + 16 + 3 + true + 604 + + + 16 + 616 + false + 616 + + + 16 + 616 + false + 616 + + + 16 + 7 + true + 616 + + + 16 + 617 + false + 617 + + + 16 + 618 + false + 618 + + + 16 + 619 + false + 619 + + + 16 + 620 + false + 620 + + + 16 + 616 + false + 616 + + + 16 + 621 + false + 621 + + + 16 + 6 + true + 616 + + + 16 + 591 + false + 591 + + + 16 + 622 + false + 622 + + + 16 + 8 + true + 591 + + + 16 + 633 + false + 633 + + + 16 + 635 + false + 635 + + + 16 + 636 + false + 636 + + + 16 + 639 + false + 639 + + + 16 + 640 + false + 640 + + + 16 + 640 + false + 640 + + + 16 + 640 + false + 640 + + + 16 + 5 + true + 640 + + + 16 + 641 + false + 641 + + + 16 + 642 + false + 642 + + + 16 + 643 + false + 643 + + + 16 + 0 + true + 642 + + + 16 + 644 + false + 644 + + + 16 + 644 + false + 644 + + + 16 + 644 + false + 644 + + + 16 + 3 + true + 644 + + + 16 + 645 + false + 645 + + + 16 + 646 + false + 646 + + + 16 + 647 + false + 647 + + + 16 + 644 + false + 644 + + + 16 + 648 + false + 648 + + + 16 + 2 + true + 644 + + + 16 + 650 + false + 650 + + + 16 + 1 + true + 642 + + + 16 + 651 + false + 651 + + + 16 + 652 + false + 652 + + + 16 + 653 + false + 653 + + + 16 + 640 + false + 640 + + + 16 + 657 + false + 657 + + + 16 + 4 + true + 640 + + + 16 + 657 + false + 657 + + + 16 + 657 + false + 657 + + + 16 + 9 + true + 657 + + + 16 + 658 + false + 658 + + + 16 + 659 + false + 659 + + + 16 + 660 + false + 660 + + + 16 + 6 + true + 659 + + + 16 + 661 + false + 661 + + + 16 + 662 + false + 662 + + + 16 + 664 + false + 664 + + + 16 + 7 + true + 659 + + + 16 + 665 + false + 665 + + + 16 + 666 + false + 666 + + + 16 + 667 + false + 667 + + + 16 + 657 + false + 657 + + + 16 + 8 + true + 657 + + + 16 + 669 + false + 669 + + + 16 + 672 + false + 672 + + + 16 + 674 + false + 674 + + + 16 + 675 + false + 675 + + + 16 + 676 + false + 676 + + + 16 + 677 + false + 677 + + + 16 + 677 + false + 677 + + + 16 + 677 + false + 677 + + + 16 + 41 + true + 677 + + + 16 + 678 + false + 678 + + + 16 + 679 + false + 679 + + + 16 + 680 + false + 680 + + + 16 + 682 + false + 682 + + + 16 + 683 + false + 683 + + + 16 + 10 + true + 682 + + + 16 + 684 + false + 684 + + + 16 + 685 + false + 685 + + + 16 + 686 + false + 686 + + + 16 + 688 + false + 688 + + + 16 + 11 + true + 682 + + + 16 + 689 + false + 689 + + + 16 + 12 + true + 689 + + + 16 + 13 + true + 689 + + + 16 + 690 + false + 690 + + + 16 + 692 + false + 692 + + + 16 + 14 + true + 692 + + + 16 + 15 + true + 692 + + + 16 + 693 + false + 693 + + + 16 + 16 + true + 692 + + + 16 + 694 + false + 694 + + + 16 + 695 + false + 695 + + + 16 + 697 + false + 697 + + + 16 + 17 + true + 692 + + + 16 + 698 + false + 698 + + + 16 + 699 + false + 699 + + + 16 + 18 + true + 698 + + + 16 + 700 + false + 700 + + + 16 + 704 + false + 704 + + + 16 + 705 + false + 705 + + + 16 + 20 + true + 704 + + + 16 + 707 + false + 707 + + + 16 + 708 + false + 708 + + + 16 + 708 + false + 708 + + + 16 + 708 + false + 708 + + + 16 + 25 + true + 708 + + + 16 + 709 + false + 709 + + + 16 + 710 + false + 710 + + + 16 + 711 + false + 711 + + + 16 + 22 + true + 710 + + + 16 + 712 + false + 712 + + + 16 + 713 + false + 713 + + + 16 + 715 + false + 715 + + + 16 + 23 + true + 710 + + + 16 + 716 + false + 716 + + + 16 + 717 + false + 717 + + + 16 + 718 + false + 718 + + + 16 + 708 + false + 708 + + + 16 + 24 + true + 708 + + + 16 + 719 + false + 719 + + + 16 + 720 + false + 720 + + + 16 + 21 + true + 704 + + + 16 + 721 + false + 721 + + + 16 + 26 + true + 720 + + + 16 + 723 + false + 723 + + + 16 + 724 + false + 724 + + + 16 + 726 + false + 726 + + + 16 + 27 + true + 720 + + + 16 + 728 + false + 728 + + + 16 + 729 + false + 729 + + + 16 + 731 + false + 731 + + + 16 + 735 + false + 735 + + + 16 + 735 + false + 735 + + + 16 + 735 + false + 735 + + + 16 + 39 + true + 735 + + + 16 + 736 + false + 736 + + + 16 + 737 + false + 737 + + + 16 + 738 + false + 738 + + + 16 + 742 + false + 740 + + + 16 + 28 + true + 740 + + + 16 + 29 + true + 740 + + + 16 + 746 + false + 744 + + + 16 + 30 + true + 744 + + + 16 + 31 + true + 744 + + + 16 + 748 + false + 748 + + + 16 + 32 + true + 748 + + + 16 + 33 + true + 748 + + + 16 + 754 + false + 754 + + + 16 + 756 + false + 756 + + + 16 + 757 + false + 757 + + + 16 + 34 + true + 756 + + + 16 + 758 + false + 758 + + + 16 + 762 + false + 762 + + + 16 + 35 + true + 756 + + + 16 + 763 + false + 763 + + + 16 + 36 + true + 762 + + + 16 + 764 + false + 764 + + + 16 + 765 + false + 765 + + + 16 + 767 + false + 767 + + + 16 + 37 + true + 762 + + + 16 + 769 + false + 769 + + + 16 + 770 + false + 770 + + + 16 + 771 + false + 771 + + + 16 + 735 + false + 735 + + + 16 + 38 + true + 735 + + + 16 + 773 + false + 773 + + + 16 + 775 + false + 775 + + + 16 + 776 + false + 776 + + + 16 + 777 + false + 777 + + + 16 + 778 + false + 778 + + + 16 + 19 + true + 698 + + + 16 + 677 + false + 677 + + + 16 + 40 + true + 677 + + + 16 + 780 + false + 780 + + + 16 + 781 + false + 781 + + + 16 + 788 + false + 788 + + + 16 + 789 + false + 789 + + + 16 + 790 + false + 790 + + + 16 + 0 + true + 789 + + + 16 + 791 + false + 791 + + + 16 + 794 + false + 794 + + + 16 + 1 + true + 789 + + + 16 + 795 + false + 795 + + + 16 + 803 + false + 803 + + + 16 + 804 + false + 804 + + + 16 + 805 + false + 805 + + + 16 + 0 + true + 805 + + + 16 + 1 + true + 805 + + + 16 + 806 + false + 806 + + + 16 + 2 + true + 805 + + + 16 + 807 + false + 807 + + + 16 + 808 + false + 808 + + + 16 + 811 + false + 811 + + + 16 + 3 + true + 805 + + + 16 + 813 + false + 813 + + + 16 + 814 + false + 814 + + + 16 + 240 + false + 240 + + + 16 + 241 + false + 241 + + + 16 + 242 + false + 242 + + + 16 + 243 + false + 243 + + + 16 + 221 + false + 172 + + + 16 + 236 + false + 227 + + + 16 + 24 + false + 24 + + + 16 + 28 + false + 28 + + + 16 + 37 + false + 37 + + + 16 + 31 + false + 31 + + + 16 + 32 + false + 32 + + + 16 + 33 + false + 33 + + + 16 + 34 + false + 34 + + + 16 + 45 + false + 45 + + + 16 + 50 + false + 50 + + + 16 + 54 + false + 54 + + + 16 + 60 + false + 60 + + + 16 + 67 + false + 67 + + + 16 + 73 + false + 73 + + + 16 + 73 + false + 73 + + + 16 + 84 + false + 84 + + + 16 + 0 + true + 84 + + + 16 + 1 + true + 84 + + + 16 + 75 + false + 75 + + + 16 + 76 + false + 76 + + + 16 + 77 + false + 77 + + + 16 + 78 + false + 78 + + + 16 + 79 + false + 79 + + + 16 + 80 + false + 80 + + + 16 + 81 + false + 81 + + + 16 + 84 + false + 84 + + + 16 + 84 + false + 84 + + + 16 + 98 + false + 98 + + + 16 + 103 + false + 103 + + + 16 + 115 + false + 115 + + + 16 + 116 + false + 116 + + + 16 + 117 + false + 117 + + + 16 + 0 + true + 116 + + + 16 + 118 + false + 118 + + + 16 + 121 + false + 121 + + + 16 + 1 + true + 116 + + + 16 + 122 + false + 122 + + + 16 + 135 + false + 135 + + + 16 + 136 + false + 136 + + + 16 + 137 + false + 137 + + + 16 + 0 + true + 136 + + + 16 + 138 + false + 138 + + + 16 + 141 + false + 141 + + + 16 + 1 + true + 136 + + + 16 + 142 + false + 142 + + + 16 + 165 + false + 165 + + + 16 + 0 + true + 165 + + + 16 + 1 + true + 165 + + + 16 + 146 + false + 146 + + + 16 + 147 + false + 147 + + + 16 + 148 + false + 148 + + + 16 + 149 + false + 149 + + + 16 + 150 + false + 150 + + + 16 + 153 + false + 153 + + + 16 + 154 + false + 154 + + + 16 + 155 + false + 155 + + + 16 + 0 + true + 154 + + + 16 + 156 + false + 156 + + + 16 + 159 + false + 159 + + + 16 + 1 + true + 154 + + + 16 + 160 + false + 160 + + + 16 + 161 + false + 161 + + + 16 + 162 + false + 162 + + + 16 + 165 + false + 165 + + + 16 + 585 + false + 585 + + + 16 + 635 + false + 635 + + + 16 + 636 + false + 636 + + + 17 + 12 + false + 12 + + + 17 + 13 + false + 13 + + + 17 + 14 + false + 14 + + + 18 + 12 + false + 12 + + + 18 + 13 + false + 13 + + + 18 + 14 + false + 14 + + + 19 + 13 + false + 13 + + + 19 + 14 + false + 14 + + + 19 + 15 + false + 15 + + + 19 + 18 + false + 18 + + + 19 + 19 + false + 19 + + + 19 + 20 + false + 20 + + + 19 + 23 + false + 23 + + + 19 + 24 + false + 24 + + + 19 + 25 + false + 25 + + + 19 + 29 + false + 29 + + + 19 + 30 + false + 30 + + + 19 + 31 + false + 31 + + + 19 + 34 + false + 34 + + + 19 + 35 + false + 35 + + + 19 + 36 + false + 36 + + + 19 + 39 + false + 39 + + + 19 + 40 + false + 40 + + + 19 + 41 + false + 41 + + + 19 + 45 + false + 45 + + + 19 + 46 + false + 46 + + + 19 + 47 + false + 47 + + + 19 + 51 + false + 51 + + + 19 + 52 + false + 52 + + + 19 + 53 + false + 53 + + + 19 + 56 + false + 56 + + + 19 + 57 + false + 57 + + + 19 + 58 + false + 58 + + + 19 + 62 + false + 62 + + + 19 + 63 + false + 63 + + + 19 + 0 + true + 63 + + + 19 + 1 + true + 63 + + + 19 + 64 + false + 64 + + + 20 + 38 + false + 38 + + + 20 + 39 + false + 39 + + + 20 + 40 + false + 40 + + + 20 + 42 + false + 42 + + + 20 + 0 + true + 42 + + + 20 + 1 + true + 42 + + + 20 + 43 + false + 43 + + + 20 + 2 + true + 43 + + + 20 + 3 + true + 43 + + + 20 + 45 + false + 45 + + + 20 + 46 + false + 46 + + + 20 + 4 + true + 45 + + + 20 + 47 + false + 47 + + + 20 + 48 + false + 48 + + + 20 + 54 + false + 50 + + + 20 + 5 + true + 45 + + + 20 + 57 + false + 57 + + + 20 + 57 + false + 57 + + + 20 + 57 + false + 57 + + + 20 + 15 + true + 57 + + + 20 + 58 + false + 58 + + + 20 + 59 + false + 59 + + + 20 + 59 + false + 59 + + + 20 + 63 + false + 61 + + + 20 + 7 + true + 59 + + + 20 + 8 + true + 61 + + + 20 + 9 + true + 61 + + + 20 + 65 + false + 65 + + + 20 + 65 + false + 65 + + + 20 + 67 + false + 67 + + + 20 + 11 + true + 65 + + + 20 + 68 + false + 68 + + + 20 + 12 + true + 67 + + + 20 + 70 + false + 70 + + + 20 + 13 + true + 67 + + + 20 + 71 + false + 71 + + + 20 + 6 + true + 59 + + + 20 + 10 + true + 65 + + + 20 + 57 + false + 57 + + + 20 + 74 + false + 74 + + + 20 + 14 + true + 57 + + + 20 + 76 + false + 76 + + + 20 + 16 + true + 76 + + + 20 + 17 + true + 76 + + + 20 + 77 + false + 77 + + + 20 + 18 + true + 76 + + + 20 + 81 + false + 79 + + + 20 + 19 + true + 76 + + + 20 + 82 + false + 82 + + + 20 + 85 + false + 85 + + + 20 + 86 + false + 86 + + + 20 + 87 + false + 87 + + + 20 + 88 + false + 88 + + + 20 + 89 + false + 89 + + + 20 + 89 + false + 89 + + + 20 + 89 + false + 89 + + + 20 + 9 + true + 89 + + + 20 + 90 + false + 90 + + + 20 + 91 + false + 91 + + + 20 + 92 + false + 92 + + + 20 + 0 + true + 91 + + + 20 + 93 + false + 93 + + + 20 + 94 + false + 94 + + + 20 + 95 + false + 95 + + + 20 + 96 + false + 96 + + + 20 + 2 + true + 95 + + + 20 + 98 + false + 98 + + + 20 + 99 + false + 99 + + + 20 + 102 + false + 102 + + + 20 + 3 + true + 95 + + + 20 + 103 + false + 103 + + + 20 + 4 + true + 102 + + + 20 + 105 + false + 105 + + + 20 + 106 + false + 106 + + + 20 + 109 + false + 109 + + + 20 + 5 + true + 102 + + + 20 + 110 + false + 110 + + + 20 + 111 + false + 111 + + + 20 + 6 + true + 110 + + + 20 + 113 + false + 113 + + + 20 + 116 + false + 116 + + + 20 + 118 + false + 118 + + + 20 + 120 + false + 120 + + + 20 + 7 + true + 110 + + + 20 + 121 + false + 121 + + + 20 + 1 + true + 91 + + + 20 + 89 + false + 89 + + + 20 + 123 + false + 123 + + + 20 + 8 + true + 89 + + + 20 + 124 + false + 124 + + + 20 + 127 + false + 127 + + + 20 + 128 + false + 128 + + + 20 + 129 + false + 129 + + + 20 + 130 + false + 130 + + + 20 + 130 + false + 130 + + + 20 + 130 + false + 130 + + + 20 + 5 + true + 130 + + + 20 + 131 + false + 131 + + + 20 + 132 + false + 132 + + + 20 + 133 + false + 133 + + + 20 + 0 + true + 132 + + + 20 + 134 + false + 134 + + + 20 + 135 + false + 135 + + + 20 + 137 + false + 137 + + + 20 + 138 + false + 138 + + + 20 + 2 + true + 137 + + + 20 + 139 + false + 139 + + + 20 + 3 + true + 137 + + + 20 + 141 + false + 141 + + + 20 + 142 + false + 142 + + + 20 + 1 + true + 132 + + + 20 + 130 + false + 130 + + + 20 + 146 + false + 146 + + + 20 + 4 + true + 130 + + + 20 + 147 + false + 147 + + + 20 + 150 + false + 150 + + + 20 + 151 + false + 151 + + + 20 + 152 + false + 152 + + + 20 + 153 + false + 153 + + + 20 + 153 + false + 153 + + + 20 + 153 + false + 153 + + + 20 + 5 + true + 153 + + + 20 + 154 + false + 154 + + + 20 + 155 + false + 155 + + + 20 + 156 + false + 156 + + + 20 + 0 + true + 155 + + + 20 + 157 + false + 157 + + + 20 + 158 + false + 158 + + + 20 + 159 + false + 159 + + + 20 + 160 + false + 160 + + + 20 + 162 + false + 162 + + + 20 + 163 + false + 163 + + + 20 + 164 + false + 164 + + + 20 + 165 + false + 165 + + + 20 + 166 + false + 166 + + + 20 + 167 + false + 167 + + + 20 + 168 + false + 168 + + + 20 + 171 + false + 171 + + + 20 + 172 + false + 172 + + + 20 + 2 + true + 171 + + + 20 + 173 + false + 173 + + + 20 + 3 + true + 171 + + + 20 + 175 + false + 175 + + + 20 + 176 + false + 176 + + + 20 + 1 + true + 155 + + + 20 + 153 + false + 153 + + + 20 + 178 + false + 178 + + + 20 + 4 + true + 153 + + + 20 + 179 + false + 179 + + + 20 + 183 + false + 183 + + + 20 + 184 + false + 184 + + + 20 + 185 + false + 185 + + + 20 + 0 + true + 184 + + + 20 + 186 + false + 186 + + + 20 + 187 + false + 187 + + + 20 + 188 + false + 188 + + + 20 + 2 + true + 187 + + + 20 + 189 + false + 189 + + + 20 + 190 + false + 190 + + + 20 + 192 + false + 192 + + + 20 + 3 + true + 187 + + + 20 + 194 + false + 194 + + + 20 + 1 + true + 184 + + + 20 + 195 + false + 195 + + + 20 + 4 + true + 194 + + + 20 + 196 + false + 196 + + + 20 + 198 + false + 198 + + + 20 + 199 + false + 199 + + + 20 + 6 + true + 198 + + + 20 + 201 + false + 200 + + + 20 + 202 + false + 202 + + + 20 + 204 + false + 204 + + + 20 + 7 + true + 198 + + + 20 + 206 + false + 206 + + + 20 + 5 + true + 194 + + + 20 + 207 + false + 207 + + + 20 + 210 + false + 210 + + + 20 + 216 + false + 211 + + + 20 + 217 + false + 217 + + + 20 + 220 + false + 220 + + + 20 + 221 + false + 221 + + + 20 + 222 + false + 222 + + + 20 + 226 + false + 226 + + + 20 + 227 + false + 227 + + + 20 + 229 + false + 229 + + + 20 + 230 + false + 230 + + + 20 + 0 + true + 229 + + + 20 + 232 + false + 232 + + + 20 + 1 + true + 229 + + + 20 + 233 + false + 233 + + + 20 + 236 + false + 236 + + + 20 + 237 + false + 237 + + + 20 + 238 + false + 238 + + + 20 + 239 + false + 239 + + + 20 + 240 + false + 240 + + + 20 + 241 + false + 241 + + + 20 + 0 + true + 240 + + + 20 + 242 + false + 242 + + + 20 + 245 + false + 245 + + + 20 + 1 + true + 240 + + + 20 + 246 + false + 246 + + + 20 + 247 + false + 247 + + + 20 + 2 + true + 246 + + + 20 + 248 + false + 248 + + + 20 + 249 + false + 249 + + + 20 + 250 + false + 250 + + + 20 + 4 + true + 249 + + + 20 + 251 + false + 251 + + + 20 + 253 + false + 253 + + + 20 + 5 + true + 249 + + + 20 + 254 + false + 254 + + + 20 + 3 + true + 246 + + + 20 + 257 + false + 257 + + + 20 + 258 + false + 258 + + + 20 + 259 + false + 259 + + + 20 + 263 + false + 263 + + + 20 + 270 + false + 265 + + + 20 + 281 + false + 272 + + + 20 + 282 + false + 282 + + + 20 + 285 + false + 285 + + + 20 + 288 + false + 288 + + + 20 + 290 + false + 290 + + + 20 + 290 + false + 290 + + + 20 + 1 + true + 290 + + + 20 + 290 + false + 290 + + + 20 + 291 + false + 291 + + + 20 + 292 + false + 292 + + + 20 + 298 + false + 293 + + + 20 + 299 + false + 299 + + + 20 + 290 + false + 290 + + + 20 + 0 + true + 290 + + + 20 + 300 + false + 300 + + + 20 + 303 + false + 303 + + + 20 + 304 + false + 304 + + + 20 + 305 + false + 305 + + + 20 + 306 + false + 306 + + + 20 + 309 + false + 309 + + + 20 + 310 + false + 310 + + + 20 + 311 + false + 311 + + + 20 + 0 + true + 310 + + + 20 + 313 + false + 313 + + + 20 + 1 + true + 310 + + + 20 + 314 + false + 314 + + + 20 + 2 + true + 313 + + + 20 + 316 + false + 316 + + + 20 + 3 + true + 313 + + + 20 + 317 + false + 317 + + + 20 + 4 + true + 316 + + + 20 + 319 + false + 319 + + + 20 + 5 + true + 316 + + + 20 + 320 + false + 320 + + + 20 + 6 + true + 319 + + + 20 + 322 + false + 322 + + + 20 + 7 + true + 319 + + + 20 + 323 + false + 323 + + + 20 + 8 + true + 322 + + + 20 + 325 + false + 325 + + + 20 + 9 + true + 322 + + + 20 + 326 + false + 326 + + + 20 + 10 + true + 325 + + + 20 + 328 + false + 328 + + + 20 + 11 + true + 325 + + + 20 + 329 + false + 329 + + + 20 + 12 + true + 328 + + + 20 + 331 + false + 331 + + + 20 + 13 + true + 328 + + + 20 + 332 + false + 332 + + + 20 + 14 + true + 331 + + + 20 + 334 + false + 334 + + + 20 + 15 + true + 331 + + + 20 + 335 + false + 335 + + + 20 + 16 + true + 334 + + + 20 + 337 + false + 337 + + + 20 + 17 + true + 334 + + + 20 + 338 + false + 338 + + + 20 + 341 + false + 341 + + + 20 + 342 + false + 342 + + + 20 + 0 + true + 342 + + + 20 + 1 + true + 342 + + + 20 + 343 + false + 343 + + + 20 + 2 + true + 342 + + + 20 + 345 + false + 345 + + + 20 + 3 + true + 342 + + + 20 + 346 + false + 346 + + + 20 + 347 + false + 347 + + + 20 + 4 + true + 346 + + + 20 + 349 + false + 349 + + + 20 + 5 + true + 346 + + + 20 + 349 + false + 349 + + + 20 + 349 + false + 349 + + + 20 + 11 + true + 349 + + + 20 + 350 + false + 350 + + + 20 + 351 + false + 351 + + + 20 + 353 + false + 353 + + + 20 + 354 + false + 354 + + + 20 + 356 + false + 356 + + + 20 + 7 + true + 353 + + + 20 + 357 + false + 357 + + + 20 + 359 + false + 359 + + + 20 + 361 + false + 361 + + + 20 + 362 + false + 362 + + + 20 + 8 + true + 361 + + + 20 + 363 + false + 363 + + + 20 + 9 + true + 361 + + + 20 + 6 + true + 353 + + + 20 + 349 + false + 349 + + + 20 + 365 + false + 365 + + + 20 + 10 + true + 349 + + + 20 + 366 + false + 366 + + + 20 + 369 + false + 369 + + + 20 + 370 + false + 370 + + + 20 + 0 + true + 370 + + + 20 + 1 + true + 370 + + + 20 + 371 + false + 371 + + + 20 + 2 + true + 370 + + + 20 + 373 + false + 373 + + + 20 + 3 + true + 370 + + + 20 + 374 + false + 374 + + + 20 + 375 + false + 375 + + + 20 + 4 + true + 374 + + + 20 + 377 + false + 377 + + + 20 + 5 + true + 374 + + + 20 + 377 + false + 377 + + + 20 + 377 + false + 377 + + + 20 + 11 + true + 377 + + + 20 + 378 + false + 378 + + + 20 + 379 + false + 379 + + + 20 + 381 + false + 381 + + + 20 + 382 + false + 382 + + + 20 + 6 + true + 381 + + + 20 + 384 + false + 384 + + + 20 + 7 + true + 381 + + + 20 + 386 + false + 386 + + + 20 + 388 + false + 388 + + + 20 + 389 + false + 389 + + + 20 + 8 + true + 388 + + + 20 + 390 + false + 390 + + + 20 + 9 + true + 388 + + + 20 + 377 + false + 377 + + + 20 + 392 + false + 392 + + + 20 + 10 + true + 377 + + + 20 + 393 + false + 393 + + + 20 + 396 + false + 396 + + + 20 + 397 + false + 397 + + + 20 + 0 + true + 397 + + + 20 + 1 + true + 397 + + + 20 + 398 + false + 398 + + + 20 + 2 + true + 397 + + + 20 + 400 + false + 400 + + + 20 + 3 + true + 397 + + + 20 + 401 + false + 401 + + + 20 + 402 + false + 402 + + + 20 + 4 + true + 401 + + + 20 + 404 + false + 404 + + + 20 + 5 + true + 401 + + + 20 + 405 + false + 405 + + + 20 + 408 + false + 408 + + + 20 + 409 + false + 409 + + + 20 + 0 + true + 409 + + + 20 + 1 + true + 409 + + + 20 + 410 + false + 410 + + + 20 + 2 + true + 409 + + + 20 + 412 + false + 412 + + + 20 + 3 + true + 409 + + + 20 + 413 + false + 413 + + + 20 + 414 + false + 414 + + + 20 + 4 + true + 413 + + + 20 + 416 + false + 416 + + + 20 + 5 + true + 413 + + + 20 + 417 + false + 417 + + + 20 + 420 + false + 420 + + + 20 + 423 + false + 423 + + + 20 + 424 + false + 424 + + + 20 + 425 + false + 425 + + + 20 + 428 + false + 428 + + + 20 + 429 + false + 429 + + + 20 + 430 + false + 430 + + + 20 + 432 + false + 432 + + + 20 + 432 + false + 432 + + + 20 + 432 + false + 432 + + + 20 + 5 + true + 432 + + + 20 + 433 + false + 433 + + + 20 + 434 + false + 434 + + + 20 + 435 + false + 435 + + + 20 + 437 + false + 437 + + + 20 + 438 + false + 438 + + + 20 + 440 + false + 440 + + + 20 + 0 + true + 440 + + + 20 + 1 + true + 440 + + + 20 + 441 + false + 441 + + + 20 + 2 + true + 440 + + + 20 + 442 + false + 442 + + + 20 + 3 + true + 440 + + + 20 + 432 + false + 432 + + + 20 + 444 + false + 444 + + + 20 + 4 + true + 432 + + + 20 + 445 + false + 445 + + + 20 + 448 + false + 448 + + + 20 + 452 + false + 449 + + + 20 + 453 + false + 453 + + + 20 + 456 + false + 456 + + + 20 + 464 + false + 464 + + + 20 + 465 + false + 465 + + + 20 + 468 + false + 468 + + + 20 + 471 + false + 469 + + + 20 + 472 + false + 472 + + + 20 + 475 + false + 475 + + + 20 + 476 + false + 476 + + + 20 + 478 + false + 478 + + + 20 + 0 + true + 478 + + + 20 + 1 + true + 478 + + + 20 + 479 + false + 479 + + + 20 + 2 + true + 478 + + + 20 + 3 + true + 478 + + + 20 + 482 + false + 482 + + + 20 + 483 + false + 483 + + + 20 + 484 + false + 484 + + + 20 + 486 + false + 486 + + + 20 + 487 + false + 487 + + + 20 + 488 + false + 488 + + + 20 + 490 + false + 490 + + + 20 + 30 + false + 30 + + + 20 + 22 + false + 22 + + + 20 + 28 + false + 28 + + + 20 + 29 + false + 29 + + + 20 + 30 + false + 30 + + + 20 + 31 + false + 31 + + + 20 + 32 + false + 32 + + + 20 + 33 + false + 33 + + + 20 + 34 + false + 34 + + + 20 + 35 + false + 35 + + + 20 + 79 + false + 79 + + + 20 + 221 + false + 221 + + + 20 + 229 + false + 229 + + + 20 + 230 + false + 230 + + + 20 + 319 + false + 319 + + + 20 + 322 + false + 322 + + + 20 + 212 + false + 212 + + + 20 + 213 + false + 213 + + + 20 + 214 + false + 214 + + + 20 + 215 + false + 215 + + + 20 + 216 + false + 216 + + + 20 + 266 + false + 266 + + + 20 + 267 + false + 267 + + + 20 + 268 + false + 268 + + + 20 + 269 + false + 269 + + + 20 + 270 + false + 270 + + + 20 + 273 + false + 273 + + + 20 + 274 + false + 274 + + + 20 + 275 + false + 275 + + + 20 + 0 + true + 274 + + + 20 + 276 + false + 276 + + + 20 + 277 + false + 277 + + + 20 + 278 + false + 278 + + + 20 + 279 + false + 279 + + + 20 + 280 + false + 280 + + + 20 + 281 + false + 281 + + + 20 + 1 + true + 274 + + + 20 + 294 + false + 294 + + + 20 + 295 + false + 295 + + + 20 + 296 + false + 296 + + + 20 + 297 + false + 297 + + + 20 + 298 + false + 298 + + + 20 + 305 + false + 305 + + + 20 + 458 + false + 458 + + + 20 + 459 + false + 459 + + + 20 + 460 + false + 460 + + + 20 + 461 + false + 461 + + + 20 + 462 + false + 462 + + + 20 + 80 + false + 80 + + + 20 + 0 + true + 80 + + + 20 + 1 + true + 80 + + + 21 + 12 + false + 12 + + + 21 + 13 + false + 13 + + + 21 + 14 + false + 14 + + + 22 + 25 + false + 25 + + + 22 + 30 + false + 26 + + + 22 + 31 + false + 31 + + + 22 + 44 + false + 44 + + + 22 + 45 + false + 45 + + + 22 + 47 + false + 47 + + + 22 + 48 + false + 48 + + + 22 + 3 + true + 47 + + + 22 + 50 + false + 50 + + + 22 + 51 + false + 51 + + + 22 + 52 + false + 52 + + + 22 + 0 + true + 51 + + + 22 + 53 + false + 53 + + + 22 + 54 + false + 54 + + + 22 + 55 + false + 55 + + + 22 + 1 + true + 51 + + + 22 + 57 + false + 57 + + + 22 + 58 + false + 58 + + + 22 + 59 + false + 59 + + + 22 + 60 + false + 60 + + + 22 + 61 + false + 61 + + + 22 + 47 + false + 47 + + + 22 + 47 + false + 47 + + + 22 + 62 + false + 62 + + + 22 + 2 + true + 47 + + + 22 + 63 + false + 63 + + + 22 + 27 + false + 27 + + + 22 + 28 + false + 28 + + + 22 + 29 + false + 29 + + + 22 + 30 + false + 30 + + + 23 + 15 + false + 15 + + + 23 + 15 + false + 15 + + + 23 + 16 + false + 16 + + + 23 + 16 + false + 16 + + + 23 + 56 + false + 56 + + + 23 + 57 + false + 57 + + + 23 + 58 + false + 58 + + + 23 + 0 + true + 57 + + + 23 + 59 + false + 59 + + + 23 + 62 + false + 62 + + + 23 + 1 + true + 57 + + + 23 + 63 + false + 63 + + + 23 + 63 + false + 63 + + + 23 + 63 + false + 63 + + + 23 + 7 + true + 63 + + + 23 + 64 + false + 64 + + + 23 + 65 + false + 65 + + + 23 + 65 + false + 65 + + + 23 + 65 + false + 65 + + + 23 + 5 + true + 65 + + + 23 + 66 + false + 66 + + + 23 + 67 + false + 67 + + + 23 + 68 + false + 68 + + + 23 + 2 + true + 67 + + + 23 + 69 + false + 69 + + + 23 + 70 + false + 70 + + + 23 + 71 + false + 71 + + + 23 + 3 + true + 67 + + + 23 + 72 + false + 72 + + + 23 + 65 + false + 65 + + + 23 + 4 + true + 65 + + + 23 + 73 + false + 73 + + + 23 + 63 + false + 63 + + + 23 + 6 + true + 63 + + + 23 + 75 + false + 75 + + + 23 + 76 + false + 76 + + + 23 + 79 + false + 79 + + + 23 + 80 + false + 80 + + + 23 + 82 + false + 82 + + + 23 + 83 + false + 83 + + + 23 + 84 + false + 84 + + + 23 + 0 + true + 83 + + + 23 + 85 + false + 85 + + + 23 + 88 + false + 88 + + + 23 + 1 + true + 83 + + + 23 + 88 + false + 88 + + + 23 + 88 + false + 88 + + + 23 + 11 + true + 88 + + + 23 + 89 + false + 89 + + + 23 + 90 + false + 90 + + + 23 + 91 + false + 91 + + + 23 + 92 + false + 92 + + + 23 + 2 + true + 92 + + + 23 + 3 + true + 92 + + + 23 + 93 + false + 93 + + + 23 + 4 + true + 92 + + + 23 + 94 + false + 94 + + + 23 + 95 + false + 95 + + + 23 + 97 + false + 97 + + + 23 + 5 + true + 92 + + + 23 + 98 + false + 98 + + + 23 + 99 + false + 99 + + + 23 + 101 + false + 101 + + + 23 + 102 + false + 102 + + + 23 + 6 + true + 101 + + + 23 + 103 + false + 103 + + + 23 + 104 + false + 104 + + + 23 + 106 + false + 106 + + + 23 + 7 + true + 101 + + + 23 + 106 + false + 106 + + + 23 + 106 + false + 106 + + + 23 + 9 + true + 106 + + + 23 + 107 + false + 107 + + + 23 + 108 + false + 108 + + + 23 + 109 + false + 109 + + + 23 + 106 + false + 106 + + + 23 + 110 + false + 110 + + + 23 + 8 + true + 106 + + + 23 + 88 + false + 88 + + + 23 + 112 + false + 112 + + + 23 + 10 + true + 88 + + + 23 + 113 + false + 113 + + + 23 + 116 + false + 116 + + + 23 + 117 + false + 117 + + + 23 + 0 + true + 117 + + + 23 + 1 + true + 117 + + + 23 + 118 + false + 118 + + + 23 + 2 + true + 117 + + + 23 + 119 + false + 119 + + + 23 + 122 + false + 122 + + + 23 + 3 + true + 117 + + + 23 + 4 + true + 122 + + + 23 + 5 + true + 122 + + + 23 + 123 + false + 123 + + + 23 + 124 + false + 124 + + + 23 + 127 + false + 127 + + + 23 + 128 + false + 128 + + + 23 + 0 + true + 128 + + + 23 + 1 + true + 128 + + + 23 + 129 + false + 129 + + + 23 + 132 + false + 132 + + + 23 + 133 + false + 133 + + + 23 + 0 + true + 133 + + + 23 + 1 + true + 133 + + + 23 + 134 + false + 134 + + + 23 + 2 + true + 133 + + + 23 + 135 + false + 135 + + + 23 + 138 + false + 138 + + + 23 + 3 + true + 133 + + + 23 + 138 + false + 138 + + + 23 + 138 + false + 138 + + + 23 + 13 + true + 138 + + + 23 + 139 + false + 139 + + + 23 + 140 + false + 140 + + + 23 + 141 + false + 141 + + + 23 + 4 + true + 140 + + + 23 + 142 + false + 142 + + + 23 + 142 + false + 142 + + + 23 + 142 + false + 142 + + + 23 + 11 + true + 142 + + + 23 + 143 + false + 143 + + + 23 + 145 + false + 145 + + + 23 + 146 + false + 146 + + + 23 + 6 + true + 145 + + + 23 + 147 + false + 147 + + + 23 + 8 + true + 147 + + + 23 + 9 + true + 147 + + + 23 + 148 + false + 148 + + + 23 + 149 + false + 149 + + + 23 + 151 + false + 151 + + + 23 + 7 + true + 145 + + + 23 + 142 + false + 142 + + + 23 + 10 + true + 142 + + + 23 + 152 + false + 152 + + + 23 + 153 + false + 153 + + + 23 + 5 + true + 140 + + + 23 + 138 + false + 138 + + + 23 + 12 + true + 138 + + + 23 + 154 + false + 154 + + + 23 + 155 + false + 155 + + + 23 + 158 + false + 158 + + + 23 + 159 + false + 159 + + + 23 + 159 + false + 159 + + + 23 + 159 + false + 159 + + + 23 + 5 + true + 159 + + + 23 + 160 + false + 160 + + + 23 + 161 + false + 161 + + + 23 + 162 + false + 162 + + + 23 + 0 + true + 161 + + + 23 + 163 + false + 163 + + + 23 + 163 + false + 163 + + + 23 + 163 + false + 163 + + + 23 + 3 + true + 163 + + + 23 + 164 + false + 164 + + + 23 + 165 + false + 165 + + + 23 + 166 + false + 166 + + + 23 + 163 + false + 163 + + + 23 + 2 + true + 163 + + + 23 + 167 + false + 167 + + + 23 + 168 + false + 168 + + + 23 + 1 + true + 161 + + + 23 + 159 + false + 159 + + + 23 + 4 + true + 159 + + + 23 + 170 + false + 170 + + + 23 + 171 + false + 171 + + + 23 + 28 + false + 28 + + + 23 + 29 + false + 29 + + + 23 + 30 + false + 30 + + + 23 + 0 + true + 30 + + + 23 + 1 + true + 30 + + + 23 + 31 + false + 31 + + + 23 + 2 + true + 31 + + + 23 + 3 + true + 31 + + + 23 + 32 + false + 32 + + + 23 + 33 + false + 33 + + + 23 + 35 + false + 35 + + + 23 + 36 + false + 36 + + + 23 + 37 + false + 37 + + + 23 + 0 + true + 37 + + + 23 + 1 + true + 37 + + + 23 + 38 + false + 38 + + + 23 + 2 + true + 38 + + + 23 + 3 + true + 38 + + + 23 + 39 + false + 39 + + + 23 + 40 + false + 40 + + + 23 + 4 + true + 39 + + + 23 + 41 + false + 41 + + + 23 + 43 + false + 43 + + + 23 + 5 + true + 39 + + + 23 + 44 + false + 44 + + + 23 + 6 + true + 43 + + + 23 + 45 + false + 45 + + + 23 + 48 + false + 48 + + + 23 + 7 + true + 43 + + + 23 + 49 + false + 49 + + + 23 + 51 + false + 51 + + + 23 + 52 + false + 52 + + + 23 + 53 + false + 53 + + + 24 + 11 + false + 11 + + + 24 + 11 + false + 11 + + + 24 + 11 + false + 11 + + + 24 + 12 + false + 12 + + + 24 + 12 + false + 12 + + + 24 + 12 + false + 12 + + + 24 + 13 + false + 13 + + + 24 + 13 + false + 13 + + + 24 + 13 + false + 13 + + + 24 + 16 + false + 16 + + + 24 + 16 + false + 16 + + + 24 + 16 + false + 16 + + + 24 + 22 + false + 22 + + + 24 + 22 + false + 22 + + + 24 + 22 + false + 22 + + + 24 + 23 + false + 23 + + + 24 + 23 + false + 23 + + + 24 + 23 + false + 23 + + + 24 + 24 + false + 24 + + + 24 + 24 + false + 24 + + + 24 + 24 + false + 24 + + + 24 + 27 + false + 27 + + + 24 + 27 + false + 27 + + + 24 + 27 + false + 27 + + + C:\Users\bertk\AppData\Local\Temp\coverlet.core_d78227cd-9f82-40be-a157-b9c17f1833bc + coverlet.core + C:\GitHub\coverlet\test\coverlet.collector.tests\bin\Debug\net6.0\coverlet.core.dll + {"documents":{"C:\\GitHub\\coverlet\\*":"https://raw.githubusercontent.com/Bertk/coverlet/a0ad0b1b27a8f6e54f34fbb0c9d6a9be375ed833/*"}} + + + false + \ No newline at end of file diff --git a/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.csproj b/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.csproj new file mode 100644 index 000000000..9a9f26bb7 --- /dev/null +++ b/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.csproj @@ -0,0 +1,42 @@ + + + + net8.0 + enable + enable + true + false + + + + + + + + runtime + + + runtime + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + Always + + + diff --git a/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.snk b/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.snk new file mode 100644 index 000000000..71a299d96 Binary files /dev/null and b/test/coverlet.msbuild.tasks.tests/coverlet.msbuild.tasks.tests.snk differ diff --git a/test/coverlet.tests.projectsample.aspmvcrazor.tests/AssemblyInfo.cs b/test/coverlet.tests.projectsample.aspmvcrazor.tests/AssemblyInfo.cs new file mode 100644 index 000000000..4bd09b30b --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor.tests/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; + +[assembly: AssemblyKeyFile("coverlet.tests.projectsample.aspmvcrazor.tests.snk")] diff --git a/test/coverlet.tests.projectsample.aspmvcrazor.tests/ResolverTests.cs b/test/coverlet.tests.projectsample.aspmvcrazor.tests/ResolverTests.cs new file mode 100644 index 000000000..466572e04 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor.tests/ResolverTests.cs @@ -0,0 +1,38 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Coverlet.Core.Abstractions; +using Coverlet.Core.Instrumentation; +using Microsoft.Extensions.DependencyModel; +using Moq; +using Xunit; + +namespace coverlet.tests.projectsample.aspmvcrazor.tests +{ + public class ResolverTests + { + [Fact] + public void TestInstrument_NetCoreSharedFrameworkResolver() + { + Assembly assembly = GetType().Assembly; + var mockLogger = new Mock(); + var resolver = new NetCoreSharedFrameworkResolver(assembly.Location, mockLogger.Object); + var compilationLibrary = new CompilationLibrary( + "package", + "Microsoft.AspNetCore.Mvc.Razor", + "0.0.0.0", + "sha512-not-relevant", + Enumerable.Empty(), + Enumerable.Empty(), + true); + + var assemblies = new List(); + Assert.True(resolver.TryResolveAssemblyPaths(compilationLibrary, assemblies), + "sample assembly shall be resolved"); + Assert.NotEmpty(assemblies); + } + } +} diff --git a/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.csproj b/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.csproj new file mode 100644 index 000000000..f80483817 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.csproj @@ -0,0 +1,23 @@ + + + + net8.0 + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + diff --git a/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.snk b/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.snk new file mode 100644 index 000000000..9e007898b Binary files /dev/null and b/test/coverlet.tests.projectsample.aspmvcrazor.tests/coverlet.tests.projectsample.aspmvcrazor.tests.snk differ diff --git a/test/coverlet.tests.projectsample.aspmvcrazor/Class.cs b/test/coverlet.tests.projectsample.aspmvcrazor/Class.cs new file mode 100644 index 000000000..87d944ba8 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor/Class.cs @@ -0,0 +1,16 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Microsoft.AspNetCore.Mvc.Razor; + +namespace coverlet.tests.projectsample.aspmvcrazor +{ + public static class Class + { + public static IMvcBuilder AddLocalization(this IMvcBuilder mvcBuilder, + LanguageViewLocationExpanderFormat viewLocationExpanderFormat = LanguageViewLocationExpanderFormat.Suffix) + { + return mvcBuilder; + } + } +} diff --git a/test/coverlet.tests.projectsample.aspmvcrazor/Program.cs b/test/coverlet.tests.projectsample.aspmvcrazor/Program.cs new file mode 100644 index 000000000..72ab4869a --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor/Program.cs @@ -0,0 +1,28 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +WebApplicationBuilder builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddRazorPages(); + +WebApplication app = builder.Build(); + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseStaticFiles(); + +app.UseRouting(); + +app.UseAuthorization(); + +app.MapRazorPages(); + +app.Run(); diff --git a/test/coverlet.tests.projectsample.aspmvcrazor/appsettings.json b/test/coverlet.tests.projectsample.aspmvcrazor/appsettings.json new file mode 100644 index 000000000..10f68b8c8 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/test/coverlet.tests.projectsample.aspmvcrazor/coverlet.tests.projectsample.aspmvcrazor.csproj b/test/coverlet.tests.projectsample.aspmvcrazor/coverlet.tests.projectsample.aspmvcrazor.csproj new file mode 100644 index 000000000..6e46d7306 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspmvcrazor/coverlet.tests.projectsample.aspmvcrazor.csproj @@ -0,0 +1,12 @@ + + + + net6.0 + enable + false + false + $(NoWarn);NU1301 + false + + + diff --git a/test/coverlet.tests.projectsample.aspnet8.tests/AssemblyInfo.cs b/test/coverlet.tests.projectsample.aspnet8.tests/AssemblyInfo.cs new file mode 100644 index 000000000..03a196012 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8.tests/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; + +[assembly: AssemblyKeyFile("coverlet.tests.projectsample.aspnet8.tests.snk")] diff --git a/test/coverlet.tests.projectsample.aspnet8.tests/ResolverTests.cs b/test/coverlet.tests.projectsample.aspnet8.tests/ResolverTests.cs new file mode 100644 index 000000000..261b1b0ef --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8.tests/ResolverTests.cs @@ -0,0 +1,38 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Coverlet.Core.Abstractions; +using Coverlet.Core.Instrumentation; +using Microsoft.Extensions.DependencyModel; +using Moq; +using Xunit; + +namespace coverlet.tests.projectsample.aspnet6.tests +{ + public class ResolverTests + { + [Fact] + public void TestInstrument_NetCoreSharedFrameworkResolver() + { + Assembly assembly = GetType().Assembly; + var mockLogger = new Mock(); + var resolver = new NetCoreSharedFrameworkResolver(assembly.Location, mockLogger.Object); + var compilationLibrary = new CompilationLibrary( + "package", + "Microsoft.Extensions.Logging.Abstractions", + "0.0.0.0", + "sha512-not-relevant", + Enumerable.Empty(), + Enumerable.Empty(), + true); + + var assemblies = new List(); + Assert.True(resolver.TryResolveAssemblyPaths(compilationLibrary, assemblies), + "sample assembly shall be resolved"); + Assert.NotEmpty(assemblies); + } + } +} diff --git a/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.csproj b/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.csproj new file mode 100644 index 000000000..6be7cc953 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.csproj @@ -0,0 +1,24 @@ + + + + net8.0 + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + diff --git a/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.snk b/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.snk new file mode 100644 index 000000000..9e007898b Binary files /dev/null and b/test/coverlet.tests.projectsample.aspnet8.tests/coverlet.tests.projectsample.aspnet8.tests.snk differ diff --git a/test/coverlet.tests.projectsample.aspnet8/Program.cs b/test/coverlet.tests.projectsample.aspnet8/Program.cs new file mode 100644 index 000000000..904bf5c22 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8/Program.cs @@ -0,0 +1,23 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace coverlet.tests.projectsample.aspnet6 +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/test/coverlet.tests.projectsample.aspnet8/Startup.cs b/test/coverlet.tests.projectsample.aspnet8/Startup.cs new file mode 100644 index 000000000..6c9ade640 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8/Startup.cs @@ -0,0 +1,39 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace coverlet.tests.projectsample.aspnet6 +{ + public class Startup + { + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) + { + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseRouting(); + + app.UseEndpoints(endpoints => + { + endpoints.MapGet("/", async context => + { + await context.Response.WriteAsync("Hello World!"); + }); + }); + } + } +} diff --git a/test/coverlet.tests.projectsample.aspnet8/appsettings.Development.json b/test/coverlet.tests.projectsample.aspnet8/appsettings.Development.json new file mode 100644 index 000000000..8983e0fc1 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/test/coverlet.tests.projectsample.aspnet8/appsettings.json b/test/coverlet.tests.projectsample.aspnet8/appsettings.json new file mode 100644 index 000000000..d9d9a9bff --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/test/coverlet.tests.projectsample.aspnet8/coverlet.tests.projectsample.aspnet8.csproj b/test/coverlet.tests.projectsample.aspnet8/coverlet.tests.projectsample.aspnet8.csproj new file mode 100644 index 000000000..5cd106d29 --- /dev/null +++ b/test/coverlet.tests.projectsample.aspnet8/coverlet.tests.projectsample.aspnet8.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + false + false + false + + + + + + + diff --git a/test/coverlet.tests.projectsample.excludedbyattribute/coverlet.tests.projectsample.excludedbyattribute.csproj b/test/coverlet.tests.projectsample.excludedbyattribute/coverlet.tests.projectsample.excludedbyattribute.csproj index 3020bf383..c9332c47f 100644 --- a/test/coverlet.tests.projectsample.excludedbyattribute/coverlet.tests.projectsample.excludedbyattribute.csproj +++ b/test/coverlet.tests.projectsample.excludedbyattribute/coverlet.tests.projectsample.excludedbyattribute.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 false false diff --git a/test/coverlet.tests.projectsample.fsharp/coverlet.tests.projectsample.fsharp.fsproj b/test/coverlet.tests.projectsample.fsharp/coverlet.tests.projectsample.fsharp.fsproj index cd7a95969..d916fbb9e 100644 --- a/test/coverlet.tests.projectsample.fsharp/coverlet.tests.projectsample.fsharp.fsproj +++ b/test/coverlet.tests.projectsample.fsharp/coverlet.tests.projectsample.fsharp.fsproj @@ -1,10 +1,11 @@  - net6.0 + net8.0 true false false + false 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 822b965de..d34a33ca5 100644 --- a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj +++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj @@ -7,7 +7,7 @@ - + all diff --git a/test/coverlet.tests.projectsample.vbmynamespace/SampleVbClass.vb b/test/coverlet.tests.projectsample.vbmynamespace/SampleVbClass.vb index bce7be710..8519beb3e 100644 --- a/test/coverlet.tests.projectsample.vbmynamespace/SampleVbClass.vb +++ b/test/coverlet.tests.projectsample.vbmynamespace/SampleVbClass.vb @@ -1,5 +1,5 @@ Public Class SampleVbClass - Sub SampleSub() - Return - End Sub + Sub SampleSub() + Return + End Sub End Class diff --git a/test/coverlet.tests.projectsample.wpf8.selfcontained/.editorconfig b/test/coverlet.tests.projectsample.wpf8.selfcontained/.editorconfig new file mode 100644 index 000000000..d66ee0772 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8.selfcontained/.editorconfig @@ -0,0 +1,8 @@ +# top-most EditorConfig file +# We don't want to import other EditorConfig files and we want +# to ensure no rules are enabled for these asset source files. +root = true + +[*.cs] +# Default severity for all analyzer diagnostics +dotnet_analyzer_diagnostic.severity = none diff --git a/test/coverlet.tests.projectsample.wpf8.selfcontained/Program.cs b/test/coverlet.tests.projectsample.wpf8.selfcontained/Program.cs new file mode 100644 index 000000000..3eccb28c2 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8.selfcontained/Program.cs @@ -0,0 +1,9 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace coverlet.tests.projectsample.wpf8.selfcontained; + +public static class Program +{ + public static void Main() { } +} diff --git a/test/coverlet.tests.projectsample.wpf8.selfcontained/TestClass.cs b/test/coverlet.tests.projectsample.wpf8.selfcontained/TestClass.cs new file mode 100644 index 000000000..e86381aa1 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8.selfcontained/TestClass.cs @@ -0,0 +1,12 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Windows.Controls; + +namespace coverlet.tests.projectsample.wpf8.selfcontained +{ + public class TestClass + { + public UserControl? Control { get; set; } + } +} diff --git a/test/coverlet.tests.projectsample.wpf8.selfcontained/coverlet.tests.projectsample.wpf8.selfcontained.csproj b/test/coverlet.tests.projectsample.wpf8.selfcontained/coverlet.tests.projectsample.wpf8.selfcontained.csproj new file mode 100644 index 000000000..662e3e604 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8.selfcontained/coverlet.tests.projectsample.wpf8.selfcontained.csproj @@ -0,0 +1,15 @@ + + + + WinExe + net8.0-windows + enable + true + false + true + false + true + win-x64 + + + diff --git a/test/coverlet.tests.projectsample.wpf8/.editorconfig b/test/coverlet.tests.projectsample.wpf8/.editorconfig new file mode 100644 index 000000000..d66ee0772 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8/.editorconfig @@ -0,0 +1,8 @@ +# top-most EditorConfig file +# We don't want to import other EditorConfig files and we want +# to ensure no rules are enabled for these asset source files. +root = true + +[*.cs] +# Default severity for all analyzer diagnostics +dotnet_analyzer_diagnostic.severity = none diff --git a/test/coverlet.tests.projectsample.wpf8/Program.cs b/test/coverlet.tests.projectsample.wpf8/Program.cs new file mode 100644 index 000000000..ba9c1bcd7 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8/Program.cs @@ -0,0 +1,9 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace coverlet.tests.projectsample.wpf8; + +public static class Program +{ + public static void Main() { } +} diff --git a/test/coverlet.tests.projectsample.wpf8/TestClass.cs b/test/coverlet.tests.projectsample.wpf8/TestClass.cs new file mode 100644 index 000000000..e38ac5467 --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8/TestClass.cs @@ -0,0 +1,12 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Windows.Controls; + +namespace coverlet.tests.projectsample.wpf8 +{ + public class TestClass + { + public UserControl? Control { get; set; } + } +} diff --git a/test/coverlet.tests.projectsample.wpf8/coverlet.tests.projectsample.wpf8.csproj b/test/coverlet.tests.projectsample.wpf8/coverlet.tests.projectsample.wpf8.csproj new file mode 100644 index 000000000..cc79d335e --- /dev/null +++ b/test/coverlet.tests.projectsample.wpf8/coverlet.tests.projectsample.wpf8.csproj @@ -0,0 +1,13 @@ + + + + WinExe + net8.0-windows + enable + true + false + true + false + + + diff --git a/test/coverlet.tests.remoteexecutor/coverlet.tests.remoteexecutor.csproj b/test/coverlet.tests.remoteexecutor/coverlet.tests.remoteexecutor.csproj index 5167d6c7e..fbf087e06 100644 --- a/test/coverlet.tests.remoteexecutor/coverlet.tests.remoteexecutor.csproj +++ b/test/coverlet.tests.remoteexecutor/coverlet.tests.remoteexecutor.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net8.0 Coverlet.Tests.RemoteExecutor false false diff --git a/test/coverlet.tests.utils/Properties/AssemblyInfo.cs b/test/coverlet.tests.utils/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..44bd6fece --- /dev/null +++ b/test/coverlet.tests.utils/Properties/AssemblyInfo.cs @@ -0,0 +1,10 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyKeyFile("coverlet.test.utils.snk")] +[assembly: InternalsVisibleTo("coverlet.core.tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100757cf9291d78a82e5bb58a827a3c46c2f959318327ad30d1b52e918321ffbd847fb21565b8576d2a3a24562a93e86c77a298b564a0f1b98f63d7a1441a3a8bcc206da3ed09d5dacc76e122a109a9d3ac608e21a054d667a2bae98510a1f0f653c0e6f58f42b4b3934f6012f5ec4a09b3dfd3e14d437ede1424bdb722aead64ad")] +[assembly: InternalsVisibleTo("coverlet.integration.tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010001d24efbe9cbc2dc49b7a3d2ae34ca37cfb69b4f450acd768a22ce5cd021c8a38ae7dc68b2809a1ac606ad531b578f192a5690b2986990cbda4dd84ec65a3a4c1c36f6d7bb18f08592b93091535eaee2f0c8e48763ed7f190db2008e1f9e0facd5c0df5aaab74febd3430e09a428a72e5e6b88357f92d78e47512d46ebdc3cbb")] + diff --git a/test/coverlet.tests.utils/TestUtils.cs b/test/coverlet.tests.utils/TestUtils.cs new file mode 100644 index 000000000..f24f13399 --- /dev/null +++ b/test/coverlet.tests.utils/TestUtils.cs @@ -0,0 +1,66 @@ +// Copyright (c) Toni Solarin-Sodara +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.IO; + +namespace Coverlet.Tests.Utils +{ + + [Flags] + public enum BuildConfiguration + { + Debug = 1, + Release = 2 + } + + static class TestUtils + { + private static readonly string s_relParent = ".." + Path.DirectorySeparatorChar; + private static readonly string s_rel2Parents = s_relParent + s_relParent; + private static readonly string s_rel3Parents = s_rel2Parents + s_relParent; + private static readonly string s_rel4Parents = s_rel3Parents + s_relParent; + public static BuildConfiguration GetAssemblyBuildConfiguration() + { +#if DEBUG + return BuildConfiguration.Debug; +#endif +#if RELEASE + return BuildConfiguration.Release; +#endif + throw new NotSupportedException($"Build configuration not supported"); + } + + public static string GetAssemblyTargetFramework() + { +#if NET6_0 + return "net6.0"; +#endif +#if NET8_0 + return "net8.0"; +#endif + throw new NotSupportedException($"Build configuration not supported"); + } + + public static string GetTestProjectPath(string directoryName) + { + return Path.Join(Path.GetFullPath(Path.Join(AppContext.BaseDirectory, s_rel4Parents)), "test", directoryName); + } + + public static string GetTestBinaryPath(string directoryName) + { + return Path.Join(Path.GetFullPath(Path.Join(AppContext.BaseDirectory, s_rel2Parents)), directoryName); + } + + public static string GetPackagePath(string buildConfiguration) + { + return Path.Join(Path.GetFullPath(Path.Join(AppContext.BaseDirectory, s_rel3Parents)), "package", buildConfiguration); + } + + public static string GetTestResultsPath(string directoryName) + { + return Path.Join(Path.GetFullPath(Path.Join(AppContext.BaseDirectory, s_rel3Parents)), "testresults", directoryName); + } + + } +} diff --git a/test/coverlet.tests.utils/coverlet.test.utils.snk b/test/coverlet.tests.utils/coverlet.test.utils.snk new file mode 100644 index 000000000..c07d41f2f Binary files /dev/null and b/test/coverlet.tests.utils/coverlet.test.utils.snk differ diff --git a/test/coverlet.tests.utils/coverlet.tests.utils.csproj b/test/coverlet.tests.utils/coverlet.tests.utils.csproj new file mode 100644 index 000000000..ccd6006f3 --- /dev/null +++ b/test/coverlet.tests.utils/coverlet.tests.utils.csproj @@ -0,0 +1,11 @@ + + + + net8.0 + false + false + False + Properties\coverlet.test.utils.snk + + + diff --git a/test/coverlet.tests.xunit.extensions/ConditionalFact.cs b/test/coverlet.tests.xunit.extensions/ConditionalFact.cs index fbcbc82f6..3f7f7798d 100644 --- a/test/coverlet.tests.xunit.extensions/ConditionalFact.cs +++ b/test/coverlet.tests.xunit.extensions/ConditionalFact.cs @@ -8,35 +8,35 @@ namespace Coverlet.Tests.Xunit.Extensions { - [AttributeUsage(AttributeTargets.Method)] - [XunitTestCaseDiscoverer("Coverlet.Tests.Xunit.Extensions." + nameof(ConditionalFactDiscoverer), "coverlet.tests.xunit.extensions")] - public class ConditionalFact : FactAttribute { } + [AttributeUsage(AttributeTargets.Method)] + [XunitTestCaseDiscoverer("Coverlet.Tests.Xunit.Extensions." + nameof(ConditionalFactDiscoverer), "coverlet.tests.xunit.extensions")] + public class ConditionalFact : FactAttribute { } - internal class ConditionalFactDiscoverer : FactDiscoverer - { - public ConditionalFactDiscoverer(IMessageSink diagnosticMessageSink) : base(diagnosticMessageSink) { } + internal class ConditionalFactDiscoverer : FactDiscoverer + { + public ConditionalFactDiscoverer(IMessageSink diagnosticMessageSink) : base(diagnosticMessageSink) { } - protected override IXunitTestCase CreateTestCase(ITestFrameworkDiscoveryOptions discoveryOptions, ITestMethod testMethod, IAttributeInfo factAttribute) - { - return new SkippableTestCase(testMethod.EvaluateSkipConditions(), DiagnosticMessageSink, discoveryOptions.MethodDisplayOrDefault(), discoveryOptions.MethodDisplayOptionsOrDefault(), testMethod); - } + protected override IXunitTestCase CreateTestCase(ITestFrameworkDiscoveryOptions discoveryOptions, ITestMethod testMethod, IAttributeInfo factAttribute) + { + return new SkippableTestCase(testMethod.EvaluateSkipConditions(), DiagnosticMessageSink, discoveryOptions.MethodDisplayOrDefault(), discoveryOptions.MethodDisplayOptionsOrDefault(), testMethod); } + } - internal class SkippableTestCase : XunitTestCase - { - private readonly string _skipReason; + internal class SkippableTestCase : XunitTestCase + { + private readonly string _skipReason; - [Obsolete("Called by the de-serializer; should only be called by deriving classes for de-serialization purposes")] - public SkippableTestCase() { } + [Obsolete("Called by the de-serializer; should only be called by deriving classes for de-serialization purposes")] + public SkippableTestCase() { } - public SkippableTestCase(string skipReason, IMessageSink diagnosticMessageSink, TestMethodDisplay defaultMethodDisplay, TestMethodDisplayOptions defaultMethodDisplayOptions, ITestMethod testMethod, object[] testMethodArguments = null) - : base(diagnosticMessageSink, defaultMethodDisplay, defaultMethodDisplayOptions, testMethod, testMethodArguments) - { - _skipReason = skipReason; - } - protected override string GetSkipReason(IAttributeInfo factAttribute) - { - return _skipReason ?? base.GetSkipReason(factAttribute); - } + public SkippableTestCase(string skipReason, IMessageSink diagnosticMessageSink, TestMethodDisplay defaultMethodDisplay, TestMethodDisplayOptions defaultMethodDisplayOptions, ITestMethod testMethod, object[] testMethodArguments = null) + : base(diagnosticMessageSink, defaultMethodDisplay, defaultMethodDisplayOptions, testMethod, testMethodArguments) + { + _skipReason = skipReason; + } + protected override string GetSkipReason(IAttributeInfo factAttribute) + { + return _skipReason ?? base.GetSkipReason(factAttribute); } + } } diff --git a/test/coverlet.tests.xunit.extensions/Extensions.cs b/test/coverlet.tests.xunit.extensions/Extensions.cs index 2c3ee4a97..17a40b521 100644 --- a/test/coverlet.tests.xunit.extensions/Extensions.cs +++ b/test/coverlet.tests.xunit.extensions/Extensions.cs @@ -7,28 +7,28 @@ namespace Coverlet.Tests.Xunit.Extensions { - internal static class TestMethodExtensions + internal static class TestMethodExtensions + { + public static string EvaluateSkipConditions(this ITestMethod testMethod) { - public static string EvaluateSkipConditions(this ITestMethod testMethod) - { - ITypeInfo testClass = testMethod.TestClass.Class; - IAssemblyInfo assembly = testMethod.TestClass.TestCollection.TestAssembly.Assembly; - System.Collections.Generic.IEnumerable conditionAttributes = testMethod.Method - .GetCustomAttributes(typeof(ITestCondition)) - .Concat(testClass.GetCustomAttributes(typeof(ITestCondition))) - .Concat(assembly.GetCustomAttributes(typeof(ITestCondition))) - .OfType() - .Select(attributeInfo => attributeInfo.Attribute); - - foreach (ITestCondition condition in conditionAttributes) - { - if (!condition.IsMet) - { - return condition.SkipReason; - } - } + ITypeInfo testClass = testMethod.TestClass.Class; + IAssemblyInfo assembly = testMethod.TestClass.TestCollection.TestAssembly.Assembly; + System.Collections.Generic.IEnumerable conditionAttributes = testMethod.Method + .GetCustomAttributes(typeof(ITestCondition)) + .Concat(testClass.GetCustomAttributes(typeof(ITestCondition))) + .Concat(assembly.GetCustomAttributes(typeof(ITestCondition))) + .OfType() + .Select(attributeInfo => attributeInfo.Attribute); - return null; + foreach (ITestCondition condition in conditionAttributes) + { + if (!condition.IsMet) + { + return condition.SkipReason; } + } + + return null; } + } } diff --git a/test/coverlet.tests.xunit.extensions/ITestCondition.cs b/test/coverlet.tests.xunit.extensions/ITestCondition.cs index 874ca7b63..879341601 100644 --- a/test/coverlet.tests.xunit.extensions/ITestCondition.cs +++ b/test/coverlet.tests.xunit.extensions/ITestCondition.cs @@ -3,9 +3,9 @@ namespace Coverlet.Tests.Xunit.Extensions { - public interface ITestCondition - { - bool IsMet { get; } - string SkipReason { get; } - } + public interface ITestCondition + { + bool IsMet { get; } + string SkipReason { get; } + } } diff --git a/test/coverlet.tests.xunit.extensions/Properties/AssemblyInfo.cs b/test/coverlet.tests.xunit.extensions/Properties/AssemblyInfo.cs index 3e03952d4..66d31f1b9 100644 --- a/test/coverlet.tests.xunit.extensions/Properties/AssemblyInfo.cs +++ b/test/coverlet.tests.xunit.extensions/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Toni Solarin-Sodara +// Copyright (c) Toni Solarin-Sodara // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Reflection; diff --git a/test/coverlet.tests.xunit.extensions/SkipOnOS.cs b/test/coverlet.tests.xunit.extensions/SkipOnOS.cs index 9463171fb..a5e3af4cc 100644 --- a/test/coverlet.tests.xunit.extensions/SkipOnOS.cs +++ b/test/coverlet.tests.xunit.extensions/SkipOnOS.cs @@ -6,29 +6,29 @@ namespace Coverlet.Tests.Xunit.Extensions { - public enum OS - { - Linux, - MacOS, - Windows - } + public enum OS + { + Linux, + MacOS, + Windows + } - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] - public class SkipOnOSAttribute : Attribute, ITestCondition - { - private readonly OS _os; - private readonly string _reason; + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] + public class SkipOnOSAttribute : Attribute, ITestCondition + { + private readonly OS _os; + private readonly string _reason; - public SkipOnOSAttribute(OS os, string reason = "") => (_os, _reason) = (os, reason); + public SkipOnOSAttribute(OS os, string reason = "") => (_os, _reason) = (os, reason); - public bool IsMet => _os switch - { - OS.Linux => !RuntimeInformation.IsOSPlatform(OSPlatform.Linux), - OS.MacOS => !RuntimeInformation.IsOSPlatform(OSPlatform.OSX), - OS.Windows => !RuntimeInformation.IsOSPlatform(OSPlatform.Windows), - _ => throw new NotSupportedException($"Not supported OS {_os}") - }; + public bool IsMet => _os switch + { + OS.Linux => !RuntimeInformation.IsOSPlatform(OSPlatform.Linux), + OS.MacOS => !RuntimeInformation.IsOSPlatform(OSPlatform.OSX), + OS.Windows => !RuntimeInformation.IsOSPlatform(OSPlatform.Windows), + _ => throw new NotSupportedException($"Not supported OS {_os}") + }; - public string SkipReason => $"OS not supported{(string.IsNullOrEmpty(_reason) ? "" : $", {_reason}")}"; - } + public string SkipReason => $"OS not supported{(string.IsNullOrEmpty(_reason) ? "" : $", {_reason}")}"; + } } diff --git a/test/coverlet.tests.xunit.extensions/coverlet.tests.xunit.extensions.csproj b/test/coverlet.tests.xunit.extensions/coverlet.tests.xunit.extensions.csproj index 3003d7511..f3b1a3aac 100644 --- a/test/coverlet.tests.xunit.extensions/coverlet.tests.xunit.extensions.csproj +++ b/test/coverlet.tests.xunit.extensions/coverlet.tests.xunit.extensions.csproj @@ -4,9 +4,10 @@ netstandard2.0 false false + false - + diff --git a/test/coverlet.testsubject/coverlet.testsubject.csproj b/test/coverlet.testsubject/coverlet.testsubject.csproj index 3020bf383..c9332c47f 100644 --- a/test/coverlet.testsubject/coverlet.testsubject.csproj +++ b/test/coverlet.testsubject/coverlet.testsubject.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 false false diff --git a/version.json b/version.json index 6176e4b7a..43e490099 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "6.0.1-preview.{height}", + "version": "8.0.0-preview.{height}", "publicReleaseRefSpec": [ "^refs/heads/master$" ],