diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index f31f682..0000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,9 +0,0 @@ -# A CODEOWNERS file uses a pattern that follows the same rules used in gitignore files. -# The pattern is followed by one or more GitHub usernames or team names using the -# standard @username or @org/team-name format. You can also refer to a user by an -# email address that has been added to their GitHub account, for example user@example.com - -.github/* @reactiveui/fusillade-team - -* @reactiveui/fusillade-team -version.json @reactiveui/fusillade-team diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml deleted file mode 100644 index a4dce4c..0000000 --- a/.github/release-drafter.yml +++ /dev/null @@ -1,4 +0,0 @@ -template: | - ## What's Changed - - $CHANGES diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml new file mode 100644 index 0000000..663836b --- /dev/null +++ b/.github/workflows/ci-build.yml @@ -0,0 +1,135 @@ +name: Build + +on: + push: + branches: [ main ] + pull_request: + types: [opened, synchronize, reopened, closed] + branches: [ main ] + +env: + configuration: Release + productNamespacePrefix: "Akavache" + +jobs: + build: + runs-on: windows-latest + outputs: + nbgv: ${{ steps.nbgv.outputs.SemVer2 }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Install .NET Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.x + + - name: Use Node.js + uses: actions/setup-node@v1 + with: + node-version: '12.x' + + - name: NuGet restore + run: dotnet restore + working-directory: src + + - name: NBGV + id: nbgv + uses: dotnet/nbgv@master + with: + setAllVars: true + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v1 + + - name: Build + run: msbuild /t:build,pack /maxcpucount /p:NoPackageAnalysis=true /verbosity:minimal /p:Configuration=${{ env.configuration }} + working-directory: src + + - name: Run Unit Tests and Generate Coverage + uses: glennawatson/coverlet-msbuild@v1 + with: + project-files: '**/*Tests*.csproj' + no-build: true + exclude-filter: '[${{env.productNamespacePrefix}}.*.Tests.*]*' + include-filter: '[${{env.productNamespacePrefix}}*]*' + output-format: opencover + merge-with: '../../artifacts/coverage/coverage.json' + output: '../../artifacts/coverage/' + configuration: ${{ env.configuration }} + + - name: Combine Coverage Reports + shell: bash + run: | + dotnet tool install --global dotnet-reportgenerator-globaltool + reportgenerator -reports:artifacts/coverage/*.xml -targetdir:artifacts/finalcoverage -reporttypes:Cobertura + + - name: Upload Code Coverage + run: | + npm install -g codecov + codecov + working-directory: artifacts/finalcoverage + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + - name: Create NuGet Artifacts + uses: actions/upload-artifact@master + with: + name: nuget + path: '**/*.nupkg' + + release: + runs-on: ubuntu-latest + needs: build + if: contains(github.event.pull_request.labels.*.name, 'release') && github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Download NuGet Packages + uses: actions/download-artifact@v2 + with: + name: nuget + + - name: Save SignClient Configuration + run: 'echo "$SIGN_CLIENT_CONFIG" > SignPackages.json' + shell: bash + env: + SIGN_CLIENT_CONFIG: ${{secrets.SIGN_CLIENT_CONFIG}} + + - name: Sign NuGet Packages + uses: glennawatson/signclient@v1 + with: + input-files: '**/*.nupkg' + sign-client-secret: ${{ secrets.SIGN_CLIENT_SECRET }} + sign-client-user: ${{ secrets.SIGN_CLIENT_USER_ID }} + project-name: reactiveui + description: reactiveui + config-file: SignPackages.json + + - name: Changelog + uses: glennawatson/ChangeLog@v1 + id: changelog + + - name: Create Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ needs.build.outputs.nbgv }} + release_name: ${{ needs.build.outputs.nbgv }} + body: | + ${{ steps.changelog.outputs.commitLog }} + + - name: NuGet Push + env: + NUGET_AUTH_TOKEN: ${{ secrets.NUGET_API_KEY }} + SOURCE_URL: https://api.nuget.org/v3/index.json + run: | + dotnet nuget push -s ${{ env.SOURCE_URL }} -k ${{ env.NUGET_AUTH_TOKEN }} **/*.nupkg + diff --git a/Directory.Build.props b/Directory.Build.props deleted file mode 100644 index faf2919..0000000 --- a/Directory.Build.props +++ /dev/null @@ -1,17 +0,0 @@ - - - .NET Foundation and Contributors - Copyright (c) .NET Foundation and Contributors - MIT - https://github.com/reactiveui/Fusillade - https://github.com/reactiveui/styleguide/blob/master/logo/main.png?raw=true - xanaisbettsx;ghuntley;reactiveui - fusillade, cache, xamarin - https://github.com/reactiveui/Fusillade/releases - https://github.com/reactiveui/Fusillade - https://avatars0.githubusercontent.com/u/5924219?v=3&s=200 - An HttpClient implementation for mobile apps that efficiently schedules and prioritizes requests - git - true - - \ No newline at end of file diff --git a/SignPackages.json b/SignPackages.json deleted file mode 100644 index 3276a45..0000000 --- a/SignPackages.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "SignClient": { - "AzureAd": { - "AADInstance": "https://login.microsoftonline.com/", - "ClientId": "c248d68a-ba6f-4aa9-8a68-71fe872063f8", - "TenantId": "16076fdc-fcc1-4a15-b1ca-32c9a255900e" - }, - "Service": { - "Url": "https://codesign.dotnetfoundation.org/", - "ResourceId": "https://SignService/3c30251f-36f3-490b-a955-520addb85001" - } - } -} \ No newline at end of file diff --git a/azure-pipelines-tests.yml b/azure-pipelines-tests.yml deleted file mode 100644 index 0dcb6ef..0000000 --- a/azure-pipelines-tests.yml +++ /dev/null @@ -1,57 +0,0 @@ -trigger: -- master -- rel/* -- preview/* - -pr: -- master -- rel/* -- preview/* - -pool: - name: Default - -steps: -- task: DotNetCoreInstaller@0 - displayName: Install Dot Net Core v2.2.1 - inputs: - version: '2.2.103' - -- task: BatchScript@1 - inputs: - filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat" - arguments: -no_logo - modifyEnvironment: true - displayName: Setup Environment Variables - -- powershell: .\build.ps1 -Target UploadTestCoverage - displayName: Build - env: - CODECOV_TOKEN: $(CODECOV_TOKEN) - ArtifactDirectory: $(System.DefaultWorkingDirectory)\artifacts - -- task: CopyFiles@2 - inputs: - Contents: 'artifacts/tests/**/*' - TargetFolder: '$(build.artifactstagingdirectory)\Tests' - -- task: PublishBuildArtifacts@1 - displayName: Publish Test Data - inputs: - pathToPublish: '$(build.artifactstagingdirectory)\Tests' - artifactType: container - artifactName: Tests - -- task: PublishCodeCoverageResults@1 - displayName: Publish Coverage Results - inputs: - codeCoverageTool: 'cobertura' - summaryFileLocation: 'artifacts\tests\TestCoverage.xml' - reportDirectory: 'artifacts\tests\Report' - -- task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'VSTest' - testResultsFiles: 'testresults-*.trx' - searchFolder: 'artifacts\tests' \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index ebed753..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,19 +0,0 @@ -trigger: -- main -- rel/* -- preview/* - -pr: -- main -- rel/* -- preview/* - -resources: - repositories: - - repository: templates - type: github - name: ReactiveUI/ReactiveUI.Cake.Recipe - endpoint: reactiveui - -jobs: -- template: Azure/azure-pipelines.yml@templates # Template reference diff --git a/build.cake b/build.cake deleted file mode 100644 index 0e1eff6..0000000 --- a/build.cake +++ /dev/null @@ -1,26 +0,0 @@ -#load nuget:https://www.myget.org/F/reactiveui/api/v2?package=ReactiveUI.Cake.Recipe&prerelease - -Environment.SetVariableNames(); - -// Whitelisted Packages -var packageWhitelist = new[] -{ - MakeAbsolute(File("./src/Fusillade/Fusillade.csproj")), -}; - -var packageTestWhitelist = new[] -{ - MakeAbsolute(File("./src/Fusillade.Tests/Fusillade.Tests.csproj")), -}; - -BuildParameters.SetParameters(context: Context, - buildSystem: BuildSystem, - title: "Fusillade", - whitelistPackages: packageWhitelist, - whitelistTestPackages: packageTestWhitelist, - artifactsDirectory: "./artifacts", - sourceDirectory: "./src"); - -ToolSettings.SetToolSettings(context: Context); - -Build.Run(); diff --git a/build.cmd b/build.cmd deleted file mode 100644 index e5fa880..0000000 --- a/build.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -powershell -ExecutionPolicy Unrestricted ./build.ps1 %CAKE_ARGS% %* diff --git a/build.config b/build.config deleted file mode 100644 index 3aae84f..0000000 --- a/build.config +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -CAKE_VERSION=0.38.1 diff --git a/build.ps1 b/build.ps1 deleted file mode 100644 index 5b0c98e..0000000 --- a/build.ps1 +++ /dev/null @@ -1,112 +0,0 @@ -$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent - -[string] $CakeVersion = '' -foreach($line in Get-Content "$PSScriptRoot\build.config") -{ - if ($line -like 'CAKE_VERSION=*') { - $CakeVersion = $line.SubString(13) - } -} - - -if ([string]::IsNullOrEmpty($CakeVersion)) { - 'Failed to parse Cake Version' - exit 1 -} - -# Make sure tools folder exists -$ToolPath = Join-Path $PSScriptRoot "tools" -if (!(Test-Path $ToolPath)) { - Write-Verbose "Creating tools directory..." - New-Item -Path $ToolPath -Type Directory -Force | out-null -} - - -if ($PSVersionTable.PSEdition -ne 'Core') { - # Attempt to set highest encryption available for SecurityProtocol. - # PowerShell will not set this by default (until maybe .NET 4.6.x). This - # will typically produce a message for PowerShell v2 (just an info - # message though) - try { - # Set TLS 1.2 (3072), then TLS 1.1 (768), then TLS 1.0 (192), finally SSL 3.0 (48) - # Use integers because the enumeration values for TLS 1.2 and TLS 1.1 won't - # exist in .NET 4.0, even though they are addressable if .NET 4.5+ is - # installed (.NET 4.5 is an in-place upgrade). - [System.Net.ServicePointManager]::SecurityProtocol = 3072 -bor 768 -bor 192 -bor 48 - } catch { - Write-Output 'Unable to set PowerShell to use TLS 1.2 and TLS 1.1 due to old .NET Framework installed. If you see underlying connection closed or trust errors, you may need to upgrade to .NET Framework 4.5+ and PowerShell v3' - } -} - -########################################################################### -# INSTALL .NET CORE CLI -########################################################################### - -Function Remove-PathVariable([string]$VariableToRemove) -{ - $SplitChar = ';' - if ($IsMacOS -or $IsLinux) { - $SplitChar = ':' - } - - $path = [Environment]::GetEnvironmentVariable("PATH", "User") - if ($path -ne $null) - { - $newItems = $path.Split($SplitChar, [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove } - [Environment]::SetEnvironmentVariable("PATH", [System.String]::Join($SplitChar, $newItems), "User") - } - - $path = [Environment]::GetEnvironmentVariable("PATH", "Process") - if ($path -ne $null) - { - $newItems = $path.Split($SplitChar, [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove } - [Environment]::SetEnvironmentVariable("PATH", [System.String]::Join($SplitChar, $newItems), "Process") - } -} - -$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 -$env:DOTNET_CLI_TELEMETRY_OPTOUT=1 - -########################################################################### -# INSTALL CAKE -########################################################################### - -# Make sure Cake has been installed. -[string] $CakeExePath = '' -[string] $CakeInstalledVersion = Get-Command dotnet-cake -ErrorAction SilentlyContinue | % {&$_.Source --version} - -if ($CakeInstalledVersion -eq $CakeVersion) { - # Cake found locally - $CakeExePath = (Get-Command dotnet-cake).Source -} -else { - $CakePath = Join-Path $ToolPath ".store\cake.tool\$CakeVersion" - $CakeExePath = (Get-ChildItem -Path $ToolPath -Filter "dotnet-cake*" -File| ForEach-Object FullName | Select-Object -First 1) - - - if ((!(Test-Path -Path $CakePath -PathType Container)) -or (!(Test-Path $CakeExePath -PathType Leaf))) { - - if ((![string]::IsNullOrEmpty($CakeExePath)) -and (Test-Path $CakeExePath -PathType Leaf)) - { - & dotnet tool uninstall --tool-path $ToolPath Cake.Tool - } - - & dotnet tool install --tool-path $ToolPath --version $CakeVersion Cake.Tool - if ($LASTEXITCODE -ne 0) - { - 'Failed to install cake' - exit 1 - } - $CakeExePath = (Get-ChildItem -Path $ToolPath -Filter "dotnet-cake*" -File| ForEach-Object FullName | Select-Object -First 1) - } -} - -########################################################################### -# RUN BUILD SCRIPT -########################################################################### -& "$CakeExePath" ./build.cake --bootstrap -if ($LASTEXITCODE -eq 0) -{ - & "$CakeExePath" ./build.cake $args -} -exit $LASTEXITCODE \ No newline at end of file diff --git a/build.sh b/build.sh deleted file mode 100755 index 8c2183f..0000000 --- a/build.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -# Define varibles -SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -source $SCRIPT_DIR/build.config -TOOLS_DIR=$SCRIPT_DIR/tools -CAKE_EXE=$TOOLS_DIR/dotnet-cake -CAKE_PATH=$TOOLS_DIR/.store/cake.tool/$CAKE_VERSION - -# Make sure the tools folder exist. -if [ ! -d "$TOOLS_DIR" ]; then - mkdir "$TOOLS_DIR" -fi - -########################################################################### -# INSTALL CAKE -########################################################################### -export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 -export DOTNET_CLI_TELEMETRY_OPTOUT=1 -export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0 - -CAKE_INSTALLED_VERSION=$(dotnet-cake --version 2>&1) - -if [ "$CAKE_VERSION" != "$CAKE_INSTALLED_VERSION" ]; then - if [ ! -f "$CAKE_EXE" ] || [ ! -d "$CAKE_PATH" ]; then - if [ -f "$CAKE_EXE" ]; then - dotnet tool uninstall --tool-path $TOOLS_DIR Cake.Tool - fi - - echo "Installing Cake $CAKE_VERSION..." - dotnet tool install --tool-path $TOOLS_DIR --version $CAKE_VERSION Cake.Tool - if [ $? -ne 0 ]; then - echo "An error occured while installing Cake." - exit 1 - fi - fi - - # Make sure that Cake has been installed. - if [ ! -f "$CAKE_EXE" ]; then - echo "Could not find Cake.exe at '$CAKE_EXE'." - exit 1 - fi -else - CAKE_EXE="dotnet-cake" -fi - -########################################################################### -# RUN BUILD SCRIPT -########################################################################### - -# Start Cake -(exec "$CAKE_EXE" --bootstrap) && (exec "$CAKE_EXE" "$@") \ No newline at end of file diff --git a/cake.config b/cake.config deleted file mode 100644 index c26865e..0000000 --- a/cake.config +++ /dev/null @@ -1,7 +0,0 @@ -[Paths] -Tools=./tools -Addins=./tools/Addins -Modules=./tools/Modules - -[NuGet] -UseInProcessClient=true diff --git a/src/ApiGeneratorGlobalSuppressions.cs b/src/ApiGeneratorGlobalSuppressions.cs deleted file mode 100644 index 4cc1e89..0000000 --- a/src/ApiGeneratorGlobalSuppressions.cs +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for full license information. - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddCtorToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddFieldToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.FieldDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMethodToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateDelegateDeclaration(Mono.Cecil.TypeDefinition,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateGenericArguments(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference[]")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetBaseTypes(Mono.Cecil.TypeDefinition)~System.Collections.Generic.IEnumerable{Mono.Cecil.TypeDefinition}")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetMethodAttributes(Mono.Cecil.MethodDefinition)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetPropertyAttributes(System.CodeDom.MemberAttributes,System.CodeDom.MemberAttributes)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetTypeName(Mono.Cecil.TypeReference)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDotNetTypeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ModifyCodeTypeReference(System.CodeDom.CodeTypeReference,System.String)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateGenericParameters(Mono.Cecil.IGenericParameterProvider,System.CodeDom.CodeTypeParameterCollection)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateMethodParameters(Mono.Cecil.IMethodSignature,System.CodeDom.CodeParameterDeclarationExpressionCollection,System.Collections.Generic.HashSet{System.String},System.Boolean)")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.defaultWhitelistedNamespacePrefixes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.defaultWhitelistedNamespacePrefixes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.OperatorNameMap")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.OperatorNameMap")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.SkipAttributeNames")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.SkipAttributeNames")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddCtorToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddCtorToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddFieldToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.FieldDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddFieldToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.FieldDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMethodToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMethodToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ConvertAttributeToCode(System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},Mono.Cecil.CustomAttribute)~System.Object")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ConvertAttributeToCode(System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},Mono.Cecil.CustomAttribute)~System.Object")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateCodeTypeReference(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateCodeTypeReference(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeAttributeDeclarationCollection")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeAttributeDeclarationCollection")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateDelegateDeclaration(Mono.Cecil.TypeDefinition,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateDelegateDeclaration(Mono.Cecil.TypeDefinition,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateGenericArguments(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference[]")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateGenericArguments(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference[]")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreatePublicApiForAssembly(Mono.Cecil.AssemblyDefinition,System.Func{Mono.Cecil.TypeDefinition,System.Boolean},System.Boolean,System.String[],System.Collections.Generic.HashSet{System.String})~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreatePublicApiForAssembly(Mono.Cecil.AssemblyDefinition,System.Func{Mono.Cecil.TypeDefinition,System.Boolean},System.Boolean,System.String[],System.Collections.Generic.HashSet{System.String})~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.FormatParameterConstant(Mono.Cecil.IConstantProvider)~System.Object")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.FormatParameterConstant(Mono.Cecil.IConstantProvider)~System.Object")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GenerateCodeAttributeDeclaration(System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},Mono.Cecil.CustomAttribute)~System.CodeDom.CodeAttributeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GenerateCodeAttributeDeclaration(System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},Mono.Cecil.CustomAttribute)~System.CodeDom.CodeAttributeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GenerateEvent(Mono.Cecil.EventDefinition,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeMember")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GenerateEvent(Mono.Cecil.EventDefinition,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeMember")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetBaseTypes(Mono.Cecil.TypeDefinition)~System.Collections.Generic.IEnumerable{Mono.Cecil.TypeDefinition}")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetBaseTypes(Mono.Cecil.TypeDefinition)~System.Collections.Generic.IEnumerable{Mono.Cecil.TypeDefinition}")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetMethodAttributes(Mono.Cecil.MethodDefinition)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetMethodAttributes(Mono.Cecil.MethodDefinition)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetPropertyAttributes(System.CodeDom.MemberAttributes,System.CodeDom.MemberAttributes)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetPropertyAttributes(System.CodeDom.MemberAttributes,System.CodeDom.MemberAttributes)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetTypeName(Mono.Cecil.TypeReference)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetTypeName(Mono.Cecil.TypeReference)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.HasVisiblePropertyMethod(System.CodeDom.MemberAttributes)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.HasVisiblePropertyMethod(System.CodeDom.MemberAttributes)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsCompilerGenerated(Mono.Cecil.IMemberDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsCompilerGenerated(Mono.Cecil.IMemberDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDelegate(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDelegate(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDotNetTypeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDotNetTypeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsExtensionMethod(Mono.Cecil.ICustomAttributeProvider)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsExtensionMethod(Mono.Cecil.ICustomAttributeProvider)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsHidingMethod(Mono.Cecil.MethodDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsHidingMethod(Mono.Cecil.MethodDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.MakeReadonly(System.CodeDom.CodeTypeReference)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.MakeReadonly(System.CodeDom.CodeTypeReference)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ModifyCodeTypeReference(System.CodeDom.CodeTypeReference,System.String)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ModifyCodeTypeReference(System.CodeDom.CodeTypeReference,System.String)~System.CodeDom.CodeTypeReference")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.NormaliseGeneratedCode(System.IO.StringWriter)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.NormaliseGeneratedCode(System.IO.StringWriter)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.NormaliseLineEndings(System.String)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.NormaliseLineEndings(System.String)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateGenericParameters(Mono.Cecil.IGenericParameterProvider,System.CodeDom.CodeTypeParameterCollection)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateGenericParameters(Mono.Cecil.IGenericParameterProvider,System.CodeDom.CodeTypeParameterCollection)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateMethodParameters(Mono.Cecil.IMethodSignature,System.CodeDom.CodeParameterDeclarationExpressionCollection,System.Collections.Generic.HashSet{System.String},System.Boolean)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateMethodParameters(Mono.Cecil.IMethodSignature,System.CodeDom.CodeParameterDeclarationExpressionCollection,System.Collections.Generic.HashSet{System.String},System.Boolean)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.RemoveUnnecessaryWhiteSpace(System.String)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.RemoveUnnecessaryWhiteSpace(System.String)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeAttribute(Mono.Cecil.CustomAttribute,System.Collections.Generic.HashSet{System.String})~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeAttribute(Mono.Cecil.CustomAttribute,System.Collections.Generic.HashSet{System.String})~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeType(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldIncludeType(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldOutputBaseType(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.ShouldOutputBaseType(Mono.Cecil.TypeDefinition)~System.Boolean")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1400:Access modifier should be declared", Justification = "NuGet Inclusion", Scope = "type", Target = "~T:PublicApiGenerator.CecilEx")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "NuGet Inclusion", Scope = "type", Target = "~T:PublicApiGenerator.CecilEx")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1009:Closing parenthesis should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1003:Symbols should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1009:Closing parenthesis should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1003:Symbols should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1009:Closing parenthesis should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetPropertyAttributes(System.CodeDom.MemberAttributes,System.CodeDom.MemberAttributes)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1003:Symbols should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetPropertyAttributes(System.CodeDom.MemberAttributes,System.CodeDom.MemberAttributes)~System.CodeDom.MemberAttributes")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1009:Closing parenthesis should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.RemoveUnnecessaryWhiteSpace(System.String)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1122:Use string.Empty for empty strings", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GetTypeName(Mono.Cecil.TypeReference)~System.String")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1305:Specify IFormatProvider", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateGenericArguments(Mono.Cecil.TypeReference)~System.CodeDom.CodeTypeReference[]")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreatePublicApiForAssembly(Mono.Cecil.AssemblyDefinition,System.Func{Mono.Cecil.TypeDefinition,System.Boolean},System.Boolean,System.String[],System.Collections.Generic.HashSet{System.String})~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GenerateCodeAttributeDeclaration(System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},Mono.Cecil.CustomAttribute)~System.CodeDom.CodeAttributeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1513:Closing brace should be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateGenericParameters(Mono.Cecil.IGenericParameterProvider,System.CodeDom.CodeTypeParameterCollection)")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "RCS1001:Add braces (when expression spans over multiple lines).", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1117:Parameters should be on same line or separate lines", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.GeneratePublicApi(System.Reflection.Assembly,System.Type[],System.Boolean,System.String[],System.String[])~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1117:Parameters should be on same line or separate lines", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.NormaliseGeneratedCode(System.IO.StringWriter)~System.String")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMemberToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.IMemberDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeAttributeDeclarationCollection")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateCustomAttributes(Mono.Cecil.ICustomAttributeProvider,System.CodeDom.CodeAttributeDeclarationCollection,System.Func{System.CodeDom.CodeTypeReference,System.CodeDom.CodeTypeReference},System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.PopulateMethodParameters(Mono.Cecil.IMethodSignature,System.CodeDom.CodeParameterDeclarationExpressionCollection,System.Collections.Generic.HashSet{System.String},System.Boolean)")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1116:Split parameters should start on line after declaration", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.RemoveUnnecessaryWhiteSpace(System.String)~System.String")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1000:Keywords should be spaced correctly", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1209:Using alias directives should be placed after other using directives", Justification = "NuGet Inclusion")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1210:Using directives should be ordered alphabetically by namespace", Justification = "NuGet Inclusion")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1208:System using directives should be placed before other using directives", Justification = "NuGet Inclusion")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1201:Elements should appear in the correct order", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.OperatorNameMap")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1201:Elements should appear in the correct order", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.SkipAttributeNames")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1825:Avoid zero-length array allocations.", Justification = "NuGet Inclusion", Scope = "member", Target = "~F:PublicApiGenerator.ApiGenerator.defaultWhitelistedNamespacePrefixes")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1307:Specify StringComparison", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMethodToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1307:Specify StringComparison", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.IsDotNetTypeMember(Mono.Cecil.IMemberDefinition,System.String[])~System.Boolean")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1512:Single-line comments should not be followed by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddPropertyToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.PropertyDefinition,System.Collections.Generic.HashSet{System.String})")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1515:Single-line comment should be preceded by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.AddMethodToTypeDeclaration(System.CodeDom.CodeTypeDeclaration,Mono.Cecil.MethodDefinition,System.Collections.Generic.HashSet{System.String})")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1515:Single-line comment should be preceded by blank line", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1520:Use braces consistently", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateTypeDeclaration(Mono.Cecil.TypeDefinition,System.String[],System.Collections.Generic.HashSet{System.String})~System.CodeDom.CodeTypeDeclaration")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "NuGet Inclusion", Scope = "type", Target = "~T:PublicApiGenerator.CecilEx")] - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1005:Single line comments should begin with single space", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.CreateInitialiserExpression(Mono.Cecil.CustomAttributeArgument)~System.CodeDom.CodeExpression")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1111:Closing parenthesis should be on line of last parameter", Justification = "NuGet Inclusion", Scope = "member", Target = "~M:PublicApiGenerator.ApiGenerator.RemoveUnnecessaryWhiteSpace(System.String)~System.String")] diff --git a/src/Directory.build.props b/src/Directory.build.props index 7e72a39..f3f0134 100644 --- a/src/Directory.build.props +++ b/src/Directory.build.props @@ -16,42 +16,45 @@ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - false - $(EnableSourceLink) - $(MSBuildThisFileDirectory)analyzers.tests.ruleset false + - + - - - - + + + + + all + runtime; build; native; contentfiles; analyzers + + - - - - + + + + - + + - - - + + + + - \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.approved.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.approved.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.approved.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.received.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.received.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net461.received.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.approved.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.approved.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.approved.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.received.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.received.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.net472.received.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.approved.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.approved.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.approved.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.received.txt b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.received.txt new file mode 100644 index 0000000..31beed9 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.FusilladeTests.netcoreapp3.1.received.txt @@ -0,0 +1,43 @@ +[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +namespace Fusillade +{ + public interface IRequestCache + { + System.Threading.Tasks.Task Fetch(System.Net.Http.HttpRequestMessage request, string key, System.Threading.CancellationToken ct); + System.Threading.Tasks.Task Save(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, string key, System.Threading.CancellationToken ct); + } + public abstract class LimitingHttpMessageHandler : System.Net.Http.DelegatingHandler + { + public LimitingHttpMessageHandler() { } + public LimitingHttpMessageHandler(System.Net.Http.HttpMessageHandler innerHandler) { } + public abstract void ResetLimit(long? maxBytesToRead = default); + } + public static class NetCache + { + public static System.Net.Http.HttpMessageHandler Background { get; set; } + public static System.Net.Http.HttpMessageHandler Offline { get; set; } + public static Punchclock.OperationQueue OperationQueue { get; set; } + public static Fusillade.IRequestCache? RequestCache { get; set; } + public static Fusillade.LimitingHttpMessageHandler Speculative { get; set; } + public static System.Net.Http.HttpMessageHandler UserInitiated { get; set; } + } + public class OfflineHttpMessageHandler : System.Net.Http.HttpMessageHandler + { + public OfflineHttpMessageHandler(System.Func>? retrieveBodyFunc) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + } + public enum Priority + { + Speculative = 10, + UserInitiated = 100, + Background = 20, + Explicit = 0, + } + public class RateLimitedHttpMessageHandler : Fusillade.LimitingHttpMessageHandler + { + public RateLimitedHttpMessageHandler(System.Net.Http.HttpMessageHandler handler, Fusillade.Priority basePriority, int priority = 0, long? maxBytesToRead = default, Punchclock.OperationQueue? opQueue = null, System.Func? cacheResultFunc = null) { } + public override void ResetLimit(long? maxBytesToRead = default) { } + protected override System.Threading.Tasks.Task SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { } + public static string UniqueKeyForRequest(System.Net.Http.HttpRequestMessage request) { } + } +} \ No newline at end of file diff --git a/src/Fusillade.Tests/API/ApiApprovalTests.cs b/src/Fusillade.Tests/API/ApiApprovalTests.cs new file mode 100644 index 0000000..53d8281 --- /dev/null +++ b/src/Fusillade.Tests/API/ApiApprovalTests.cs @@ -0,0 +1,93 @@ +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for full license information. + +using System; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; + +using Akavache.Sqlite3; + +using DiffEngine; + +using Fusillade; + +using PublicApiGenerator; + +using Splat; + +using Xunit; + +namespace Fusillade.APITests +{ + /// + /// Tests for handling API approval. + /// + [ExcludeFromCodeCoverage] + public class ApiApprovalTests + { + private static readonly Regex _removeCoverletSectionRegex = new Regex(@"^namespace Coverlet\.Core\.Instrumentation\.Tracker.*?^}", RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.Compiled); + + /// + /// Tests to make sure the akavache project is approved. + /// + [Fact] + public void FusilladeTests() + { + CheckApproval(typeof(OfflineHttpMessageHandler).Assembly); + } + + private static void CheckApproval(Assembly assembly, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null) + { + var targetFrameworkName = Assembly.GetExecutingAssembly().GetTargetFrameworkName(); + + var sourceDirectory = Path.GetDirectoryName(filePath); + + var approvedFileName = Path.Combine(sourceDirectory, $"ApiApprovalTests.{memberName}.{targetFrameworkName}.approved.txt"); + var receivedFileName = Path.Combine(sourceDirectory, $"ApiApprovalTests.{memberName}.{targetFrameworkName}.received.txt"); + + if (!File.Exists(receivedFileName)) + { + File.Create(receivedFileName).Close(); + } + + if (!File.Exists(approvedFileName)) + { + File.Create(approvedFileName).Close(); + } + + var approvedPublicApi = File.ReadAllText(approvedFileName); + + var generatorOptions = new ApiGeneratorOptions { WhitelistedNamespacePrefixes = new[] { "Akavache" } }; + var receivedPublicApi = Filter(assembly.GeneratePublicApi(generatorOptions)); + + if (!string.Equals(receivedPublicApi, approvedPublicApi, StringComparison.InvariantCulture)) + { + File.WriteAllText(receivedFileName, receivedPublicApi); + DiffRunner.Launch(receivedFileName, approvedFileName); + } + + Assert.Equal(approvedPublicApi, receivedPublicApi); + } + + private static string Filter(string text) + { + text = _removeCoverletSectionRegex.Replace(text, string.Empty); + return string.Join(Environment.NewLine, text.Split( + new[] + { + Environment.NewLine + }, StringSplitOptions.RemoveEmptyEntries) + .Where(l => + !l.StartsWith("[assembly: AssemblyVersion(", StringComparison.InvariantCulture) && + !l.StartsWith("[assembly: AssemblyFileVersion(", StringComparison.InvariantCulture) && + !l.StartsWith("[assembly: AssemblyInformationalVersion(", StringComparison.InvariantCulture) && + !string.IsNullOrWhiteSpace(l))); + } + } +} diff --git a/src/Fusillade.Tests/Fusillade.Tests.csproj b/src/Fusillade.Tests/Fusillade.Tests.csproj index 1c86f04..7e6cbb9 100644 --- a/src/Fusillade.Tests/Fusillade.Tests.csproj +++ b/src/Fusillade.Tests/Fusillade.Tests.csproj @@ -1,8 +1,10 @@  - netcoreapp2.2 - $(TargetFrameworks);net472 + netcoreapp3.1 + $(TargetFrameworks);net461 $(NoWarn);1591;CA1707;SA1633 + latest + $(NoWarn);CA2000;CA1031;CA1307;CA1305 @@ -10,9 +12,9 @@ - + - - + + \ No newline at end of file diff --git a/src/Fusillade.Tests/Http/BaseHttpSchedulerSharedTests.cs b/src/Fusillade.Tests/Http/BaseHttpSchedulerSharedTests.cs index ee67902..329f3c2 100644 --- a/src/Fusillade.Tests/Http/BaseHttpSchedulerSharedTests.cs +++ b/src/Fusillade.Tests/Http/BaseHttpSchedulerSharedTests.cs @@ -8,8 +8,12 @@ namespace Fusillade.Tests { + /// + /// Checks to make sure the base http scheduler works. + /// public class BaseHttpSchedulerSharedTests : HttpSchedulerSharedTests { + /// protected override LimitingHttpMessageHandler CreateFixture(HttpMessageHandler innerHandler) { return new RateLimitedHttpMessageHandler(innerHandler, Priority.UserInitiated, opQueue: new OperationQueue(4)); diff --git a/src/Fusillade.Tests/Http/HttpSchedulerCachingTests.cs b/src/Fusillade.Tests/Http/HttpSchedulerCachingTests.cs index 6443940..a02ec32 100644 --- a/src/Fusillade.Tests/Http/HttpSchedulerCachingTests.cs +++ b/src/Fusillade.Tests/Http/HttpSchedulerCachingTests.cs @@ -3,7 +3,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. -using Akavache; using System; using System.Collections.Generic; using System.Linq; @@ -13,12 +12,20 @@ using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; +using Akavache; using Xunit; namespace Fusillade.Tests.Http { + /// + /// Checks to make sure that the http scheduler caches correctly. + /// public class HttpSchedulerCachingTests { + /// + /// Checks to make sure that the caching functiosn are only called with content. + /// + /// A task to monitor the progress. [Fact] public async Task CachingFunctionShouldBeCalledWithContent() { @@ -45,6 +52,10 @@ public async Task CachingFunctionShouldBeCalledWithContent() Assert.Equal(3, contentResponses[0].Length); } + /// + /// Checks to make sure that the cache preserves the http headers. + /// + /// A task to monitor the progress. [Fact] public async Task CachingFunctionShouldPreserveHeaders() { @@ -72,6 +83,10 @@ public async Task CachingFunctionShouldPreserveHeaders() Assert.Equal("\"worifjw\"", etagResponses[0]); } + /// + /// Does a round trip integration test. + /// + /// A task to monitor the progress. [Fact] public async Task RoundTripIntegrationTest() { @@ -110,6 +125,12 @@ public async Task RoundTripIntegrationTest() Assert.False(shouldDie); } + /// + /// Checks that only relevant http methods are cached. + /// + /// The name of the method. + /// If it should be cached or not. + /// A task to monitor the progress. [Theory] [InlineData("GET", true)] [InlineData("HEAD", true)] diff --git a/src/Fusillade.Tests/Http/HttpSchedulerSharedTests.cs b/src/Fusillade.Tests/Http/HttpSchedulerSharedTests.cs index 16cb7a7..9ce7e52 100644 --- a/src/Fusillade.Tests/Http/HttpSchedulerSharedTests.cs +++ b/src/Fusillade.Tests/Http/HttpSchedulerSharedTests.cs @@ -25,8 +25,15 @@ namespace Fusillade.Tests { + /// + /// Base class full of common requests. + /// public abstract class HttpSchedulerSharedTests { + /// + /// Checks to make sure a dummy request is completed. + /// + /// A task to monitor the progress. [Fact] public async Task HttpSchedulerShouldCompleteADummyRequest() { @@ -59,6 +66,9 @@ public async Task HttpSchedulerShouldCompleteADummyRequest() Assert.Equal(3 /*foo*/, bytes.Length); } + /// + /// Checks to make sure that the http scheduler doesn't do too much scheduling all at once. + /// [Fact] public void HttpSchedulerShouldntScheduleLotsOfStuffAtOnce() { @@ -66,7 +76,7 @@ public void HttpSchedulerShouldntScheduleLotsOfStuffAtOnce() var scheduledCount = default(int); var completedCount = default(int); - new TestScheduler().WithAsync(async sched => + new TestScheduler().WithAsync(_ => { var fixture = CreateFixture(new TestHttpMessageHandler(rq => { @@ -118,9 +128,15 @@ public void HttpSchedulerShouldntScheduleLotsOfStuffAtOnce() Assert.Equal(5, scheduledCount); Assert.Equal(5, completedCount); + + return Task.CompletedTask; }); } + /// + /// Checks to make sure that the rate limited scheduler stops after content limit has been reached. + /// + /// A task to monitor the progress. [Fact] public async Task RateLimitedSchedulerShouldStopAfterContentLimitReached() { @@ -158,6 +174,10 @@ public async Task RateLimitedSchedulerShouldStopAfterContentLimitReached() await Assert.ThrowsAsync(() => client.SendAsync(rq)).ConfigureAwait(false); } + /// + /// Tests to make sure that concurrent requests aren't debounced. + /// + /// A task to monitor the progress. [Fact] public async Task ConcurrentRequestsToTheSameResourceAreDebounced() { @@ -195,14 +215,18 @@ public async Task ConcurrentRequestsToTheSameResourceAreDebounced() gate.OnNext(Unit.Default); gate.OnNext(Unit.Default); - var resp1 = await resp1Task; - var resp2 = await resp2Task; + var resp1 = await resp1Task.ConfigureAwait(false); + var resp2 = await resp2Task.ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, resp1.StatusCode); Assert.Equal(HttpStatusCode.OK, resp2.StatusCode); Assert.Equal(1, messageCount); } + /// + /// Checks to make sure that requests don't get unfairly cancelled. + /// + /// A task to monitor the progress. [Fact] public async Task DebouncedRequestsDontGetUnfairlyCancelled() { @@ -254,12 +278,16 @@ public async Task DebouncedRequestsDontGetUnfairlyCancelled() gate.OnNext(Unit.Default); await Assert.ThrowsAsync(() => resp1Task).ConfigureAwait(false); - var resp2 = await resp2Task; + var resp2 = await resp2Task.ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, resp2.StatusCode); Assert.Equal(1, messageCount); } + /// + /// Checks to make sure that different paths aren't debounced. + /// + /// A task to monitor the progress. [Fact] public async Task RequestsToDifferentPathsArentDebounced() { @@ -297,14 +325,18 @@ public async Task RequestsToDifferentPathsArentDebounced() gate.OnNext(Unit.Default); gate.OnNext(Unit.Default); - var resp1 = await resp1Task; - var resp2 = await resp2Task; + var resp1 = await resp1Task.ConfigureAwait(false); + var resp2 = await resp2Task.ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, resp1.StatusCode); Assert.Equal(HttpStatusCode.OK, resp2.StatusCode); Assert.Equal(2, messageCount); } + /// + /// Tests if a debounce is fully cancelling requests. + /// + /// A task to monitor the progress. [Fact] public async Task FullyCancelledDebouncedRequestsGetForRealCancelled() { @@ -368,10 +400,16 @@ public async Task FullyCancelledDebouncedRequestsGetForRealCancelled() Assert.Equal(0, finalMessageCount); } + /// + /// Attempts to download a release from github to test the filters. + /// + /// A task to monitor the progress. [Fact] [Trait("Slow", "Very Yes")] public async Task DownloadARelease() { + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + var input = @"https://github.com/akavache/Akavache/releases/download/3.2.0/Akavache.3.2.0.zip"; var fixture = CreateFixture(new HttpClientHandler() { @@ -387,6 +425,11 @@ public async Task DownloadARelease() Assert.Equal(8089690, bytes.Length); } + /// + /// Creates the test fixtures. + /// + /// The inner handler. + /// The limiting handler. protected abstract LimitingHttpMessageHandler CreateFixture(HttpMessageHandler innerHandler = null); } } diff --git a/src/Fusillade.Tests/Http/TestHttpMessageHandler.cs b/src/Fusillade.Tests/Http/TestHttpMessageHandler.cs index 7b3a27e..0621bfd 100644 --- a/src/Fusillade.Tests/Http/TestHttpMessageHandler.cs +++ b/src/Fusillade.Tests/Http/TestHttpMessageHandler.cs @@ -4,23 +4,31 @@ // See the LICENSE file in the project root for full license information. using System; -using System.Threading.Tasks; using System.Net.Http; -using System.Threading; -using System.Reactive.Threading.Tasks; using System.Reactive.Linq; +using System.Reactive.Threading.Tasks; +using System.Threading; +using System.Threading.Tasks; namespace Fusillade.Tests { + /// + /// Tests the main http scheduler. + /// public class TestHttpMessageHandler : HttpMessageHandler { private Func> _block; + /// + /// Initializes a new instance of the class. + /// + /// Creates a http response. public TestHttpMessageHandler(Func> createResult) { _block = createResult; } + /// protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) diff --git a/src/Fusillade.Tests/IntegrationTestHelper.cs b/src/Fusillade.Tests/IntegrationTestHelper.cs index 42eed57..eacc6f5 100644 --- a/src/Fusillade.Tests/IntegrationTestHelper.cs +++ b/src/Fusillade.Tests/IntegrationTestHelper.cs @@ -13,14 +13,26 @@ namespace Fusillade.Tests { + /// + /// A helper for performing integration tests. + /// public static class IntegrationTestHelper { + /// + /// Combines together paths together and then gets a full path. + /// + /// The paths to combine. + /// The string path. public static string GetPath(params string[] paths) { var ret = GetIntegrationTestRootDirectory(); return new FileInfo(paths.Aggregate(ret, Path.Combine)).FullName; } + /// + /// Gets the root directory for the integration test. + /// + /// The path. public static string GetIntegrationTestRootDirectory() { // XXX: This is an evil hack, but it's okay for a unit test @@ -29,6 +41,11 @@ public static string GetIntegrationTestRootDirectory() return Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName; } + /// + /// Creates a response from a sample file with the data. + /// + /// The path to the file. + /// The generated response. public static HttpResponseMessage GetResponse(params string[] paths) { var bytes = File.ReadAllBytes(GetPath(paths)); diff --git a/src/Fusillade.nuspec b/src/Fusillade.nuspec deleted file mode 100644 index 7a43327..0000000 --- a/src/Fusillade.nuspec +++ /dev/null @@ -1,19 +0,0 @@ - - - - $version - - - - - - - fusillade - Fusillade: An Opinionated HTTP Library for Mobile - An HttpClient implementation for mobile apps that efficiently schedules and prioritizes requests - An HttpClient implementation for mobile apps that efficiently schedules and prioritizes requests - - - - - diff --git a/src/Fusillade.sln b/src/Fusillade.sln index 9e27690..b8b5458 100644 --- a/src/Fusillade.sln +++ b/src/Fusillade.sln @@ -1,11 +1,20 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.10 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30611.23 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fusillade", "Fusillade\Fusillade.csproj", "{26493C47-6A4A-4F2A-9F92-046AA8CD95CC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fusillade.Tests", "Fusillade.Tests\Fusillade.Tests.csproj", "{BA0745E4-4566-4655-B83C-B4398F67DC39}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fusillade.Tests", "Fusillade.Tests\Fusillade.Tests.csproj", "{BA0745E4-4566-4655-B83C-B4398F67DC39}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6B92A58B-DD1B-4AFF-A3CA-D51CBEB7B43D}" + ProjectSection(SolutionItems) = preProject + analyzers.ruleset = analyzers.ruleset + Directory.build.props = Directory.build.props + Directory.build.targets = Directory.build.targets + global.json = global.json + stylecop.json = stylecop.json + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/Fusillade/ConcatenateMixin.cs b/src/Fusillade/ConcatenateMixin.cs index e84c499..b12eda7 100644 --- a/src/Fusillade/ConcatenateMixin.cs +++ b/src/Fusillade/ConcatenateMixin.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/Fusillade.csproj b/src/Fusillade/Fusillade.csproj index a50138f..fd2d20d 100644 --- a/src/Fusillade/Fusillade.csproj +++ b/src/Fusillade/Fusillade.csproj @@ -5,12 +5,13 @@ latest enable CS8625;CS8604;CS8600;CS8614;CS8603;CS8618;CS8619 + latest - + diff --git a/src/Fusillade/IRequestCache.cs b/src/Fusillade/IRequestCache.cs index d0c5aa0..b2f800a 100644 --- a/src/Fusillade/IRequestCache.cs +++ b/src/Fusillade/IRequestCache.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/InflightRequest.cs b/src/Fusillade/InflightRequest.cs index f7c7816..79a1402 100644 --- a/src/Fusillade/InflightRequest.cs +++ b/src/Fusillade/InflightRequest.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/LimitingHttpMessageHandler.cs b/src/Fusillade/LimitingHttpMessageHandler.cs index 29e82fa..9aa546d 100644 --- a/src/Fusillade/LimitingHttpMessageHandler.cs +++ b/src/Fusillade/LimitingHttpMessageHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/NetCache.cs b/src/Fusillade/NetCache.cs index 76e7735..86400e8 100644 --- a/src/Fusillade/NetCache.cs +++ b/src/Fusillade/NetCache.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. @@ -38,6 +38,7 @@ public static class NetCache /// /// Initializes static members of the class. /// + [SuppressMessage("Reliability", "CA2000:Dispose objects before losing scope", Justification = "Global lifetime")] static NetCache() { var innerHandler = Locator.Current.GetService() ?? new HttpClientHandler(); diff --git a/src/Fusillade/OfflineHttpMessageHandler.cs b/src/Fusillade/OfflineHttpMessageHandler.cs index 12e1cc5..e43509a 100644 --- a/src/Fusillade/OfflineHttpMessageHandler.cs +++ b/src/Fusillade/OfflineHttpMessageHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/Priority.cs b/src/Fusillade/Priority.cs index 9a5da80..d29437a 100644 --- a/src/Fusillade/Priority.cs +++ b/src/Fusillade/Priority.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/Fusillade/RateLimitedHttpMessageHandler.cs b/src/Fusillade/RateLimitedHttpMessageHandler.cs index 00c9470..8572cb0 100644 --- a/src/Fusillade/RateLimitedHttpMessageHandler.cs +++ b/src/Fusillade/RateLimitedHttpMessageHandler.cs @@ -1,10 +1,11 @@ -// Copyright (c) 2019 .NET Foundation and Contributors. All rights reserved. +// Copyright (c) 2020 .NET Foundation and Contributors. All rights reserved. // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; @@ -58,6 +59,11 @@ public RateLimitedHttpMessageHandler(HttpMessageHandler handler, Priority basePr /// The unique key. public static string UniqueKeyForRequest(HttpRequestMessage request) { + if (request is null) + { + throw new ArgumentNullException(nameof(request)); + } + var ret = new[] { request.RequestUri.ToString(), @@ -89,8 +95,14 @@ public override void ResetLimit(long? maxBytesToRead = null) } /// + [SuppressMessage("Reliability", "CA2000:Dispose objects before losing scope", Justification = "Doesn't need to be disposed.")] protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + if (request is null) + { + throw new ArgumentNullException(nameof(request)); + } + var method = request.Method; if (method != HttpMethod.Get && method != HttpMethod.Head && method != HttpMethod.Options) { diff --git a/src/analyzers.tests.ruleset b/src/analyzers.tests.ruleset deleted file mode 100644 index 191cfed..0000000 --- a/src/analyzers.tests.ruleset +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/global.json b/src/global.json index 1e4edb3..f8f6c58 100644 --- a/src/global.json +++ b/src/global.json @@ -1,5 +1,5 @@ { "msbuild-sdks": { - "MSBuild.Sdk.Extras": "1.6.68" + "MSBuild.Sdk.Extras": "2.1.2" } } diff --git a/src/stylecop.json b/src/stylecop.json index 66c88ad..d4f791e 100644 --- a/src/stylecop.json +++ b/src/stylecop.json @@ -13,7 +13,7 @@ "documentPrivateFields": false, "documentationCulture": "en-US", "companyName": ".NET Foundation and Contributors", - "copyrightText": "Copyright (c) 2019 {companyName}. All rights reserved.\nLicensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the {licenseName} license.\nSee the {licenseFile} file in the project root for full license information.", + "copyrightText": "Copyright (c) 2020 {companyName}. All rights reserved.\nLicensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the {licenseName} license.\nSee the {licenseFile} file in the project root for full license information.", "variables": { "licenseName": "MIT", "licenseFile": "LICENSE" @@ -36,6 +36,6 @@ "orderingRules": { "usingDirectivesPlacement": "outsideNamespace", "systemUsingDirectivesFirst": true - }, + } } }