diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 00000000..caaa013e --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,19 @@ + + + $(MsBuildAllProjects);$(MsBuildThisFileFullPath) + + + + 1.0.9.1 + + + + + + + + $(Prerelease)-1$(BUILD_BUILDID) + + + + \ No newline at end of file diff --git a/README.md b/README.md index a91e56bc..c4da40ec 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ This is a **.NET Core / Standard port** of the Microsoft assembly for the .Net 4 # Overview With this library it's possible to write Dynamic LINQ queries (string based) on an `IQueryable`: -```csharp +``` c# var query = db.Customers .Where("City == @0 and Orders.Count >= @1", "London", 10) .OrderBy("CompanyName") @@ -24,7 +24,7 @@ There are several documentation resources: |   **Issues** | [![GitHub issues](https://img.shields.io/github/issues/StefH/System.Linq.Dynamic.Core.svg)](https://github.com/StefH/System.Linq.Dynamic.Core/issues) | | | | | ***Quality*** |   | -|   **Build** | [![Build status](https://ci.appveyor.com/api/projects/status/0c4v2bsvdqd57600?svg=true)](https://ci.appveyor.com/project/StefH/system-linq-dynamic-core) | +|   **Build Azure** | [![Build Status Azure](https://stef.visualstudio.com/System.Linq.Dynamic.Core/_apis/build/status/StefH.System.Linq.Dynamic.Core)](https://stef.visualstudio.com/System.Linq.Dynamic.Core/_build/latest?definitionId=12) | |   **CodeFactor** | [![CodeFactor](https://www.codefactor.io/repository/github/stefh/system.linq.dynamic.core/badge)](https://www.codefactor.io/repository/github/stefh/system.linq.dynamic.core) |   **Sonar Quality Gate** | [![Sonar Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=system.linq.dynamic.core&metric=alert_status)](https://sonarcloud.io/project/issues?id=system.linq.dynamic.core) | |   **Sonar Bugs** | [![Sonar Bugs](https://sonarcloud.io/api/project_badges/measure?project=system.linq.dynamic.core&metric=bugs)](https://sonarcloud.io/project/issues?id=system.linq.dynamic.core&resolved=false&types=BUG) | @@ -34,10 +34,13 @@ There are several documentation resources: |   **Coveralls** | [![Coverage Status](https://coveralls.io/repos/github/StefH/System.Linq.Dynamic.Core/badge.svg?branch=master)](https://coveralls.io/github/StefH/System.Linq.Dynamic.Core?branch=master) | | | | ***Nuget*** |   | -|   **System.Linq.Dynamic.Core** | [![NuGet Badge](https://buildstats.info/nuget/System.Linq.Dynamic.Core)](https://www.nuget.org/packages/System.Linq.Dynamic.Core) | -|   **EntityFramework.DynamicLinq** | [![NuGet Badge](https://buildstats.info/nuget/EntityFramework.DynamicLinq)](https://www.nuget.org/packages/EntityFramework.DynamicLinq) | -|   **Microsoft.EntityFrameworkCore.DynamicLinq** | [![NuGet Badge](https://buildstats.info/nuget/Microsoft.EntityFrameworkCore.DynamicLinq)](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq) | - +|   **System.Linq.Dynamic.Core** | [![NuGet](https://buildstats.info/nuget/System.Linq.Dynamic.Core)](https://www.nuget.org/packages/System.Linq.Dynamic.Core) | +|   **EntityFramework.DynamicLinq** | [![NuGet](https://buildstats.info/nuget/EntityFramework.DynamicLinq)](https://www.nuget.org/packages/EntityFramework.DynamicLinq) | +|   **Microsoft.EntityFrameworkCore.DynamicLinq** | [![NuGet](https://buildstats.info/nuget/Microsoft.EntityFrameworkCore.DynamicLinq)](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq) | +| ***MyGet (previews)*** |   | +|   **System.Linq.Dynamic.Core** | [![MyGet](https://buildstats.info/myget/system-linq-dynamic-core/System.Linq.Dynamic.Core)](https://www.myget.org/feed/system-linq-dynamic-corepackage/nuget/System.Linq.Dynamic.Core) | +|   **EntityFramework.DynamicLinq** | [![MyGet](https://buildstats.info/myget/system-linq-dynamic-core/EntityFramework.DynamicLinq)](https://www.myget.org/feed/system-linq-dynamic-corepackage/nuget/EntityFramework.DynamicLinq) | +|   **Microsoft.EntityFrameworkCore.DynamicLinq** | [![MyGet](https://buildstats.info/myget/system-linq-dynamic-core/Microsoft.EntityFrameworkCore.DynamicLinq)](https://www.myget.org/feed/system-linq-dynamic-corepackage/nuget/Microsoft.EntityFrameworkCore.DynamicLinq) | # Development Details diff --git a/System.Linq.Dynamic.Core.sln b/System.Linq.Dynamic.Core.sln index 4b2a374d..c0f35bd0 100644 --- a/System.Linq.Dynamic.Core.sln +++ b/System.Linq.Dynamic.Core.sln @@ -11,12 +11,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject .deployment = .deployment appveyor.yml = appveyor.yml + azure-pipelines.yml = azure-pipelines.yml CHANGELOG.md = CHANGELOG.md ChangeLog.txt = ChangeLog.txt - codecov-local.cmd = codecov-local.cmd - codecov.yml = codecov.yml + Directory.Build.props = Directory.Build.props LICENSE = LICENSE README.md = README.md + report\run-coverlet-local.cmd = report\run-coverlet-local.cmd EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFramework.DynamicLinq.Tests.net452", "test\EntityFramework.DynamicLinq.Tests.net452\EntityFramework.DynamicLinq.Tests.net452.csproj", "{6B45E89C-0788-4942-924F-EF6397114BD1}" diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 00000000..69c70a5a --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,86 @@ +pool: + vmImage: 'vs2017-win2016' + +variables: + Prerelease: 'ci' + buildType: 'azure-pipelines-ci' + buildId: "1$(Build.BuildId)" + buildProjects: '**/src/**/+(System.Linq.Dynamic.Core|EntityFramework.DynamicLinq|Microsoft.EntityFrameworkCore.DynamicLinq).csproj' + +steps: +# Print buildId +- script: | + echo "BuildId = $(buildId)" + displayName: 'Print buildId' + +# Install SonarScanner +- script: | + dotnet tool install --global dotnet-sonarscanner + displayName: Install SonarScanner + +# Begin SonarScanner +# See also +# - https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools, else you get this error: `Since you just installed the .NET Core SDK, you will need to reopen the Command Prompt window before running the tool you installed.` +# - https://github.com/dotnet/cli/issues/8368 +# - https://github.com/Microsoft/vsts-tasks/issues/8291 +# +- script: | + %USERPROFILE%\.dotnet\tools\dotnet-sonarscanner begin /k:"system.linq.dynamic.core" /d:sonar.organization="stefh-github" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.login="$(SONAR_TOKEN)" /v:"$(buildId)" /d:sonar.cs.opencover.reportsPaths="**\coverage.opencover.xml" + displayName: Begin SonarScanner + +- task: DotNetCoreCLI@2 + displayName: Build Projects in Debug configuration + inputs: + command: 'build' + arguments: /p:Configuration=Debug # https://github.com/MicrosoftDocs/vsts-docs/issues/1976 + projects: $(buildProjects) + + +# Build tests and run tests for net452 and netcoreapp2.1 (with coverage) +- script: | + dotnet test ./test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj --configuration Debug --framework net452 + dotnet test ./test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj --configuration Debug --framework netcoreapp2.1 --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=opencover + displayName: 'Build tests and run tests for net452 and netcoreapp2.1 (with coverage)' + +# End SonarScanner +- script: | + %USERPROFILE%\.dotnet\tools\dotnet-sonarscanner end /d:sonar.login="$(SONAR_TOKEN)" + displayName: End SonarScanner + +- task: PublishTestResults@2 + inputs: + testRunner: VSTest + testResultsFiles: '**/*.trx' + +# Based on https://whereslou.com/2018/09/versioning-and-publishing-nuget-packages-automatically-using-azure-devops-pipelines/ +- task: DotNetCoreCLI@2 + displayName: Build Projects in Release configuration + inputs: + command: 'build' + arguments: /p:Configuration=Release # https://github.com/MicrosoftDocs/vsts-docs/issues/1976 + projects: $(buildProjects) + +- task: DotNetCoreCLI@2 + displayName: Pack + condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) # Do not run for PullRequests + inputs: + command: pack + configuration: 'Release' + packagesToPack: $(buildProjects) + nobuild: true + packDirectory: '$(Build.ArtifactStagingDirectory)/packages' + verbosityPack: 'normal' + +- task: PublishBuildArtifacts@1 + displayName: Publish Artifacts + condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) # Do not run for PullRequests + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + +- task: DotNetCoreCLI@2 + displayName: Push to MyGet + condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) # Do not run for PullRequests + inputs: + command: custom + custom: nuget + arguments: push $(Build.ArtifactStagingDirectory)\packages\*.nupkg --source https://www.myget.org/F/system-linq-dynamic-core/api/v3/index.json --no-service-endpoint --api-key $(MyGetKey) diff --git a/codecov-local.cmd b/codecov-local.cmd deleted file mode 100644 index fedc7213..00000000 --- a/codecov-local.cmd +++ /dev/null @@ -1,7 +0,0 @@ -rem https://www.appveyor.com/blog/2017/03/17/codecov/ - -%USERPROFILE%\.nuget\packages\opencover\4.6.519\tools\OpenCover.Console.exe -target:dotnet.exe -targetargs:"test test\System.Linq.Dynamic.Core.Tests\System.Linq.Dynamic.Core.Tests.csproj --no-build --framework netcoreapp1.1" -filter:"+[EntityFramework.DynamicLinq]* +[Microsoft.EntityFrameworkCore.DynamicLinq]* +[System.Linq.Dynamic.Core]* -[*Tests*]* -[System.Linq.Dynamic.Core]System.Linq.Dynamic.Core.Validation.*" -nodefaultfilters -output:coverage.xml -register:user -oldStyle - -%USERPROFILE%\.nuget\packages\ReportGenerator\2.5.6\tools\ReportGenerator.exe -reports:"coverage.xml" -targetdir:"report" - -start report\index.htm diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm b/report/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm deleted file mode 100644 index 22f0ede4..00000000 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - -
Class:Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions
Assembly:Microsoft.EntityFrameworkCore.DynamicLinq
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_Res.htm b/report/Microsoft.EntityFrameworkCore.DynamicLinq_Res.htm deleted file mode 100644 index fcfff76d..00000000 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_Res.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.Res - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.Res
Assembly:Microsoft.EntityFrameworkCore.DynamicLinq
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm b/report/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm deleted file mode 100644 index 0030e02e..00000000 --- a/report/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm +++ /dev/null @@ -1,146 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider
Assembly:System.Linq.Dynamic.Core
File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\AbstractDynamicLinqCustomTypeProvider.cs
Covered lines:23
Uncovered lines:2
Coverable lines:25
Total lines:95
Line coverage:92%
Branch coverage:50%
-

Metrics

- - - - - - -
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
FindTypesMarkedWithDynamicLinqTypeAttribute(...)40100100
GetAssemblyTypes()629266.67
-

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\AbstractDynamicLinqCustomTypeProvider.cs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using JetBrains.Annotations;
 2using System.Collections.Generic;
 3using System.Reflection;
 4using System.Linq.Dynamic.Core.Validation;
 5
 6namespace System.Linq.Dynamic.Core.CustomTypeProviders
 7{
 8    /// <summary>
 9    /// The abstract <see cref="AbstractDynamicLinqCustomTypeProvider"/>. Find all types marked with <see cref="DynamicL
 10    /// </summary>
 11    public abstract class AbstractDynamicLinqCustomTypeProvider
 12    {
 13        /// <summary>
 14        /// Finds the types marked with DynamicLinqTypeAttribute.
 15        /// </summary>
 16        /// <param name="assemblies">The assemblies to process.</param>
 17        /// <returns>IEnumerable{Type}</returns>
 18        protected IEnumerable<Type> FindTypesMarkedWithDynamicLinqTypeAttribute([NotNull] IEnumerable<Assembly> assembli
 3619        {
 3620            Check.NotNull(assemblies, nameof(assemblies));
 21#if !NET35
 626722            assemblies = assemblies.Where(x => !x.IsDynamic);
 23#endif
 3624            var definedTypes = GetAssemblyTypes(assemblies);
 25
 26#if (WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 110040027            return definedTypes.Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(DynamicLinqTypeAttribut
 28#else
 29            return definedTypes.Where(x => x.GetCustomAttributes(typeof(DynamicLinqTypeAttribute), false).Any());
 30#endif
 3631        }
 32
 33#if (WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 34        /// <summary>
 35        /// Gets the assembly types in an Exception friendly way.
 36        /// </summary>
 37        /// <param name="assemblies">The assemblies to process.</param>
 38        /// <returns>IEnumerable{Type}</returns>
 39        protected IEnumerable<TypeInfo> GetAssemblyTypes([NotNull] IEnumerable<Assembly> assemblies)
 3640        {
 3641            Check.NotNull(assemblies, nameof(assemblies));
 42
 1257043            foreach (var assembly in assemblies)
 623144            {
 623145                IEnumerable<TypeInfo> definedTypes = null;
 46
 47                try
 623148                {
 623149                    definedTypes = assembly.DefinedTypes;
 623150                }
 051                catch (Exception)
 052                { }
 53
 623154                 if (definedTypes != null)
 623155                {
 151521756                    foreach (var definedType in definedTypes)
 74826257                    {
 74826258                        yield return definedType;
 74826259                    }
 623160                }
 623161            }
 3662        }
 63#else
 64        /// <summary>
 65        /// Gets the assembly types in an Exception friendly way.
 66        /// </summary>
 67        /// <param name="assemblies">The assemblies to process.</param>
 68        /// <returns>IEnumerable{Type}</returns>
 69        protected IEnumerable<Type> GetAssemblyTypes([NotNull] IEnumerable<Assembly> assemblies)
 70        {
 71            Check.NotNull(assemblies, nameof(assemblies));
 72
 73            foreach (var assembly in assemblies)
 74            {
 75                IEnumerable<Type> definedTypes = null;
 76
 77                try
 78                {
 79                    definedTypes = assembly.GetTypes();
 80                }
 81                catch (Exception)
 82                { }
 83
 84                if (definedTypes != null)
 85                {
 86                    foreach (var definedType in definedTypes)
 87                    {
 88                        yield return definedType;
 89                    }
 90                }
 91            }
 92        }
 93#endif
 94    }
 95}
-
-
- -
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_DynamicLinqTypeAttribute.htm b/report/System.Linq.Dynamic.Core_DynamicLinqTypeAttribute.htm deleted file mode 100644 index e8ecbdbd..00000000 --- a/report/System.Linq.Dynamic.Core_DynamicLinqTypeAttribute.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.CustomTypeProviders.DynamicLinqTypeAttribute - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.CustomTypeProviders.DynamicLinqTypeAttribute
Assembly:System.Linq.Dynamic.Core
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_DynamicOrdering.htm b/report/System.Linq.Dynamic.Core_DynamicOrdering.htm deleted file mode 100644 index 48116796..00000000 --- a/report/System.Linq.Dynamic.Core_DynamicOrdering.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.DynamicOrdering - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.DynamicOrdering
Assembly:System.Linq.Dynamic.Core
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_GlobalConfig.htm b/report/System.Linq.Dynamic.Core_GlobalConfig.htm deleted file mode 100644 index 553d46b0..00000000 --- a/report/System.Linq.Dynamic.Core_GlobalConfig.htm +++ /dev/null @@ -1,121 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.GlobalConfig - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.GlobalConfig
Assembly:System.Linq.Dynamic.Core
File(s):C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GlobalConfig.cs
Covered lines:19
Uncovered lines:1
Coverable lines:20
Total lines:66
Line coverage:95%
Branch coverage:75%
-

Metrics

- - - - - -
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
.cctor()10100100
-

File(s)

-

C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GlobalConfig.cs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Linq.Dynamic.Core.CustomTypeProviders;
 2
 3namespace System.Linq.Dynamic.Core
 4{
 5    /// <summary>
 6    /// Static configuration class for Dynamic Linq.
 7    /// </summary>
 8    public static class GlobalConfig
 9    {
 10        static IDynamicLinkCustomTypeProvider _customTypeProvider;
 11
 12        /// <summary>
 13        /// Gets or sets the <see cref="IDynamicLinkCustomTypeProvider"/>.
 14        /// </summary>
 15        public static IDynamicLinkCustomTypeProvider CustomTypeProvider
 16        {
 17            get
 3818            {
 19#if !(DOTNET5_1 || WINDOWS_APP || UAP10_0 || NETSTANDARD)
 20                // only use DefaultDynamicLinqCustomTypeProvider if not WINDOWS_APP || UAP10_0 || NETSTANDARD
 21                return _customTypeProvider ?? (_customTypeProvider = new DefaultDynamicLinqCustomTypeProvider());
 22#else
 3823                return _customTypeProvider;
 24#endif
 3825            }
 26
 27            set
 528            {
 529                 if (_customTypeProvider != value)
 530                {
 531                    _customTypeProvider = value;
 32
 533                    ExpressionParser.ResetDynamicLinqTypes();
 534                }
 535            }
 36        }
 37
 138        static bool _contextKeywordsEnabled = true;
 39
 40        /// <summary>
 41        /// Determines if the context keywords (it, parent, and root) are valid and usable inside a Dynamic Linq string 
 42        /// Does not affect the usability of the equivalent context symbols ($, ^ and ~).
 43        /// </summary>
 44        public static bool AreContextKeywordsEnabled
 45        {
 3946            get { return _contextKeywordsEnabled; }
 47            set
 348            {
 349                 if (value != _contextKeywordsEnabled)
 250                {
 251                    _contextKeywordsEnabled = value;
 52
 253                    ExpressionParser.ResetDynamicLinqTypes();
 254                }
 355            }
 56        }
 57
 58        /// <summary>
 59        /// Gets or sets a value indicating whether to use dynamic object class for anonymous types.
 60        /// </summary>
 61        /// <value>
 62        /// <c>true</c> if wether to use dynamic object class for anonymous types; otherwise, <c>false</c>.
 63        /// </value>
 064        public static bool UseDynamicObjectClassForAnonymousTypes { get; set; }
 65    }
 66}
-
-
- -
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_ParsingConfig.htm b/report/System.Linq.Dynamic.Core_ParsingConfig.htm deleted file mode 100644 index 41868036..00000000 --- a/report/System.Linq.Dynamic.Core_ParsingConfig.htm +++ /dev/null @@ -1,110 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.ParsingConfig - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.ParsingConfig
Assembly:System.Linq.Dynamic.Core
File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParsingConfig.cs
Covered lines:12
Uncovered lines:0
Coverable lines:12
Total lines:52
Line coverage:100%
Branch coverage:50%
-

Metrics

- - - - - - -
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
.ctor()10100100
.cctor()10100100
-

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParsingConfig.cs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#LineLine coverage
 1using System.Linq.Dynamic.Core.CustomTypeProviders;
 2
 3namespace System.Linq.Dynamic.Core
 4{
 5    /// <summary>
 6    /// Configuration class for Dynamic Linq.
 7    /// </summary>
 8    public class ParsingConfig
 9    {
 45710        internal static ParsingConfig Default { get; } = new ParsingConfig();
 11
 12        private IDynamicLinkCustomTypeProvider _customTypeProvider;
 13
 14        /// <summary>
 15        /// Gets or sets the <see cref="IDynamicLinkCustomTypeProvider"/>.
 16        /// </summary>
 17        public IDynamicLinkCustomTypeProvider CustomTypeProvider
 18        {
 19            get
 54020            {
 21#if !(DOTNET5_1 || WINDOWS_APP || UAP10_0 || NETSTANDARD)
 22                // only use DefaultDynamicLinqCustomTypeProvider if not WINDOWS_APP || UAP10_0 || NETSTANDARD
 23                return _customTypeProvider ?? (_customTypeProvider = new DefaultDynamicLinqCustomTypeProvider());
 24#else
 54025                return _customTypeProvider;
 26#endif
 54027            }
 28
 29            set
 630            {
 631                 if (_customTypeProvider != value)
 632                {
 633                    _customTypeProvider = value;
 634                }
 635            }
 36        }
 37
 38        /// <summary>
 39        /// Determines if the context keywords (it, parent, and root) are valid and usable inside a Dynamic Linq string 
 40        /// Does not affect the usability of the equivalent context symbols ($, ^ and ~).
 41        /// </summary>
 50042        public bool AreContextKeywordsEnabled { get; set; } = true;
 43
 44        /// <summary>
 45        /// Gets or sets a value indicating whether to use dynamic object class for anonymous types.
 46        /// </summary>
 47        /// <value>
 48        /// <c>true</c> if wether to use dynamic object class for anonymous types; otherwise, <c>false</c>.
 49        /// </value>
 4350        public bool UseDynamicObjectClassForAnonymousTypes { get; set; }
 51    }
 52}
-
-
- -
- - \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_Res.htm b/report/System.Linq.Dynamic.Core_Res.htm deleted file mode 100644 index b0be392e..00000000 --- a/report/System.Linq.Dynamic.Core_Res.htm +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -System.Linq.Dynamic.Core.Res - Coverage Report - -
-

Summary

- ---- - - - - - - - - - - -
Class:System.Linq.Dynamic.Core.Res
Assembly:System.Linq.Dynamic.Core
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
-

File(s)

-

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

-
- - \ No newline at end of file diff --git a/report/coverage.info b/report/coverage.info new file mode 100644 index 00000000..9350b0af --- /dev/null +++ b/report/coverage.info @@ -0,0 +1,6582 @@ +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs +FN:33,System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) +FNDA:0,System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) +DA:34,0 +DA:35,0 +DA:36,0 +LF:3 +LH:0 +BRF:0 +BRH:0 +FNF:1 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs +FN:9,System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) +FNDA:0,System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) +DA:10,0 +DA:11,0 +DA:12,0 +LF:3 +LH:0 +BRF:0 +BRH:0 +FNF:1 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs +FN:16,T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1,System.String) +FNDA:0,T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1,System.String) +DA:17,0 +DA:18,0 +DA:19,0 +DA:21,0 +DA:22,0 +DA:23,0 +DA:25,0 +DA:28,0 +DA:29,0 +BRDA:21,37,0,0 +BRDA:21,37,1,0 +FN:32,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) +FNDA:29,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) +DA:33,29 +DA:34,29 +DA:35,0 +DA:36,0 +DA:38,0 +DA:41,29 +DA:42,29 +BRDA:34,12,0,0 +BRDA:34,12,1,29 +FN:48,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) +FNDA:0,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:55,0 +DA:58,0 +DA:59,0 +BRDA:50,12,0,0 +BRDA:50,12,1,0 +FN:62,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1,System.String) +FNDA:0,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1,System.String) +DA:63,0 +DA:64,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:70,0 +DA:73,0 +DA:74,0 +BRDA:66,20,0,0 +BRDA:66,20,1,0 +FN:77,System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) +FNDA:2,System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) +DA:78,2 +DA:79,2 +DA:80,2 +DA:81,0 +DA:82,0 +DA:83,0 +DA:84,2 +DA:85,0 +DA:86,0 +DA:87,0 +DA:89,2 +DA:90,0 +DA:91,0 +DA:93,0 +DA:96,2 +DA:97,2 +BRDA:80,9,0,0 +BRDA:80,9,1,2 +BRDA:84,38,0,0 +BRDA:84,38,1,2 +BRDA:89,60,0,0 +BRDA:89,60,1,2 +FN:99,System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:106,0 +DA:109,0 +DA:110,0 +BRDA:101,2,0,0 +BRDA:101,2,1,0 +BRDA:101,18,0,0 +BRDA:101,18,1,0 +FN:113,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1,System.String) +FNDA:0,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1,System.String) +DA:114,0 +DA:115,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:121,0 +DA:124,0 +DA:125,0 +BRDA:117,16,0,0 +BRDA:117,16,1,0 +BRDA:117,48,0,0 +BRDA:117,48,1,0 +FN:127,System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) +FNDA:0,System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:133,0 +DA:136,0 +DA:137,0 +BRDA:129,17,0,0 +BRDA:129,17,1,0 +LF:71 +LH:11 +BRF:24 +BRH:4 +FNF:8 +FNH:2 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs +FN:12,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) +DA:13,0 +DA:14,0 +DA:15,0 +FN:20,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) +DA:21,0 +DA:22,0 +DA:23,0 +FN:28,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) +DA:29,0 +DA:30,0 +DA:31,0 +FN:36,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) +DA:37,0 +DA:38,0 +DA:39,0 +LF:12 +LH:0 +BRF:0 +BRH:0 +FNF:4 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs +FN:14,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) +FNDA:0,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) +DA:15,0 +DA:16,0 +DA:17,0 +DA:19,0 +DA:20,0 +FN:22,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) +FNDA:0,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) +DA:23,0 +DA:24,0 +DA:28,0 +DA:30,0 +DA:31,0 +DA:33,0 +DA:34,0 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:46,0 +DA:48,0 +DA:49,0 +BRDA:30,41,0,0 +BRDA:33,62,0,0 +BRDA:39,97,0,0 +BRDA:39,97,1,0 +BRDA:33,62,1,0 +BRDA:30,41,1,0 +LF:22 +LH:0 +BRF:6 +BRH:0 +FNF:2 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\DynamicFunctions.cs +FN:26,System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String) +FNDA:0,System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String) +DA:27,0 +FN:47,System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String,System.String) +FNDA:0,System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String,System.String) +DA:48,0 +LF:2 +LH:0 +BRF:0 +BRH:0 +FNF:2 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\EFDynamicQueryableExtensions.cs +FN:32,System.Linq.Expressions.Expression Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) +FNDA:14,System.Linq.Expressions.Expression Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) +DA:33,14 +DA:34,14 +DA:35,14 +DA:36,14 +DA:39,14 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:45,14 +DA:48,0 +DA:49,14 +BRDA:34,11,0,14 +BRDA:39,35,0,0 +BRDA:39,35,1,14 +BRDA:34,11,1,0 +FN:72,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:73,2 +DA:74,2 +DA:75,2 +DA:77,2 +DA:78,2 +FN:100,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:101,2 +DA:102,2 +DA:103,2 +FN:126,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Threading.CancellationToken,System.Object[]) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Threading.CancellationToken,System.Object[]) +DA:127,2 +DA:128,2 +DA:129,2 +DA:130,2 +DA:132,2 +DA:134,2 +DA:135,2 +FN:159,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:160,0 +DA:161,0 +DA:162,0 +DA:164,0 +DA:165,0 +FN:187,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:1,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:188,1 +DA:189,1 +DA:190,1 +FN:213,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +FNDA:1,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +DA:214,1 +DA:215,1 +DA:216,1 +DA:217,1 +DA:219,1 +DA:221,1 +DA:222,1 +FN:246,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:247,2 +DA:248,2 +DA:250,2 +DA:251,2 +FN:273,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:1,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:274,1 +DA:275,1 +DA:276,1 +FN:299,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +FNDA:1,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +DA:300,1 +DA:301,1 +DA:302,1 +DA:304,1 +DA:306,1 +DA:307,1 +FN:332,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:4,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:333,4 +DA:334,4 +DA:335,4 +DA:337,4 +DA:338,4 +FN:362,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:363,2 +DA:364,2 +DA:365,2 +FN:390,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +FNDA:2,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +DA:391,2 +DA:392,2 +DA:393,2 +DA:394,2 +DA:396,2 +DA:398,2 +DA:399,2 +FN:423,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:424,0 +DA:425,0 +DA:427,0 +DA:428,0 +FN:450,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:451,0 +DA:452,0 +DA:453,0 +FN:476,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +DA:477,0 +DA:478,0 +DA:479,0 +DA:481,0 +DA:483,0 +DA:484,0 +FN:509,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) +DA:510,0 +DA:511,0 +DA:512,0 +DA:514,0 +DA:515,0 +FN:539,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) +DA:540,0 +DA:541,0 +DA:542,0 +FN:567,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) +DA:568,0 +DA:569,0 +DA:570,0 +DA:571,0 +DA:573,0 +DA:575,0 +DA:576,0 +FN:600,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Threading.CancellationToken) +FNDA:8,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Threading.CancellationToken) +DA:601,8 +DA:603,8 +DA:608,8 +DA:609,8 +DA:610,8 +DA:611,8 +DA:612,8 +DA:613,8 +DA:615,8 +DA:616,8 +DA:619,0 +DA:620,8 +BRDA:608,19,0,8 +BRDA:610,30,0,8 +BRDA:610,30,1,8 +BRDA:608,19,1,0 +FN:622,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Threading.CancellationToken) +FNDA:0,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Threading.CancellationToken) +DA:623,0 +FN:625,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression,System.Threading.CancellationToken) +FNDA:6,System.Threading.Tasks.Task`1 Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression,System.Threading.CancellationToken) +DA:626,6 +DA:628,6 +DA:633,6 +DA:634,6 +DA:635,6 +DA:636,6 +DA:637,6 +DA:638,6 +DA:640,6 +DA:641,6 +DA:644,0 +DA:645,6 +BRDA:633,19,0,6 +BRDA:635,31,0,6 +BRDA:635,31,1,0 +BRDA:633,19,1,0 +FN:647,System.Reflection.MethodInfo Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2) +FNDA:0,System.Reflection.MethodInfo Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2) +DA:648,0 +DA:651,36 +FN:29,System.Void Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::.cctor() +FNDA:1,System.Void Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::.cctor() +DA:30,1 +DA:52,1 +DA:80,1 +DA:139,1 +DA:167,1 +DA:226,1 +DA:253,1 +DA:311,1 +DA:340,1 +DA:403,1 +DA:430,1 +DA:488,1 +DA:517,1 +LF:138 +LH:96 +BRF:20 +BRH:10 +FNF:24 +FNH:16 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs +FN:33,System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) +FNDA:3762,System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) +DA:34,3762 +DA:35,3762 +DA:36,3762 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs +FN:9,System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) +FNDA:33,System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) +DA:10,33 +DA:11,33 +DA:12,33 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\AssemblyBuilderFactory.cs +FN:15,System.Reflection.Emit.AssemblyBuilder System.Linq.Dynamic.Core.AssemblyBuilderFactory::DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess) +FNDA:1,System.Reflection.Emit.AssemblyBuilder System.Linq.Dynamic.Core.AssemblyBuilderFactory::DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess) +DA:16,1 +DA:20,1 +DA:22,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DefaultAssemblyHelper.cs +FN:33,System.Reflection.Assembly[] System.Linq.Dynamic.Core.DefaultAssemblyHelper::GetAssemblies() +FNDA:0,System.Reflection.Assembly[] System.Linq.Dynamic.Core.DefaultAssemblyHelper::GetAssemblies() +DA:34,0 +DA:35,0 +LF:2 +LH:0 +BRF:0 +BRH:0 +FNF:1 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClass.cs +FN:25,System.Collections.Generic.Dictionary`2 System.Linq.Dynamic.Core.DynamicClass::get_Properties() +FNDA:0,System.Collections.Generic.Dictionary`2 System.Linq.Dynamic.Core.DynamicClass::get_Properties() +DA:26,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:34,0 +DA:35,0 +DA:37,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:44,0 +DA:45,0 +BRDA:27,12,0,0 +BRDA:31,109,1,0 +BRDA:34,69,0,0 +BRDA:34,69,1,0 +BRDA:31,109,0,0 +BRDA:27,12,1,0 +FN:54,T System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) +FNDA:18,T System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) +DA:55,18 +DA:56,18 +DA:57,18 +DA:59,18 +DA:60,18 +FN:67,System.Object System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) +FNDA:0,System.Object System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) +DA:68,0 +DA:69,0 +DA:70,0 +FN:78,System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,T) +FNDA:0,System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,T) +DA:79,0 +DA:80,0 +DA:81,0 +DA:83,0 +DA:84,0 +FN:91,System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,System.Object) +FNDA:0,System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,System.Object) +DA:92,0 +DA:93,0 +DA:94,0 +FN:104,System.Object System.Linq.Dynamic.Core.DynamicClass::get_Item(System.String) +FNDA:0,System.Object System.Linq.Dynamic.Core.DynamicClass::get_Item(System.String) +DA:105,0 +DA:106,0 +DA:107,0 +DA:108,0 +DA:111,0 +DA:112,0 +BRDA:106,17,0,0 +BRDA:106,17,1,0 +FN:114,System.Void System.Linq.Dynamic.Core.DynamicClass::set_Item(System.String,System.Object) +FNDA:0,System.Void System.Linq.Dynamic.Core.DynamicClass::set_Item(System.String,System.Object) +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:121,0 +DA:122,0 +DA:123,0 +DA:124,0 +BRDA:116,15,0,0 +BRDA:116,15,1,0 +FN:133,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicClass::GetDynamicMemberNames() +FNDA:0,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicClass::GetDynamicMemberNames() +DA:134,0 +DA:135,0 +DA:136,0 +FN:146,System.Boolean System.Linq.Dynamic.Core.DynamicClass::TryGetMember(System.Dynamic.GetMemberBinder,System.Object&) +FNDA:0,System.Boolean System.Linq.Dynamic.Core.DynamicClass::TryGetMember(System.Dynamic.GetMemberBinder,System.Object&) +DA:147,0 +DA:148,0 +DA:149,0 +DA:151,0 +DA:152,0 +FN:162,System.Boolean System.Linq.Dynamic.Core.DynamicClass::TrySetMember(System.Dynamic.SetMemberBinder,System.Object) +FNDA:0,System.Boolean System.Linq.Dynamic.Core.DynamicClass::TrySetMember(System.Dynamic.SetMemberBinder,System.Object) +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:174,0 +DA:175,0 +BRDA:165,22,0,0 +BRDA:165,22,1,0 +LF:65 +LH:5 +BRF:12 +BRH:0 +FNF:10 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClassFactory.cs +FN:100,System.Type System.Linq.Dynamic.Core.DynamicClassFactory::CreateType(System.Collections.Generic.IList`1,System.Boolean) +FNDA:48,System.Type System.Linq.Dynamic.Core.DynamicClassFactory::CreateType(System.Collections.Generic.IList`1,System.Boolean) +DA:101,48 +DA:102,48 +DA:104,147 +DA:105,147 +DA:107,48 +DA:110,48 +DA:111,32 +DA:115,32 +DA:116,33 +DA:117,33 +DA:118,33 +DA:119,33 +DA:121,33 +DA:123,33 +DA:124,33 +DA:128,33 +DA:129,33 +DA:130,108 +DA:131,33 +DA:132,249 +DA:133,75 +DA:134,75 +DA:135,75 +DA:136,33 +DA:138,0 +DA:139,0 +DA:140,0 +DA:142,33 +DA:145,216 +DA:146,75 +DA:148,75 +DA:149,75 +DA:151,75 +DA:154,75 +DA:155,75 +DA:156,75 +DA:157,75 +DA:158,75 +DA:159,75 +DA:160,75 +DA:163,75 +DA:164,75 +DA:167,75 +DA:169,75 +DA:170,75 +DA:171,75 +DA:172,75 +DA:173,75 +DA:174,75 +DA:175,75 +DA:178,33 +DA:179,33 +DA:180,33 +DA:181,33 +DA:182,33 +DA:183,33 +DA:186,33 +DA:187,33 +DA:188,33 +DA:190,33 +DA:191,33 +DA:192,33 +DA:193,33 +DA:194,33 +DA:195,33 +DA:197,33 +DA:200,33 +DA:201,33 +DA:202,33 +DA:203,33 +DA:205,33 +DA:206,0 +DA:207,0 +DA:208,0 +DA:210,33 +DA:213,33 +DA:215,216 +DA:216,75 +DA:217,75 +DA:218,75 +DA:221,33 +DA:222,33 +DA:224,216 +DA:225,75 +DA:226,75 +DA:229,75 +DA:230,75 +DA:234,75 +DA:235,75 +DA:236,75 +DA:237,75 +DA:238,75 +DA:239,75 +DA:240,75 +DA:243,75 +DA:244,75 +DA:245,75 +DA:246,75 +DA:247,75 +DA:248,75 +DA:249,75 +DA:250,75 +DA:251,75 +DA:252,75 +DA:255,75 +DA:256,75 +DA:257,75 +DA:258,75 +DA:259,75 +DA:260,75 +DA:261,75 +DA:262,75 +DA:263,75 +DA:264,75 +DA:265,75 +DA:267,33 +DA:268,26 +DA:270,26 +DA:271,26 +DA:273,26 +DA:274,26 +DA:275,26 +DA:276,26 +DA:279,86 +DA:280,26 +DA:282,26 +DA:283,26 +DA:284,26 +DA:286,172 +DA:287,60 +DA:288,60 +DA:289,60 +DA:291,60 +DA:292,26 +DA:293,26 +DA:294,26 +DA:295,34 +DA:296,17 +DA:297,17 +DA:298,17 +DA:299,17 +DA:300,7 +DA:301,7 +DA:302,7 +DA:303,10 +DA:304,10 +DA:305,10 +DA:306,10 +DA:308,0 +DA:310,0 +DA:311,0 +DA:313,60 +DA:314,60 +DA:316,26 +DA:317,26 +DA:320,33 +DA:321,0 +DA:322,0 +DA:323,0 +DA:324,0 +DA:325,0 +DA:326,0 +DA:328,33 +DA:329,33 +DA:330,33 +DA:331,33 +DA:332,33 +DA:334,33 +DA:337,33 +DA:338,33 +DA:339,33 +DA:342,33 +DA:343,33 +DA:344,33 +DA:345,33 +DA:346,33 +DA:347,33 +DA:348,33 +DA:350,33 +DA:352,33 +DA:353,33 +DA:354,33 +DA:355,33 +DA:357,48 +DA:358,48 +DA:359,48 +DA:360,48 +DA:362,48 +DA:363,48 +BRDA:104,20,0,1 +BRDA:104,20,1,48 +BRDA:105,63,0,1 +BRDA:105,63,1,48 +BRDA:110,127,0,32 +BRDA:117,174,0,33 +BRDA:121,194,0,0 +BRDA:121,194,1,33 +BRDA:128,293,0,33 +BRDA:130,303,0,1 +BRDA:130,303,1,33 +BRDA:132,395,1,75 +BRDA:132,395,0,33 +BRDA:128,293,1,0 +BRDA:145,813,1,75 +BRDA:145,813,0,33 +BRDA:205,1180,0,0 +BRDA:205,1180,1,33 +BRDA:215,1253,1,75 +BRDA:215,1253,0,33 +BRDA:224,1808,1,75 +BRDA:256,1613,0,42 +BRDA:256,1613,1,33 +BRDA:224,1808,0,33 +BRDA:267,1818,0,26 +BRDA:279,1928,0,1 +BRDA:279,1928,1,26 +BRDA:286,2239,1,60 +BRDA:291,2071,0,26 +BRDA:291,2071,1,34 +BRDA:295,2099,0,17 +BRDA:295,2099,1,17 +BRDA:299,2127,0,7 +BRDA:299,2127,1,10 +BRDA:303,2159,0,10 +BRDA:303,2159,1,0 +BRDA:286,2239,0,26 +BRDA:267,1818,1,33 +BRDA:320,2267,0,0 +BRDA:320,2267,1,33 +BRDA:343,2437,0,33 +BRDA:343,2437,1,0 +BRDA:117,174,1,33 +BRDA:110,127,1,48 +BRDA:357,2580,0,48 +BRDA:357,2580,1,48 +FN:372,System.String System.Linq.Dynamic.Core.DynamicClassFactory::GenerateKey(System.Collections.Generic.IEnumerable`1,System.Boolean) +FNDA:48,System.String System.Linq.Dynamic.Core.DynamicClassFactory::GenerateKey(System.Collections.Generic.IEnumerable`1,System.Boolean) +DA:373,48 +DA:376,147 +DA:377,48 +BRDA:376,18,0,1 +BRDA:376,18,1,48 +BRDA:376,59,0,7 +BRDA:376,59,1,41 +FN:379,System.String System.Linq.Dynamic.Core.DynamicClassFactory::Escape(System.String) +FNDA:99,System.String System.Linq.Dynamic.Core.DynamicClassFactory::Escape(System.String) +DA:380,99 +DA:382,99 +DA:383,99 +DA:384,99 +DA:385,99 +FN:23,System.Void System.Linq.Dynamic.Core.DynamicClassFactory::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.DynamicClassFactory::.cctor() +DA:24,1 +DA:26,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:35,1 +DA:37,1 +DA:42,1 +DA:44,1 +DA:45,1 +DA:51,1 +DA:52,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:63,1 +DA:65,1 +DA:66,1 +DA:72,1 +DA:73,1 +DA:74,1 +DA:76,1 +DA:77,1 +LF:220 +LH:205 +BRF:50 +BRH:44 +FNF:4 +FNH:4 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableAsyncExtensions.cs +FN:22,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable,System.Type) +FNDA:0,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable,System.Type) +DA:23,0 +DA:24,0 +DA:25,0 +DA:27,0 +DA:28,0 +FN:36,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,0 +FN:49,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +FN:62,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable,System.Type) +FNDA:0,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable,System.Type) +DA:63,0 +DA:64,0 +DA:65,0 +DA:67,0 +DA:68,0 +FN:76,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +FN:89,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) +DA:90,0 +DA:91,0 +DA:92,0 +DA:93,0 +FN:95,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToArrayAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1 System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToArrayAsync(System.Collections.IEnumerable) +DA:96,0 +DA:97,0 +DA:98,0 +FN:100,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToListAsync(System.Collections.IEnumerable) +FNDA:0,System.Threading.Tasks.Task`1> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToListAsync(System.Collections.IEnumerable) +DA:101,0 +DA:102,0 +DA:103,0 +LF:32 +LH:0 +BRF:0 +BRH:0 +FNF:8 +FNH:0 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions.cs +FN:34,System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) +FNDA:25,System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) +DA:35,25 +DA:36,25 +DA:37,25 +DA:38,25 +FN:47,T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) +FNDA:35,T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) +DA:48,35 +DA:49,35 +DA:50,35 +DA:51,35 +FN:63,System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable,System.Type) +FNDA:5,System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable,System.Type) +DA:64,5 +DA:65,5 +DA:66,5 +DA:68,5 +DA:72,5 +DA:74,5 +FN:85,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) +FNDA:14,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) +DA:86,14 +DA:87,14 +DA:91,14 +DA:93,14 +FN:105,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable,System.Type) +FNDA:4,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable,System.Type) +DA:106,4 +DA:107,4 +DA:108,4 +DA:110,4 +DA:111,4 +FN:119,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) +FNDA:7,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) +DA:120,7 +DA:121,7 +DA:122,7 +DA:123,7 +FN:125,T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToArray(System.Collections.IEnumerable) +FNDA:65,T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToArray(System.Collections.IEnumerable) +DA:126,65 +DA:127,65 +DA:128,65 +FN:130,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToList(System.Collections.IEnumerable) +FNDA:21,System.Collections.Generic.List`1 System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToList(System.Collections.IEnumerable) +DA:131,21 +DA:132,21 +DA:133,21 +FN:16,System.Void System.Linq.Dynamic.Core.DynamicEnumerableExtensions::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.DynamicEnumerableExtensions::.cctor() +DA:17,1 +DA:18,1 +DA:19,3 +DA:20,1 +LF:37 +LH:37 +BRF:0 +BRH:0 +FNF:9 +FNH:9 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs +FN:23,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.String,System.Object[]) +FNDA:4,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.String,System.Object[]) +DA:24,4 +DA:25,4 +DA:27,4 +DA:29,4 +DA:30,4 +FN:42,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) +FNDA:0,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) +DA:43,0 +DA:44,0 +DA:45,0 +FN:58,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +FNDA:480,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +DA:59,480 +DA:60,480 +DA:61,480 +DA:62,480 +DA:64,480 +DA:66,479 +DA:67,446 +FN:80,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.String,System.Object[]) +FNDA:0,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.String,System.Object[]) +DA:81,0 +DA:82,0 +DA:83,0 +FN:95,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Type,System.Type,System.String,System.Object[]) +FNDA:19,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Type,System.Type,System.String,System.Object[]) +DA:96,19 +DA:97,19 +DA:98,19 +DA:100,19 +DA:101,18 +FN:114,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) +FNDA:0,System.Linq.Expressions.Expression`1> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) +DA:115,0 +DA:116,0 +DA:118,0 +DA:119,0 +FN:130,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +FNDA:1,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +DA:131,1 +DA:132,1 +DA:133,1 +FN:143,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.String,System.Object[]) +FNDA:3,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.String,System.Object[]) +DA:144,3 +DA:145,3 +DA:147,3 +DA:148,3 +FN:159,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.Type,System.String,System.Object[]) +FNDA:11,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.Type,System.String,System.Object[]) +DA:160,11 +DA:161,11 +DA:162,10 +FN:174,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.Type,System.String,System.Object[]) +FNDA:2,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.Type,System.String,System.Object[]) +DA:175,2 +DA:176,2 +DA:177,2 +FN:190,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.Object[]) +FNDA:432,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.Object[]) +DA:191,432 +DA:192,432 +DA:193,432 +DA:195,432 +DA:196,401 +FN:207,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +FNDA:17,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +DA:208,17 +DA:209,17 +DA:210,15 +FN:222,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +FNDA:0,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +DA:223,0 +DA:224,0 +DA:225,0 +FN:237,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +FNDA:21,System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) +DA:238,21 +DA:239,21 +DA:240,20 +LF:54 +LH:41 +BRF:0 +BRH:0 +FNF:14 +FNH:10 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicGetMemberBinder.cs +FN:22,System.Dynamic.DynamicMetaObject System.Linq.Dynamic.Core.DynamicGetMemberBinder::FallbackGetMember(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject) +FNDA:1,System.Dynamic.DynamicMetaObject System.Linq.Dynamic.Core.DynamicGetMemberBinder::FallbackGetMember(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject) +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,0 +DA:27,0 +DA:30,1 +DA:31,1 +BRDA:25,19,0,0 +BRDA:25,19,1,1 +FN:17,System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.ctor(System.String) +FNDA:1,System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.ctor(System.String) +DA:18,1 +DA:19,1 +DA:20,1 +FN:14,System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.cctor() +DA:15,1 +LF:11 +LH:9 +BRF:2 +BRH:1 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicProperty.cs +FN:24,System.String System.Linq.Dynamic.Core.DynamicProperty::get_Name() +FNDA:223,System.String System.Linq.Dynamic.Core.DynamicProperty::get_Name() +DA:25,223 +FN:32,System.Type System.Linq.Dynamic.Core.DynamicProperty::get_Type() +FNDA:198,System.Type System.Linq.Dynamic.Core.DynamicProperty::get_Type() +DA:33,198 +FN:12,System.Void System.Linq.Dynamic.Core.DynamicProperty::.ctor(System.String,System.Type) +FNDA:122,System.Void System.Linq.Dynamic.Core.DynamicProperty::.ctor(System.String,System.Type) +DA:13,122 +DA:14,122 +DA:15,122 +DA:16,122 +DA:17,122 +LF:7 +LH:7 +BRF:0 +BRH:0 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicQueryableExtensions.cs +FN:33,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.DynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) +FNDA:549,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.DynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) +DA:34,549 +DA:35,549 +DA:36,548 +DA:37,548 +DA:40,548 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:46,548 +DA:49,1 +DA:50,549 +BRDA:35,11,0,548 +BRDA:40,35,0,0 +BRDA:40,35,1,548 +BRDA:35,11,1,1 +FN:60,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Aggregate(System.Linq.IQueryable,System.String,System.String) +FNDA:12,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Aggregate(System.Linq.IQueryable,System.String,System.String) +DA:61,12 +DA:62,12 +DA:63,12 +DA:64,12 +DA:67,12 +DA:68,12 +DA:69,12 +DA:73,2370 +DA:76,12 +DA:77,84 +DA:78,84 +DA:79,12 +DA:80,84 +DA:81,84 +DA:84,12 +DA:85,6 +DA:86,6 +DA:87,6 +DA:88,6 +DA:89,6 +DA:90,6 +DA:94,18 +DA:96,6 +DA:97,6 +DA:98,6 +DA:99,6 +DA:100,6 +DA:101,12 +BRDA:84,183,0,6 +BRDA:84,183,1,6 +FN:118,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable) +FNDA:10,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable) +DA:119,10 +DA:120,10 +DA:122,10 +DA:123,10 +FN:144,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:5,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:145,5 +DA:146,5 +DA:147,5 +DA:149,5 +DA:150,5 +DA:152,5 +DA:153,5 +FN:156,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:4,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.String,System.Object[]) +DA:157,4 +DA:158,4 +DA:159,4 +FN:167,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:168,1 +DA:169,1 +DA:170,1 +DA:172,1 +DA:173,1 +FN:214,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable) +FNDA:36,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable) +DA:215,36 +DA:216,36 +DA:218,36 +DA:219,36 +FN:240,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:3,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:241,3 +DA:242,3 +DA:243,3 +DA:245,3 +DA:246,3 +DA:248,3 +DA:249,3 +FN:252,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:3,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.String,System.Object[]) +DA:253,3 +DA:254,3 +DA:255,3 +FN:263,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:264,1 +DA:265,1 +DA:266,1 +DA:268,1 +DA:269,1 +FN:286,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable) +DA:287,4 +DA:288,4 +DA:290,4 +DA:291,4 +FN:304,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable,System.Object) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable,System.Object) +DA:305,4 +DA:306,4 +DA:308,4 +DA:309,4 +FN:327,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Distinct(System.Linq.IQueryable) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Distinct(System.Linq.IQueryable) +DA:328,2 +DA:329,2 +DA:331,2 +DA:332,2 +FN:347,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable) +FNDA:16,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable) +DA:348,16 +DA:349,16 +DA:351,16 +DA:352,16 +FN:369,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:5,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:370,5 +DA:371,5 +DA:372,5 +DA:374,5 +DA:375,5 +DA:377,5 +DA:378,5 +FN:385,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:4,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.String,System.Object[]) +DA:386,4 +DA:387,4 +DA:388,4 +FN:400,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:401,1 +DA:402,1 +DA:403,1 +DA:404,1 +FN:419,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable) +FNDA:12,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable) +DA:420,12 +DA:421,12 +DA:423,12 +DA:424,12 +FN:439,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:39,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:440,39 +DA:441,39 +DA:442,39 +DA:444,39 +DA:445,39 +DA:447,39 +DA:448,39 +FN:455,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:38,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +DA:456,38 +DA:457,38 +DA:458,38 +FN:470,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:471,1 +DA:472,1 +DA:474,1 +DA:475,1 +FN:497,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[]) +FNDA:5,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[]) +DA:498,5 +DA:499,5 +DA:500,5 +DA:501,5 +DA:503,5 +DA:504,5 +DA:505,5 +DA:507,5 +DA:508,5 +DA:509,5 +DA:510,5 +DA:512,5 +DA:513,5 +BRDA:503,38,0,5 +BRDA:503,38,1,0 +FN:517,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String,System.Object[]) +FNDA:0,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String,System.Object[]) +DA:518,0 +DA:519,0 +DA:520,0 +FN:537,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String) +FNDA:8,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String) +DA:538,8 +DA:539,8 +DA:540,8 +DA:541,8 +DA:543,5 +DA:544,5 +FN:547,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String) +FNDA:8,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String) +DA:548,8 +DA:549,8 +DA:550,5 +FN:568,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:18,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:569,18 +DA:570,18 +DA:571,17 +DA:573,14 +DA:574,14 +DA:576,9 +DA:577,9 +DA:578,9 +DA:580,9 +DA:581,9 +BRDA:573,26,0,13 +BRDA:573,26,1,1 +FN:585,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:17,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.Object[]) +DA:586,17 +DA:587,17 +DA:588,8 +FN:601,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String[]) +FNDA:1,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String[]) +DA:602,1 +DA:603,1 +DA:604,1 +DA:606,1 +DA:608,1 +DA:609,7 +DA:610,2 +DA:611,2 +DA:612,2 +DA:613,2 +DA:615,1 +DA:616,1 +BRDA:609,113,1,2 +BRDA:609,113,0,1 +FN:619,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.String[]) +FNDA:1,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.String[]) +DA:620,1 +DA:621,1 +DA:622,1 +FN:632,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.Func`2[]) +FNDA:1,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1,System.Func`2[]) +DA:633,1 +DA:634,1 +DA:635,1 +DA:637,1 +DA:638,1 +FN:640,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByManyInternal(System.Collections.Generic.IEnumerable`1,System.Func`2[],System.Int32) +FNDA:15,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByManyInternal(System.Collections.Generic.IEnumerable`1,System.Func`2[],System.Int32) +DA:641,15 +DA:642,21 +DA:644,9 +DA:646,9 +DA:647,22 +DA:648,22 +DA:649,22 +DA:650,22 +DA:651,22 +DA:652,22 +DA:653,22 +DA:655,9 +DA:656,15 +BRDA:642,42,0,6 +BRDA:642,42,1,9 +FN:671,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +FNDA:6,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +DA:672,6 +DA:673,6 +DA:674,6 +DA:675,6 +DA:676,6 +DA:677,6 +DA:679,6 +DA:680,6 +DA:682,6 +DA:683,6 +DA:684,6 +DA:686,6 +DA:688,5 +DA:689,5 +DA:690,5 +DA:691,5 +DA:692,5 +DA:694,5 +DA:696,5 +DA:697,5 +DA:698,5 +DA:699,5 +DA:700,5 +DA:701,5 +DA:702,5 +DA:703,5 +DA:704,5 +BRDA:682,83,0,6 +BRDA:682,83,1,0 +FN:707,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +FNDA:6,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +DA:708,6 +DA:709,6 +DA:710,5 +FN:725,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +DA:726,4 +DA:729,4 +DA:730,4 +DA:731,4 +DA:732,4 +DA:733,4 +DA:735,4 +DA:736,4 +DA:738,4 +DA:739,4 +DA:740,4 +DA:742,4 +DA:744,3 +DA:745,3 +DA:746,3 +DA:747,3 +DA:748,3 +DA:750,3 +DA:752,3 +DA:753,3 +DA:754,3 +DA:755,3 +DA:756,3 +DA:757,3 +DA:758,3 +DA:759,3 +DA:760,3 +DA:762,3 +DA:763,3 +BRDA:738,83,0,4 +BRDA:738,83,1,0 +FN:766,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) +DA:767,4 +DA:768,4 +DA:769,3 +FN:784,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.Generic.IEnumerable`1,System.String,System.String,System.String,System.Object[]) +FNDA:0,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.Generic.IEnumerable`1,System.String,System.String,System.String,System.Object[]) +DA:785,0 +DA:786,0 +DA:787,0 +FN:790,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1,System.Collections.Generic.IEnumerable`1,System.String,System.String,System.String,System.Object[]) +FNDA:0,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1,System.Collections.Generic.IEnumerable`1,System.String,System.String,System.String,System.Object[]) +DA:791,0 +DA:792,0 +DA:793,0 +FN:807,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable) +FNDA:7,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable) +DA:808,7 +DA:809,7 +DA:811,7 +DA:812,7 +FN:828,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:829,2 +DA:830,2 +DA:831,2 +DA:833,2 +DA:834,2 +DA:836,2 +DA:837,2 +FN:844,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.String,System.Object[]) +DA:845,1 +DA:846,1 +DA:847,1 +FN:860,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:861,1 +DA:862,1 +DA:863,1 +DA:864,1 +FN:878,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable) +DA:879,1 +DA:880,1 +DA:882,1 +DA:883,1 +FN:899,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:900,2 +DA:901,2 +DA:902,2 +DA:904,2 +DA:905,2 +DA:907,2 +DA:908,2 +FN:915,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +DA:916,2 +DA:917,2 +DA:918,2 +FN:930,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:931,1 +DA:932,1 +DA:933,1 +DA:934,1 +FN:956,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:15,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:957,15 +DA:958,15 +DA:959,11 +FN:962,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1,System.String,System.Object[]) +FNDA:15,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1,System.String,System.Object[]) +DA:963,15 +DA:964,15 +DA:965,11 +FN:982,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:27,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:983,27 +DA:984,27 +DA:985,26 +DA:987,23 +DA:988,23 +DA:989,23 +DA:991,22 +DA:993,116 +DA:994,25 +DA:995,25 +DA:996,25 +DA:997,25 +DA:998,25 +DA:999,25 +DA:1001,22 +DA:1002,22 +DA:1003,22 +BRDA:993,189,1,25 +BRDA:993,189,0,22 +FN:1006,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:12,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.String,System.Object[]) +DA:1007,12 +DA:1008,12 +DA:1009,11 +FN:1021,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable,System.Int32,System.Int32) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable,System.Int32,System.Int32) +DA:1022,4 +DA:1023,4 +DA:1024,8 +DA:1025,8 +DA:1027,4 +DA:1028,4 +BRDA:1024,20,0,1 +BRDA:1024,20,1,4 +BRDA:1025,63,0,1 +BRDA:1025,63,1,4 +FN:1038,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable`1,System.Int32,System.Int32) +FNDA:4,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable`1,System.Int32,System.Int32) +DA:1039,4 +DA:1040,4 +DA:1041,8 +DA:1042,8 +DA:1044,4 +DA:1045,4 +BRDA:1041,20,0,2 +BRDA:1041,20,1,4 +BRDA:1042,63,0,2 +BRDA:1042,63,1,4 +FN:1054,System.Linq.Dynamic.Core.PagedResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable,System.Int32,System.Int32) +FNDA:2,System.Linq.Dynamic.Core.PagedResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable,System.Int32,System.Int32) +DA:1055,2 +DA:1056,2 +DA:1057,4 +DA:1058,4 +DA:1060,2 +DA:1061,2 +DA:1062,2 +DA:1063,2 +DA:1064,2 +DA:1065,2 +DA:1067,2 +DA:1068,2 +DA:1070,2 +DA:1071,2 +BRDA:1057,20,0,1 +BRDA:1057,20,1,2 +BRDA:1058,63,0,1 +BRDA:1058,63,1,2 +FN:1081,System.Linq.Dynamic.Core.PagedResult`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable`1,System.Int32,System.Int32) +FNDA:2,System.Linq.Dynamic.Core.PagedResult`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable`1,System.Int32,System.Int32) +DA:1082,2 +DA:1083,2 +DA:1084,4 +DA:1085,4 +DA:1087,2 +DA:1088,2 +DA:1089,2 +DA:1090,2 +DA:1091,2 +DA:1092,2 +DA:1094,2 +DA:1095,2 +DA:1097,2 +DA:1098,2 +BRDA:1084,20,0,2 +BRDA:1084,20,1,2 +BRDA:1085,63,0,2 +BRDA:1085,63,1,2 +FN:1107,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Reverse(System.Linq.IQueryable) +FNDA:1,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Reverse(System.Linq.IQueryable) +DA:1108,1 +DA:1109,1 +DA:1111,1 +DA:1112,1 +FN:1130,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:100,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1131,100 +DA:1132,100 +DA:1133,99 +DA:1135,96 +DA:1136,96 +DA:1138,87 +DA:1139,87 +DA:1140,87 +DA:1141,87 +DA:1142,87 +DA:1144,87 +DA:1145,87 +BRDA:1135,26,0,96 +BRDA:1135,26,1,0 +FN:1148,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:100,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) +DA:1149,100 +DA:1150,100 +DA:1151,87 +FN:1170,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:29,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1171,29 +DA:1172,29 +DA:1173,29 +DA:1175,29 +DA:1176,29 +DA:1178,29 +DA:1179,29 +DA:1180,29 +DA:1181,29 +DA:1183,29 +DA:1184,29 +BRDA:1175,26,0,27 +BRDA:1175,26,1,2 +FN:1187,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:27,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) +DA:1188,27 +DA:1189,27 +DA:1190,27 +FN:1207,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +FNDA:3,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +DA:1208,3 +DA:1209,3 +DA:1210,3 +DA:1211,3 +DA:1213,3 +DA:1214,3 +DA:1216,3 +DA:1217,3 +DA:1218,3 +DA:1219,3 +DA:1221,3 +DA:1222,3 +BRDA:1213,38,0,3 +BRDA:1213,38,1,0 +FN:1225,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Type,System.String,System.Object[]) +FNDA:3,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Type,System.String,System.Object[]) +DA:1226,3 +DA:1227,3 +DA:1228,3 +FN:1246,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:13,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1247,13 +DA:1248,13 +DA:1249,13 +DA:1251,13 +DA:1252,11 +FN:1255,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:13,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) +DA:1256,13 +DA:1257,13 +DA:1258,11 +FN:1274,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +DA:1275,2 +DA:1276,2 +DA:1277,2 +DA:1278,2 +DA:1280,2 +DA:1281,2 +FN:1284,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Type,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Type,System.String,System.Object[]) +DA:1285,2 +DA:1286,2 +DA:1287,2 +FN:1289,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectManyInternal(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +FNDA:15,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectManyInternal(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) +DA:1290,15 +DA:1291,15 +DA:1292,15 +DA:1298,13 +DA:1299,11 +DA:1302,11 +DA:1303,6 +DA:1304,6 +DA:1305,6 +DA:1307,5 +DA:1308,5 +DA:1309,5 +DA:1310,11 +DA:1313,13 +DA:1314,13 +DA:1315,13 +DA:1316,13 +DA:1318,13 +DA:1319,13 +DA:1320,13 +DA:1321,13 +DA:1322,13 +DA:1324,13 +DA:1325,13 +BRDA:1291,2,0,15 +BRDA:1291,2,1,0 +BRDA:1298,48,0,11 +BRDA:1302,71,0,6 +BRDA:1302,71,1,5 +BRDA:1298,48,1,13 +FN:1343,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1344,2 +DA:1345,2 +DA:1346,2 +DA:1348,2 +DA:1349,2 +DA:1352,2 +DA:1353,2 +DA:1354,2 +DA:1355,2 +DA:1357,2 +DA:1358,2 +DA:1359,2 +DA:1360,2 +DA:1361,2 +DA:1363,2 +DA:1364,2 +BRDA:1348,26,0,2 +BRDA:1348,26,1,0 +FN:1367,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) +DA:1368,2 +DA:1369,2 +DA:1370,2 +FN:1396,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[],System.Object[]) +FNDA:0,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[],System.Object[]) +DA:1397,0 +DA:1398,0 +DA:1399,0 +FN:1402,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.Object[],System.Object[]) +FNDA:1,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.Object[],System.Object[]) +DA:1403,1 +DA:1404,1 +DA:1405,1 +FN:1433,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) +DA:1434,2 +DA:1435,2 +DA:1436,2 +DA:1437,2 +DA:1438,2 +DA:1439,2 +DA:1441,2 +DA:1442,2 +DA:1445,2 +DA:1446,2 +DA:1447,2 +DA:1448,2 +DA:1450,2 +DA:1453,2 +DA:1454,2 +DA:1456,2 +DA:1457,2 +DA:1459,2 +DA:1460,2 +DA:1461,2 +DA:1462,2 +DA:1463,2 +DA:1465,2 +DA:1466,2 +BRDA:1441,64,0,2 +BRDA:1441,64,1,0 +FN:1469,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) +FNDA:1,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) +DA:1470,1 +DA:1471,1 +DA:1472,1 +FN:1487,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable) +FNDA:58,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable) +DA:1488,58 +DA:1489,58 +DA:1491,58 +DA:1492,58 +DA:1493,58 +FN:1510,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1511,2 +DA:1512,2 +DA:1513,2 +DA:1515,2 +DA:1516,2 +DA:1518,2 +DA:1519,2 +FN:1526,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.String,System.Object[]) +DA:1527,1 +DA:1528,1 +DA:1529,1 +FN:1542,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:1543,1 +DA:1544,1 +DA:1545,1 +DA:1546,1 +FN:1559,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable) +DA:1560,2 +DA:1561,2 +DA:1563,2 +DA:1564,2 +DA:1565,2 +FN:1582,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1583,2 +DA:1584,2 +DA:1585,2 +DA:1587,2 +DA:1588,2 +DA:1590,2 +DA:1591,2 +FN:1598,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.String,System.Object[]) +DA:1599,1 +DA:1600,1 +DA:1601,1 +FN:1614,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:1615,1 +DA:1616,1 +DA:1617,1 +DA:1618,1 +FN:1630,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Skip(System.Linq.IQueryable,System.Int32) +FNDA:10,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Skip(System.Linq.IQueryable,System.Int32) +DA:1631,10 +DA:1632,10 +DA:1633,20 +DA:1636,10 +DA:1637,1 +DA:1639,9 +DA:1640,10 +BRDA:1633,20,0,1 +BRDA:1633,20,1,10 +BRDA:1636,62,0,1 +BRDA:1636,62,1,9 +FN:1669,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:3,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1670,3 +DA:1671,3 +DA:1672,3 +DA:1674,3 +DA:1675,3 +DA:1677,3 +DA:1678,3 +FN:1681,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.String,System.Object[]) +DA:1682,2 +DA:1683,2 +DA:1684,2 +FN:1694,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Sum(System.Linq.IQueryable) +FNDA:2,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Sum(System.Linq.IQueryable) +DA:1695,2 +DA:1696,2 +DA:1698,2 +DA:1699,2 +DA:1700,2 +FN:1711,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Take(System.Linq.IQueryable,System.Int32) +FNDA:14,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Take(System.Linq.IQueryable,System.Int32) +DA:1712,14 +DA:1713,14 +DA:1714,28 +DA:1716,14 +DA:1717,14 +BRDA:1714,20,0,1 +BRDA:1714,20,1,14 +FN:1746,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:3,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1747,3 +DA:1748,3 +DA:1749,3 +DA:1751,3 +DA:1752,3 +DA:1754,3 +DA:1755,3 +FN:1758,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:2,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.String,System.Object[]) +DA:1759,2 +DA:1760,2 +DA:1761,2 +FN:1785,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:6,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1786,6 +DA:1787,6 +DA:1788,2 +FN:1791,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1,System.String,System.Object[]) +FNDA:6,System.Linq.IOrderedQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1,System.String,System.Object[]) +DA:1792,6 +DA:1793,6 +DA:1794,2 +FN:1811,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:7,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1812,7 +DA:1813,7 +DA:1814,6 +DA:1816,3 +DA:1817,3 +DA:1818,3 +DA:1820,2 +DA:1822,12 +DA:1823,3 +DA:1824,3 +DA:1825,3 +DA:1826,3 +DA:1827,3 +DA:1828,3 +DA:1830,2 +DA:1831,2 +DA:1832,2 +BRDA:1822,189,1,3 +BRDA:1822,189,0,2 +FN:1835,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.String,System.Object[]) +FNDA:1,System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.String,System.Object[]) +DA:1836,1 +DA:1837,1 +DA:1838,0 +FN:1861,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:169,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1862,169 +DA:1863,169 +DA:1864,169 +DA:1866,166 +DA:1867,150 +FN:1870,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1,System.String,System.Object[]) +FNDA:143,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1,System.String,System.Object[]) +DA:1871,143 +DA:1872,143 +DA:1873,124 +FN:1892,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +FNDA:170,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) +DA:1893,170 +DA:1894,170 +DA:1895,169 +DA:1897,169 +DA:1898,169 +DA:1900,154 +DA:1901,153 +DA:1902,153 +FN:1905,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.String,System.Object[]) +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.String,System.Object[]) +DA:1906,4 +DA:1907,4 +DA:1908,3 +FN:1915,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:1,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:1916,1 +DA:1917,1 +DA:1918,1 +DA:1920,1 +DA:1921,1 +DA:1922,1 +FN:1926,System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::CheckOuterAndInnerTypes(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.String,System.Linq.Expressions.LambdaExpression&,System.Linq.Expressions.LambdaExpression&,System.Object[]) +FNDA:10,System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::CheckOuterAndInnerTypes(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.String,System.Linq.Expressions.LambdaExpression&,System.Linq.Expressions.LambdaExpression&,System.Object[]) +DA:1927,10 +DA:1928,10 +DA:1929,10 +DA:1932,10 +DA:1933,6 +DA:1941,6 +DA:1942,2 +DA:1943,2 +DA:1944,2 +DA:1945,2 +DA:1946,4 +DA:1947,2 +DA:1948,2 +DA:1949,2 +DA:1950,2 +DA:1953,6 +DA:1954,2 +DA:1955,2 +DA:1957,4 +DA:1958,8 +BRDA:1932,38,0,6 +BRDA:1941,50,0,2 +BRDA:1941,50,1,4 +BRDA:1941,66,0,2 +BRDA:1941,66,1,4 +BRDA:1946,101,0,4 +BRDA:1946,101,1,0 +BRDA:1946,116,0,2 +BRDA:1946,116,1,6 +BRDA:1953,154,0,2 +BRDA:1953,154,1,4 +BRDA:1932,38,1,8 +FN:1961,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable) +FNDA:6,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable) +DA:1962,6 +DA:1963,6 +DA:1964,6 +DA:1965,6 +DA:1966,6 +DA:1968,6 +DA:1969,6 +DA:1970,6 +BRDA:1963,9,0,6 +BRDA:1963,9,1,6 +FN:1972,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:6,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:1973,6 +FN:1975,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +FNDA:33,System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +DA:1976,33 +DA:1977,33 +DA:1978,33 +DA:1979,33 +DA:1981,33 +DA:1982,33 +BRDA:1977,10,0,33 +BRDA:1977,10,1,0 +FN:1984,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) +FNDA:36,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) +DA:1985,36 +DA:1986,36 +DA:1987,36 +DA:1988,36 +DA:1989,36 +DA:1991,36 +DA:1992,36 +DA:1993,36 +BRDA:1986,9,0,36 +BRDA:1986,9,1,36 +FN:1995,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) +FNDA:46,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) +DA:1996,46 +DA:1997,46 +DA:1998,46 +DA:1999,46 +DA:2000,46 +DA:2002,46 +DA:2003,46 +DA:2004,46 +BRDA:1997,9,0,46 +BRDA:1997,9,1,46 +FN:2006,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:58,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:2007,58 +FN:2009,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +FNDA:58,System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +DA:2010,58 +DA:2011,58 +DA:2012,58 +DA:2013,58 +DA:2015,58 +DA:2016,58 +DA:2017,58 +BRDA:2011,10,0,58 +BRDA:2011,10,1,0 +FN:2019,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +FNDA:10,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) +DA:2020,10 +FN:2022,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +FNDA:10,TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) +DA:2023,10 +DA:2024,10 +DA:2025,10 +DA:2026,10 +DA:2028,10 +DA:2029,10 +DA:2030,10 +BRDA:2024,10,0,10 +BRDA:2024,10,1,0 +FN:2032,System.Reflection.MethodInfo System.Linq.Dynamic.Core.DynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2) +FNDA:21,System.Reflection.MethodInfo System.Linq.Dynamic.Core.DynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2) +DA:2033,21 +DA:2035,21 +DA:2036,21 +DA:2037,61 +DA:2039,0 +DA:2040,0 +DA:2041,0 +DA:2043,21 +FN:29,System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::.cctor() +DA:30,1 +DA:105,1 +DA:125,1 +DA:201,1 +DA:221,1 +DA:273,1 +DA:274,1 +DA:313,1 +DA:336,1 +DA:354,1 +DA:408,1 +DA:476,1 +DA:797,1 +DA:814,1 +DA:868,1 +DA:885,1 +DA:1495,1 +DA:1567,1 +DA:1622,1 +DA:1645,1 +DA:1646,3 +DA:1647,3 +DA:1648,3 +DA:1649,3 +DA:1650,3 +DA:1651,3 +DA:1652,3 +DA:1704,1 +DA:1722,1 +DA:1723,3 +DA:1724,3 +DA:1725,3 +DA:1726,3 +DA:1727,3 +DA:1728,3 +DA:1729,3 +FN:191,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions/d__9::MoveNext() +FNDA:5,System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions/d__9::MoveNext() +DA:192,5 +DA:193,419 +DA:194,202 +DA:195,202 +DA:196,202 +DA:197,5 +BRDA:193,133,1,202 +BRDA:192,14,1,202 +BRDA:193,133,0,5 +LF:751 +LH:731 +BRF:113 +BRH:90 +FNF:108 +FNH:104 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExtensibilityPoint.cs +FN:14,System.Void System.Linq.Dynamic.Core.ExtensibilityPoint::.cctor() +FNDA:197,System.Void System.Linq.Dynamic.Core.ExtensibilityPoint::.cctor() +DA:15,197 +LF:1 +LH:1 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GroupResult.cs +FN:17,System.Object System.Linq.Dynamic.Core.GroupResult::get_Key() +FNDA:15,System.Object System.Linq.Dynamic.Core.GroupResult::get_Key() +DA:18,15 +FN:23,System.Int32 System.Linq.Dynamic.Core.GroupResult::get_Count() +FNDA:15,System.Int32 System.Linq.Dynamic.Core.GroupResult::get_Count() +DA:24,15 +FN:28,System.Collections.IEnumerable System.Linq.Dynamic.Core.GroupResult::get_Items() +FNDA:13,System.Collections.IEnumerable System.Linq.Dynamic.Core.GroupResult::get_Items() +DA:29,13 +FN:33,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.GroupResult::get_Subgroups() +FNDA:17,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.GroupResult::get_Subgroups() +DA:34,17 +FN:42,System.String System.Linq.Dynamic.Core.GroupResult::ToString() +FNDA:2,System.String System.Linq.Dynamic.Core.GroupResult::ToString() +DA:43,2 +DA:44,2 +DA:45,2 +LF:7 +LH:7 +BRF:0 +BRH:0 +FNF:5 +FNH:5 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs +FN:14,System.Linq.IQueryable System.Linq.Dynamic.Core.PagedResult::get_Queryable() +FNDA:4,System.Linq.IQueryable System.Linq.Dynamic.Core.PagedResult::get_Queryable() +DA:15,4 +FN:22,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_CurrentPage() +FNDA:7,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_CurrentPage() +DA:23,7 +FN:30,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageCount() +FNDA:7,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageCount() +DA:31,7 +FN:38,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageSize() +FNDA:7,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageSize() +DA:39,7 +FN:46,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_RowCount() +FNDA:11,System.Int32 System.Linq.Dynamic.Core.PagedResult::get_RowCount() +DA:47,11 +FN:61,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.PagedResult`1::get_Queryable() +FNDA:4,System.Linq.IQueryable`1 System.Linq.Dynamic.Core.PagedResult`1::get_Queryable() +DA:62,4 +LF:6 +LH:6 +BRF:0 +BRH:0 +FNF:6 +FNH:6 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParameterExpressionHelper.cs +FN:7,System.Linq.Expressions.ParameterExpression System.Linq.Dynamic.Core.ParameterExpressionHelper::CreateParameterExpression(System.Type,System.String) +FNDA:596,System.Linq.Expressions.ParameterExpression System.Linq.Dynamic.Core.ParameterExpressionHelper::CreateParameterExpression(System.Type,System.String) +DA:8,596 +DA:9,596 +DA:10,596 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParsingConfig.cs +FN:12,System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_Default() +FNDA:470,System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_Default() +DA:13,470 +FN:17,System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_DefaultEFCore21() +FNDA:1,System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_DefaultEFCore21() +DA:18,1 +FN:30,System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider System.Linq.Dynamic.Core.ParsingConfig::get_CustomTypeProvider() +FNDA:555,System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider System.Linq.Dynamic.Core.ParsingConfig::get_CustomTypeProvider() +DA:31,555 +DA:36,555 +DA:38,555 +FN:40,System.Void System.Linq.Dynamic.Core.ParsingConfig::set_CustomTypeProvider(System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider) +FNDA:7,System.Void System.Linq.Dynamic.Core.ParsingConfig::set_CustomTypeProvider(System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider) +DA:41,7 +DA:42,7 +DA:43,7 +DA:44,7 +DA:45,7 +DA:46,7 +BRDA:42,15,0,7 +BRDA:42,15,1,7 +FN:52,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AreContextKeywordsEnabled() +FNDA:522,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AreContextKeywordsEnabled() +DA:53,522 +FN:57,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_UseDynamicObjectClassForAnonymousTypes() +FNDA:47,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_UseDynamicObjectClassForAnonymousTypes() +DA:58,47 +FN:63,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_EvaluateGroupByAtDatabase() +FNDA:4,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_EvaluateGroupByAtDatabase() +DA:64,4 +FN:68,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AllowNewToEvaluateAnyType() +FNDA:19,System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AllowNewToEvaluateAnyType() +DA:69,19 +FN:18,System.Void System.Linq.Dynamic.Core.ParsingConfig::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.ParsingConfig::.cctor() +DA:19,1 +DA:20,1 +DA:21,1 +LF:18 +LH:18 +BRF:2 +BRH:2 +FNF:9 +FNH:9 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\TypeConverterFactory.cs +FN:14,System.ComponentModel.TypeConverter System.Linq.Dynamic.Core.TypeConverterFactory::GetConverter(System.Type) +FNDA:11,System.ComponentModel.TypeConverter System.Linq.Dynamic.Core.TypeConverterFactory::GetConverter(System.Type) +DA:15,11 +DA:16,11 +DA:19,11 +DA:34,11 +LF:4 +LH:4 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs +FN:16,T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1,System.String) +FNDA:48,T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1,System.String) +DA:17,48 +DA:18,48 +DA:19,48 +DA:21,48 +DA:22,0 +DA:23,0 +DA:25,0 +DA:28,48 +DA:29,48 +BRDA:21,37,0,0 +BRDA:21,37,1,48 +FN:32,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) +FNDA:27262,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) +DA:33,27262 +DA:34,27262 +DA:35,5 +DA:36,5 +DA:38,5 +DA:41,27257 +DA:42,27257 +BRDA:34,12,0,5 +BRDA:34,12,1,27257 +FN:48,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) +FNDA:0,T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:55,0 +DA:58,0 +DA:59,0 +BRDA:50,12,0,0 +BRDA:50,12,1,0 +FN:62,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1,System.String) +FNDA:0,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1,System.String) +DA:63,0 +DA:64,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:70,0 +DA:73,0 +DA:74,0 +BRDA:66,20,0,0 +BRDA:66,20,1,0 +FN:77,System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) +FNDA:2156,System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) +DA:78,2156 +DA:79,2156 +DA:80,2156 +DA:81,6 +DA:82,6 +DA:83,6 +DA:84,2150 +DA:85,12 +DA:86,12 +DA:87,12 +DA:89,2156 +DA:90,18 +DA:91,18 +DA:93,18 +DA:96,2138 +DA:97,2138 +BRDA:80,9,0,6 +BRDA:80,9,1,2150 +BRDA:84,38,0,12 +BRDA:84,38,1,2156 +BRDA:89,60,0,18 +BRDA:89,60,1,2138 +FN:99,System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:106,0 +DA:109,0 +DA:110,0 +BRDA:101,2,0,0 +BRDA:101,2,1,0 +BRDA:101,18,0,0 +BRDA:101,18,1,0 +FN:113,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1,System.String) +FNDA:530,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1,System.String) +DA:114,530 +DA:115,530 +DA:117,1119 +DA:118,0 +DA:119,0 +DA:121,0 +DA:124,530 +DA:125,530 +BRDA:117,16,0,4 +BRDA:117,16,1,530 +BRDA:117,48,0,0 +BRDA:117,48,1,530 +FN:127,System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) +FNDA:0,System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:133,0 +DA:136,0 +DA:137,0 +BRDA:129,17,0,0 +BRDA:129,17,1,0 +LF:71 +LH:34 +BRF:24 +BRH:12 +FNF:8 +FNH:4 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs +FN:12,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) +DA:13,0 +DA:14,0 +DA:15,0 +FN:20,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) +FNDA:12,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) +DA:21,12 +DA:22,12 +DA:23,12 +FN:28,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) +DA:29,0 +DA:30,0 +DA:31,0 +FN:36,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) +FNDA:0,System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) +DA:37,0 +DA:38,0 +DA:39,0 +LF:12 +LH:3 +BRF:0 +BRH:0 +FNF:4 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\TextParser.cs +FN:43,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::SetTextPos(System.Int32) +FNDA:527,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::SetTextPos(System.Int32) +DA:44,527 +DA:45,527 +DA:46,527 +DA:47,527 +BRDA:46,21,0,0 +BRDA:46,21,1,527 +FN:49,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextChar() +FNDA:9966,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextChar() +DA:50,9966 +DA:51,19931 +DA:52,9966 +DA:53,9966 +BRDA:51,17,0,9966 +BRDA:51,17,1,9967 +BRDA:52,46,0,491 +BRDA:52,46,1,9476 +FN:55,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextToken() +FNDA:3647,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextToken() +DA:56,3647 +DA:57,4888 +DA:58,1241 +DA:59,1241 +DA:60,1241 +DA:62,3647 +DA:63,3647 +DA:65,3647 +DA:68,9 +DA:69,9 +DA:70,8 +DA:71,8 +DA:72,8 +DA:73,8 +DA:75,1 +DA:76,1 +DA:77,1 +DA:78,9 +DA:81,2 +DA:82,2 +DA:83,2 +DA:86,30 +DA:87,30 +DA:88,4 +DA:89,4 +DA:90,4 +DA:91,4 +DA:93,26 +DA:94,26 +DA:95,26 +DA:96,30 +DA:99,248 +DA:100,248 +DA:101,248 +DA:104,243 +DA:105,243 +DA:106,243 +DA:109,12 +DA:110,12 +DA:111,12 +DA:114,11 +DA:115,11 +DA:116,11 +DA:119,16 +DA:120,16 +DA:121,16 +DA:124,35 +DA:125,35 +DA:126,35 +DA:129,117 +DA:130,117 +DA:131,117 +DA:134,27 +DA:135,27 +DA:136,27 +DA:139,286 +DA:140,286 +DA:141,286 +DA:144,2 +DA:145,2 +DA:146,2 +DA:149,2 +DA:150,2 +DA:151,2 +DA:154,44 +DA:155,44 +DA:156,4 +DA:157,4 +DA:158,4 +DA:159,4 +DA:160,40 +DA:161,1 +DA:162,1 +DA:163,1 +DA:164,1 +DA:165,39 +DA:166,25 +DA:167,25 +DA:168,25 +DA:169,25 +DA:171,14 +DA:172,14 +DA:173,14 +DA:174,44 +DA:177,206 +DA:178,206 +DA:179,111 +DA:180,111 +DA:181,111 +DA:182,111 +DA:183,95 +DA:184,19 +DA:185,19 +DA:186,19 +DA:187,19 +DA:189,76 +DA:190,76 +DA:191,76 +DA:192,206 +DA:195,55 +DA:196,55 +DA:197,4 +DA:198,4 +DA:199,4 +DA:200,4 +DA:201,51 +DA:202,8 +DA:203,8 +DA:204,8 +DA:205,8 +DA:207,43 +DA:208,43 +DA:209,43 +DA:210,55 +DA:213,16 +DA:214,16 +DA:215,6 +DA:216,6 +DA:217,6 +DA:218,6 +DA:219,10 +DA:220,2 +DA:221,2 +DA:222,2 +DA:223,2 +DA:225,8 +DA:226,8 +DA:227,8 +DA:228,16 +DA:231,10 +DA:232,10 +DA:233,10 +DA:236,10 +DA:237,10 +DA:238,10 +DA:241,18 +DA:242,18 +DA:243,1 +DA:244,1 +DA:245,1 +DA:246,1 +DA:248,17 +DA:249,17 +DA:250,17 +DA:251,18 +DA:255,53 +DA:257,55 +DA:261,563 +DA:262,563 +DA:263,563 +DA:265,563 +DA:266,8 +DA:267,8 +DA:268,16 +DA:269,8 +DA:270,563 +DA:271,563 +DA:273,55 +DA:274,1 +DA:276,54 +DA:277,108 +DA:279,52 +DA:280,52 +DA:283,2195 +DA:284,1464 +DA:286,5967 +DA:287,5967 +DA:288,11938 +DA:289,1464 +DA:290,1464 +DA:293,731 +DA:294,242 +DA:295,242 +DA:297,329 +DA:298,329 +DA:299,658 +DA:301,242 +DA:302,242 +DA:303,9 +DA:304,9 +DA:305,9 +DA:307,78 +DA:308,78 +DA:309,156 +DA:311,7 +DA:312,7 +DA:314,240 +DA:315,21 +DA:316,21 +DA:317,21 +DA:318,6 +DA:319,10 +DA:320,2 +DA:321,4 +DA:322,19 +DA:323,15 +DA:326,219 +DA:327,2 +DA:328,2 +DA:331,217 +DA:332,25 +DA:333,25 +DA:334,25 +DA:335,25 +DA:337,34 +DA:338,34 +DA:339,68 +DA:340,24 +DA:342,216 +DA:343,3 +DA:344,3 +DA:345,3 +DA:346,5 +DA:347,3 +DA:349,6 +DA:350,6 +DA:351,12 +DA:352,3 +DA:354,226 +DA:355,225 +DA:356,226 +DA:357,216 +DA:360,489 +DA:361,488 +DA:362,488 +DA:363,488 +DA:366,1 +DA:369,3636 +DA:370,3636 +DA:371,3635 +DA:372,3636 +DA:373,3636 +BRDA:57,25,1,1241 +BRDA:57,25,0,3647 +BRDA:65,46,0,2974 +BRDA:65,55,0,1338 +BRDA:65,46,1,673 +BRDA:65,202,0,663 +BRDA:65,55,1,9 +BRDA:69,256,0,8 +BRDA:69,256,1,1 +BRDA:65,55,5,2 +BRDA:65,55,6,30 +BRDA:87,316,0,4 +BRDA:87,316,1,26 +BRDA:65,55,8,248 +BRDA:65,55,9,243 +BRDA:65,213,1,12 +BRDA:65,213,3,11 +BRDA:65,55,10,16 +BRDA:65,55,11,35 +BRDA:65,55,12,117 +BRDA:65,55,13,27 +BRDA:65,55,14,286 +BRDA:65,55,15,2 +BRDA:65,55,26,2 +BRDA:65,55,28,44 +BRDA:155,527,0,4 +BRDA:155,527,1,40 +BRDA:160,557,0,1 +BRDA:160,557,1,39 +BRDA:165,587,0,25 +BRDA:165,587,1,14 +BRDA:65,55,29,206 +BRDA:178,634,0,111 +BRDA:178,634,1,95 +BRDA:183,664,0,19 +BRDA:183,664,1,76 +BRDA:65,55,30,55 +BRDA:196,711,0,4 +BRDA:196,711,1,51 +BRDA:201,741,0,8 +BRDA:201,741,1,43 +BRDA:65,55,31,16 +BRDA:214,788,0,6 +BRDA:214,788,1,10 +BRDA:219,818,0,2 +BRDA:219,818,1,8 +BRDA:65,189,1,10 +BRDA:65,202,1,10 +BRDA:65,213,2,18 +BRDA:242,895,0,1 +BRDA:242,895,1,17 +BRDA:65,55,2,53 +BRDA:65,55,7,53 +BRDA:277,1093,1,55 +BRDA:271,1027,1,563 +BRDA:265,955,0,8 +BRDA:268,979,0,8 +BRDA:268,979,1,8 +BRDA:265,955,1,563 +BRDA:271,1002,0,562 +BRDA:271,1002,1,1 +BRDA:271,1027,0,55 +BRDA:273,1047,0,1 +BRDA:273,1047,1,54 +BRDA:277,1093,0,52 +BRDA:65,55,3,2195 +BRDA:65,55,4,2195 +BRDA:65,55,16,2195 +BRDA:65,55,17,2195 +BRDA:65,55,18,2195 +BRDA:65,55,19,2195 +BRDA:65,55,20,2195 +BRDA:65,55,21,2195 +BRDA:65,55,22,2195 +BRDA:65,55,23,2195 +BRDA:65,55,24,2195 +BRDA:65,55,25,2195 +BRDA:65,55,27,2195 +BRDA:65,189,0,2195 +BRDA:65,213,0,2195 +BRDA:283,1116,0,888 +BRDA:283,1126,0,746 +BRDA:283,1136,0,737 +BRDA:283,1146,0,735 +BRDA:283,1156,0,734 +BRDA:283,1116,1,1461 +BRDA:283,1126,1,1461 +BRDA:283,1136,1,1461 +BRDA:283,1146,1,1461 +BRDA:283,1156,1,1461 +BRDA:283,1175,0,1464 +BRDA:288,1217,1,5968 +BRDA:288,1198,0,1511 +BRDA:288,1198,1,4458 +BRDA:288,1217,0,1464 +BRDA:283,1175,1,731 +BRDA:293,1241,0,242 +BRDA:299,1273,1,329 +BRDA:299,1273,0,242 +BRDA:302,1286,0,242 +BRDA:302,1286,1,0 +BRDA:302,1305,0,9 +BRDA:309,1346,1,78 +BRDA:309,1346,0,7 +BRDA:302,1305,1,240 +BRDA:314,1360,0,231 +BRDA:314,1360,1,9 +BRDA:314,1379,0,21 +BRDA:317,1403,0,6 +BRDA:319,1433,0,4 +BRDA:319,1433,1,2 +BRDA:317,1403,1,19 +BRDA:314,1379,1,219 +BRDA:326,1509,0,2 +BRDA:326,1509,1,217 +BRDA:331,1534,0,25 +BRDA:339,1577,1,34 +BRDA:339,1577,0,24 +BRDA:331,1534,1,216 +BRDA:342,1588,0,213 +BRDA:342,1588,1,3 +BRDA:342,1607,0,3 +BRDA:346,1627,0,2 +BRDA:346,1627,1,1 +BRDA:346,1646,0,2 +BRDA:346,1646,1,3 +BRDA:351,1686,1,6 +BRDA:351,1686,0,3 +BRDA:342,1607,1,216 +BRDA:354,1697,0,212 +BRDA:354,1697,1,4 +BRDA:354,1716,0,10 +BRDA:354,1716,1,216 +BRDA:355,1733,0,212 +BRDA:355,1733,1,4 +BRDA:355,1752,0,9 +BRDA:355,1752,1,216 +BRDA:356,1769,0,212 +BRDA:356,1769,1,4 +BRDA:356,1788,0,10 +BRDA:293,1241,1,489 +BRDA:360,1817,0,488 +BRDA:360,1817,1,1 +BRDA:356,1788,1,3636 +FN:375,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) +FNDA:1545,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) +DA:376,1545 +DA:377,1545 +DA:378,5 +DA:379,5 +DA:381,1540 +BRDA:377,20,0,5 +BRDA:377,20,1,1540 +FN:383,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId) +FNDA:1232,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId) +DA:384,1232 +DA:385,1232 +DA:386,0 +DA:387,0 +DA:389,1231 +BRDA:385,20,0,0 +BRDA:385,20,1,1232 +FN:391,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateExpression() +FNDA:19,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateExpression() +DA:392,19 +DA:393,19 +DA:394,4 +DA:395,4 +DA:397,15 +BRDA:393,14,0,4 +BRDA:393,14,1,15 +FN:399,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateDigit() +FNDA:28,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateDigit() +DA:400,28 +DA:401,28 +DA:402,1 +DA:403,1 +DA:405,27 +BRDA:401,17,0,1 +BRDA:401,17,1,27 +FN:407,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateHexChar() +FNDA:9,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateHexChar() +DA:408,9 +DA:409,9 +DA:410,2 +DA:411,2 +DA:413,7 +BRDA:409,17,0,2 +BRDA:409,17,1,7 +FN:415,System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.String,System.Object[]) +FNDA:5,System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.String,System.Object[]) +DA:416,5 +DA:417,5 +DA:418,5 +FN:420,System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.Int32,System.String,System.Object[]) +FNDA:16,System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.Int32,System.String,System.Object[]) +DA:421,16 +DA:422,16 +DA:423,16 +FN:425,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.TextParser::GetAliasedTokenId(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) +FNDA:3635,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.TextParser::GetAliasedTokenId(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) +DA:426,3635 +DA:428,3635 +DA:429,3635 +BRDA:428,3,0,1464 +BRDA:428,3,1,3618 +BRDA:428,18,0,3619 +BRDA:428,18,1,17 +FN:431,System.Boolean System.Linq.Dynamic.Core.Tokenizer.TextParser::IsHexChar(System.Char) +FNDA:87,System.Boolean System.Linq.Dynamic.Core.Tokenizer.TextParser::IsHexChar(System.Char) +DA:432,87 +DA:433,87 +DA:434,46 +DA:435,46 +DA:438,41 +DA:439,41 +DA:440,41 +DA:441,41 +DA:444,0 +DA:445,87 +BRDA:433,9,0,46 +BRDA:433,9,1,41 +BRDA:438,26,0,41 +BRDA:441,39,0,38 +BRDA:441,39,1,3 +BRDA:438,26,1,0 +FN:34,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.ctor(System.String) +FNDA:526,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.ctor(System.String) +DA:35,526 +DA:36,527 +DA:37,527 +DA:38,527 +DA:39,527 +DA:40,527 +DA:41,523 +FN:8,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.cctor() +DA:9,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +LF:306 +LH:303 +BRF:170 +BRH:166 +FNF:14 +FNH:14 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\Token.cs +FN:4,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_Id() +FNDA:44168,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_Id() +DA:5,44168 +FN:6,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_OriginalId() +FNDA:3636,System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_OriginalId() +DA:7,3636 +FN:8,System.String System.Linq.Dynamic.Core.Tokenizer.Token::get_Text() +FNDA:11859,System.String System.Linq.Dynamic.Core.Tokenizer.Token::get_Text() +DA:9,11859 +FN:10,System.Int32 System.Linq.Dynamic.Core.Tokenizer.Token::get_Pos() +FNDA:5975,System.Int32 System.Linq.Dynamic.Core.Tokenizer.Token::get_Pos() +DA:11,5975 +LF:4 +LH:4 +BRF:0 +BRH:0 +FNF:4 +FNH:4 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ConstantExpressionHelper.cs +FN:11,System.Boolean System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::TryGetText(System.Linq.Expressions.Expression,System.String&) +FNDA:785,System.Boolean System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::TryGetText(System.Linq.Expressions.Expression,System.String&) +DA:12,785 +DA:13,785 +DA:14,785 +FN:16,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::CreateLiteral(System.Object,System.String) +FNDA:278,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::CreateLiteral(System.Object,System.String) +DA:17,278 +DA:18,278 +DA:19,87 +DA:20,87 +DA:22,87 +DA:23,87 +DA:24,87 +DA:26,278 +DA:27,278 +BRDA:18,17,0,87 +BRDA:18,17,1,278 +FN:7,System.Void System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::.cctor() +DA:8,1 +DA:9,1 +LF:14 +LH:14 +BRF:2 +BRH:2 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\Constants.cs +FN:6,System.Void System.Linq.Dynamic.Core.Parser.Constants::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.Parser.Constants::.cctor() +DA:7,1 +DA:8,1 +DA:9,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionHelper.cs +FN:9,System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) +FNDA:37,System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) +DA:10,37 +DA:11,37 +DA:12,9 +DA:13,9 +DA:16,28 +DA:17,4 +DA:18,4 +DA:19,4 +DA:20,4 +DA:21,24 +DA:22,4 +DA:23,4 +DA:24,4 +DA:25,4 +DA:26,20 +DA:27,4 +DA:28,4 +DA:29,4 +DA:30,4 +DA:31,16 +DA:32,10 +DA:33,10 +DA:34,10 +DA:35,10 +DA:36,6 +DA:37,2 +DA:38,2 +DA:39,2 +DA:40,2 +DA:41,4 +DA:42,2 +DA:43,2 +DA:44,2 +DA:45,2 +DA:46,2 +DA:47,2 +DA:48,2 +DA:49,2 +DA:50,2 +DA:51,37 +BRDA:11,22,0,9 +BRDA:11,22,1,28 +BRDA:16,52,0,28 +BRDA:16,52,1,0 +BRDA:16,81,0,4 +BRDA:18,107,0,4 +BRDA:18,107,1,0 +BRDA:19,154,0,0 +BRDA:19,154,1,4 +BRDA:16,81,1,24 +BRDA:21,206,0,24 +BRDA:21,206,1,0 +BRDA:21,235,0,4 +BRDA:23,261,0,4 +BRDA:23,261,1,0 +BRDA:24,308,0,0 +BRDA:24,308,1,4 +BRDA:21,235,1,20 +BRDA:26,360,0,20 +BRDA:26,360,1,0 +BRDA:26,389,0,4 +BRDA:28,415,0,4 +BRDA:28,415,1,0 +BRDA:29,462,0,0 +BRDA:29,462,1,4 +BRDA:26,389,1,16 +BRDA:31,514,0,8 +BRDA:31,514,1,8 +BRDA:31,545,0,10 +BRDA:33,571,0,2 +BRDA:33,571,1,8 +BRDA:34,618,0,8 +BRDA:34,618,1,2 +BRDA:31,545,1,6 +BRDA:36,670,0,6 +BRDA:36,670,1,0 +BRDA:36,701,0,2 +BRDA:38,727,0,2 +BRDA:38,727,1,0 +BRDA:39,774,0,0 +BRDA:39,774,1,2 +BRDA:36,701,1,4 +BRDA:41,826,0,4 +BRDA:41,826,1,0 +BRDA:41,857,0,2 +BRDA:43,883,0,2 +BRDA:43,883,1,0 +BRDA:44,930,0,0 +BRDA:44,930,1,2 +BRDA:41,857,1,2 +BRDA:46,982,0,2 +BRDA:46,982,1,0 +BRDA:46,1013,0,2 +BRDA:48,1039,0,2 +BRDA:48,1039,1,0 +BRDA:49,1086,0,0 +BRDA:49,1086,1,2 +BRDA:46,1013,1,37 +FN:53,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateAdd(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:14,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateAdd(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:54,14 +DA:55,14 +DA:56,14 +FN:58,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStringConcat(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:20,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStringConcat(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:59,20 +DA:60,20 +DA:61,20 +FN:63,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateSubtract(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:1,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateSubtract(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:64,1 +DA:65,1 +DA:66,1 +FN:68,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:209,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:69,209 +DA:70,209 +DA:71,209 +DA:72,209 +FN:74,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateNotEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:7,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateNotEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:75,7 +DA:76,7 +DA:77,7 +DA:78,7 +FN:80,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:43,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:81,43 +DA:82,43 +DA:83,1 +DA:84,1 +DA:87,42 +DA:88,2 +DA:89,2 +DA:90,2 +DA:91,2 +DA:94,40 +DA:95,43 +BRDA:82,24,0,1 +BRDA:82,24,1,42 +BRDA:87,77,0,40 +BRDA:87,77,1,2 +BRDA:87,100,0,2 +BRDA:89,119,0,0 +BRDA:89,119,1,2 +BRDA:90,158,0,0 +BRDA:90,158,1,2 +BRDA:87,100,1,40 +FN:97,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:3,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:98,3 +DA:99,3 +DA:100,1 +DA:101,1 +DA:104,2 +DA:105,1 +DA:106,1 +DA:107,1 +DA:110,1 +DA:111,3 +BRDA:99,24,0,1 +BRDA:99,24,1,2 +BRDA:104,77,0,1 +BRDA:104,77,1,1 +BRDA:104,100,0,1 +BRDA:106,119,0,0 +BRDA:106,119,1,1 +BRDA:106,157,0,0 +BRDA:106,157,1,1 +BRDA:104,100,1,1 +FN:113,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:8,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:114,8 +DA:115,8 +DA:116,1 +DA:117,1 +DA:120,7 +DA:121,4 +DA:122,4 +DA:123,4 +DA:126,3 +DA:127,8 +BRDA:115,24,0,1 +BRDA:115,24,1,7 +BRDA:120,77,0,3 +BRDA:120,77,1,4 +BRDA:120,100,0,4 +BRDA:122,119,0,0 +BRDA:122,119,1,4 +BRDA:122,157,0,0 +BRDA:122,157,1,4 +BRDA:120,100,1,3 +FN:129,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:4,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:130,4 +DA:131,4 +DA:132,1 +DA:133,1 +DA:136,3 +DA:137,1 +DA:138,1 +DA:139,1 +DA:142,2 +DA:143,4 +BRDA:131,24,0,1 +BRDA:131,24,1,3 +BRDA:136,77,0,2 +BRDA:136,77,1,1 +BRDA:136,100,0,1 +BRDA:138,119,0,0 +BRDA:138,119,1,1 +BRDA:138,157,0,0 +BRDA:138,157,1,1 +BRDA:136,100,1,2 +FN:145,System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeForEqualityIfPossible(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) +FNDA:216,System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeForEqualityIfPossible(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) +DA:146,216 +DA:151,216 +DA:152,216 +DA:154,216 +DA:155,26 +DA:156,26 +DA:157,26 +DA:159,216 +DA:160,0 +DA:161,0 +DA:162,0 +DA:163,216 +BRDA:154,33,0,26 +BRDA:154,33,1,190 +BRDA:154,51,0,26 +BRDA:156,79,0,26 +BRDA:156,79,1,26 +BRDA:154,51,1,216 +BRDA:159,102,0,26 +BRDA:159,102,1,190 +BRDA:159,120,0,0 +BRDA:161,148,0,0 +BRDA:161,148,1,0 +BRDA:159,120,1,216 +FN:165,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeStringForEqualityIfPossible(System.String,System.Type) +FNDA:28,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeStringForEqualityIfPossible(System.String,System.Type) +DA:166,28 +DA:167,28 +DA:168,0 +DA:169,0 +DA:172,28 +DA:173,1 +DA:174,1 +DA:186,27 +DA:187,28 +BRDA:167,17,0,0 +BRDA:167,17,1,28 +BRDA:167,38,0,0 +BRDA:167,38,1,28 +BRDA:172,81,0,2 +BRDA:172,81,1,26 +BRDA:172,98,0,1 +BRDA:172,98,1,27 +FN:189,System.Reflection.MethodInfo System.Linq.Dynamic.Core.Parser.ExpressionHelper::GetStaticMethod(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:24,System.Reflection.MethodInfo System.Linq.Dynamic.Core.Parser.ExpressionHelper::GetStaticMethod(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:190,24 +DA:191,24 +DA:192,24 +DA:193,1 +DA:194,1 +DA:195,1 +DA:197,24 +DA:198,24 +BRDA:192,47,0,1 +BRDA:192,47,1,24 +FN:200,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStaticMethodCall(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +FNDA:24,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStaticMethodCall(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) +DA:201,24 +DA:202,24 +DA:203,24 +LF:130 +LH:125 +BRF:120 +BRH:89 +FNF:14 +FNH:14 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs +FN:69,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessParameters(System.Linq.Expressions.ParameterExpression[]) +FNDA:510,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessParameters(System.Linq.Expressions.ParameterExpression[]) +DA:70,510 +DA:71,2107 +DA:72,33 +DA:73,33 +DA:74,32 +DA:77,509 +DA:78,490 +DA:79,490 +DA:80,490 +DA:82,490 +DA:83,490 +DA:84,490 +DA:85,490 +DA:86,490 +DA:87,509 +BRDA:71,9,0,1 +BRDA:71,9,1,510 +BRDA:71,76,1,33 +BRDA:71,76,0,509 +BRDA:77,99,0,490 +BRDA:82,134,0,490 +BRDA:82,134,1,490 +BRDA:77,99,1,509 +FN:89,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessValues(System.Object[]) +FNDA:499,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessValues(System.Object[]) +DA:90,499 +DA:91,1294 +DA:92,148 +DA:93,148 +DA:96,148 +DA:97,4 +DA:98,4 +DA:99,4 +DA:101,144 +DA:102,144 +DA:103,144 +DA:104,148 +DA:105,499 +BRDA:91,94,1,148 +BRDA:96,16,0,144 +BRDA:96,16,1,4 +BRDA:96,34,0,4 +BRDA:96,34,1,144 +BRDA:91,94,0,499 +FN:107,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::AddSymbol(System.String,System.Object) +FNDA:177,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::AddSymbol(System.String,System.Object) +DA:108,177 +DA:109,177 +DA:110,1 +DA:111,1 +DA:114,176 +DA:115,176 +BRDA:109,15,0,1 +BRDA:109,15,1,176 +FN:123,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::Parse(System.Type,System.Boolean) +FNDA:483,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::Parse(System.Type,System.Boolean) +DA:124,483 +DA:125,482 +DA:126,483 +DA:128,482 +DA:129,482 +DA:131,454 +DA:132,55 +DA:133,55 +DA:134,0 +DA:135,0 +DA:137,55 +DA:139,454 +DA:141,450 +DA:142,450 +BRDA:131,48,0,55 +BRDA:133,67,0,0 +BRDA:133,67,1,55 +BRDA:131,48,1,454 +FN:145,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrdering(System.Boolean) +FNDA:26,System.Collections.Generic.IList`1 System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrdering(System.Boolean) +DA:146,26 +DA:147,26 +DA:148,30 +DA:149,30 +DA:150,30 +DA:151,28 +DA:152,28 +DA:153,1 +DA:154,1 +DA:155,1 +DA:156,27 +DA:157,4 +DA:158,4 +DA:159,4 +DA:160,4 +DA:163,28 +DA:164,6 +DA:165,6 +DA:166,6 +DA:168,22 +DA:169,22 +DA:170,22 +DA:172,28 +DA:174,28 +DA:175,24 +DA:176,24 +DA:179,4 +DA:180,4 +DA:182,24 +DA:183,24 +DA:184,24 +BRDA:152,33,0,27 +BRDA:152,33,1,1 +BRDA:152,53,0,1 +BRDA:152,53,1,27 +BRDA:156,82,0,23 +BRDA:156,82,1,4 +BRDA:156,102,0,4 +BRDA:156,102,1,28 +BRDA:163,121,0,25 +BRDA:163,121,1,3 +BRDA:163,139,0,6 +BRDA:165,143,0,1 +BRDA:165,143,1,5 +BRDA:163,139,1,22 +BRDA:169,163,0,3 +BRDA:169,163,1,19 +BRDA:174,239,0,24 +BRDA:174,239,1,4 +FN:188,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConditionalOperator() +FNDA:847,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConditionalOperator() +DA:189,847 +DA:190,846 +DA:191,847 +DA:192,814 +DA:193,1 +DA:194,1 +DA:195,1 +DA:196,1 +DA:197,1 +DA:198,1 +DA:199,1 +DA:200,1 +DA:201,814 +DA:202,814 +BRDA:192,47,0,1 +BRDA:192,47,1,814 +FN:222,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNullCoalescingOperator() +FNDA:846,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNullCoalescingOperator() +DA:223,846 +DA:224,847 +DA:225,814 +DA:226,6 +DA:227,6 +DA:228,6 +DA:229,6 +DA:230,6 +DA:231,814 +DA:232,814 +BRDA:225,30,0,6 +BRDA:225,30,1,814 +FN:235,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaOperator() +FNDA:847,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaOperator() +DA:236,847 +DA:237,847 +DA:238,814 +DA:239,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:244,0 +DA:246,0 +DA:247,0 +DA:248,814 +DA:249,814 +BRDA:238,26,0,0 +BRDA:238,26,1,814 +BRDA:238,55,0,0 +BRDA:241,87,0,0 +BRDA:241,87,1,0 +BRDA:241,114,0,0 +BRDA:241,114,1,0 +BRDA:238,55,1,814 +FN:252,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIsNull() +FNDA:6,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIsNull() +DA:253,6 +DA:254,6 +DA:255,6 +DA:256,6 +DA:257,6 +DA:258,1 +DA:259,1 +DA:262,5 +DA:263,5 +BRDA:257,48,0,1 +BRDA:257,48,1,5 +FN:266,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrOperator() +FNDA:847,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrOperator() +DA:267,847 +DA:268,847 +DA:269,831 +DA:270,17 +DA:271,17 +DA:272,17 +DA:273,17 +DA:274,17 +DA:275,17 +DA:276,17 +DA:277,814 +DA:278,814 +BRDA:269,122,1,17 +BRDA:269,104,0,814 +BRDA:269,104,1,17 +BRDA:269,122,0,814 +FN:281,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAndOperator() +FNDA:863,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAndOperator() +DA:282,863 +DA:283,863 +DA:284,837 +DA:285,6 +DA:286,6 +DA:287,6 +DA:288,6 +DA:289,6 +DA:290,6 +DA:291,6 +DA:292,831 +DA:293,831 +BRDA:284,122,1,6 +BRDA:284,104,0,832 +BRDA:284,104,1,5 +BRDA:284,122,0,831 +FN:298,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIn() +FNDA:864,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIn() +DA:299,864 +DA:300,864 +DA:301,835 +DA:303,848 +DA:304,18 +DA:305,18 +DA:307,18 +DA:308,18 +DA:309,15 +DA:310,44 +DA:311,33 +DA:312,33 +DA:315,30 +DA:318,29 +DA:319,4 +DA:320,4 +DA:321,4 +DA:324,25 +DA:325,2 +DA:326,2 +DA:327,2 +DA:329,29 +DA:330,12 +DA:331,12 +DA:332,12 +DA:334,17 +DA:335,17 +DA:336,17 +DA:338,29 +DA:339,0 +DA:340,0 +DA:342,29 +DA:343,11 +DA:344,3 +DA:345,3 +DA:346,3 +DA:348,3 +DA:349,0 +DA:350,0 +DA:353,3 +DA:355,3 +DA:356,0 +DA:357,0 +DA:360,3 +DA:362,3 +DA:364,3 +DA:365,3 +DA:367,0 +DA:368,0 +DA:371,14 +DA:372,14 +DA:374,831 +DA:375,831 +BRDA:303,680,1,18 +BRDA:308,62,0,15 +BRDA:310,356,1,33 +BRDA:318,110,0,4 +BRDA:318,110,1,25 +BRDA:318,129,0,4 +BRDA:318,129,1,25 +BRDA:324,185,0,2 +BRDA:324,185,1,29 +BRDA:329,247,0,12 +BRDA:329,247,1,17 +BRDA:338,302,0,0 +BRDA:338,302,1,29 +BRDA:310,356,0,11 +BRDA:308,62,1,3 +BRDA:344,390,0,3 +BRDA:348,433,0,0 +BRDA:348,433,1,3 +BRDA:355,529,0,0 +BRDA:355,529,1,3 +BRDA:344,390,1,0 +BRDA:303,680,0,831 +FN:378,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLogicalAndOrOperator() +FNDA:863,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLogicalAndOrOperator() +DA:379,863 +DA:380,863 +DA:381,876 +DA:382,42 +DA:383,42 +DA:384,42 +DA:385,42 +DA:387,42 +DA:388,32 +DA:389,32 +DA:390,32 +DA:392,42 +DA:393,0 +DA:394,0 +DA:395,0 +DA:397,42 +DA:401,26 +DA:402,1 +DA:403,1 +DA:404,1 +DA:405,25 +DA:406,2 +DA:407,2 +DA:408,2 +DA:412,26 +DA:413,5 +DA:414,5 +DA:415,5 +DA:417,21 +DA:418,21 +DA:419,21 +DA:420,21 +DA:421,26 +DA:424,16 +DA:425,16 +DA:426,16 +DA:428,42 +DA:429,835 +DA:430,835 +BRDA:381,499,1,42 +BRDA:387,63,0,32 +BRDA:387,63,1,42 +BRDA:392,105,0,0 +BRDA:392,105,1,42 +BRDA:397,139,0,16 +BRDA:397,139,1,26 +BRDA:401,178,0,6 +BRDA:401,188,0,1 +BRDA:401,213,0,1 +BRDA:401,178,1,25 +BRDA:401,188,1,25 +BRDA:401,213,1,25 +BRDA:401,233,0,1 +BRDA:401,233,1,25 +BRDA:405,273,0,7 +BRDA:405,283,0,6 +BRDA:405,308,0,2 +BRDA:405,273,1,23 +BRDA:405,283,1,23 +BRDA:405,308,1,23 +BRDA:405,328,0,2 +BRDA:405,328,1,26 +BRDA:412,366,0,21 +BRDA:412,366,1,5 +BRDA:412,396,0,5 +BRDA:412,396,1,21 +BRDA:397,147,1,16 +BRDA:397,147,0,42 +BRDA:381,470,0,851 +BRDA:381,470,1,26 +BRDA:381,499,0,835 +FN:433,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseComparisonOperator() +FNDA:911,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseComparisonOperator() +DA:434,911 +DA:435,911 +DA:436,1136 +DA:437,1136 +DA:438,1136 +DA:439,1136 +DA:440,254 +DA:443,254 +DA:444,254 +DA:445,252 +DA:446,248 +DA:448,248 +DA:449,37 +DA:451,37 +DA:452,0 +DA:453,0 +DA:454,0 +DA:455,0 +DA:456,0 +DA:457,0 +DA:458,0 +DA:459,0 +DA:460,0 +DA:462,0 +DA:463,0 +DA:465,0 +DA:466,37 +DA:467,211 +DA:468,33 +DA:469,33 +DA:470,17 +DA:472,17 +DA:473,2 +DA:474,2 +DA:475,2 +DA:476,15 +DA:477,2 +DA:478,2 +DA:479,2 +DA:480,13 +DA:481,6 +DA:482,6 +DA:483,6 +DA:484,7 +DA:485,7 +DA:486,7 +DA:487,7 +DA:489,0 +DA:490,0 +DA:492,17 +DA:493,33 +DA:494,178 +DA:495,8 +DA:496,8 +DA:497,8 +DA:498,170 +DA:499,3 +DA:500,3 +DA:501,3 +DA:503,167 +DA:504,167 +DA:505,167 +DA:506,105 +DA:507,577 +DA:508,105 +DA:509,61 +DA:510,183 +DA:511,61 +DA:513,44 +DA:514,88 +DA:515,44 +DA:516,105 +DA:519,167 +DA:520,62 +DA:521,62 +DA:522,1 +DA:523,1 +DA:524,1 +DA:525,61 +DA:526,1 +DA:527,1 +DA:528,1 +DA:530,60 +DA:531,60 +DA:532,57 +DA:533,59 +DA:534,164 +DA:536,245 +DA:540,180 +DA:541,180 +DA:544,7 +DA:545,7 +DA:547,43 +DA:548,43 +DA:550,3 +DA:551,3 +DA:553,8 +DA:554,8 +DA:556,4 +DA:557,4 +DA:559,245 +DA:561,883 +DA:562,883 +BRDA:436,1528,1,254 +BRDA:446,55,0,175 +BRDA:446,66,0,65 +BRDA:446,77,0,58 +BRDA:446,55,1,190 +BRDA:446,66,1,190 +BRDA:446,77,1,190 +BRDA:448,97,0,190 +BRDA:448,115,0,44 +BRDA:448,115,1,160 +BRDA:448,134,0,160 +BRDA:448,157,0,18 +BRDA:448,157,1,142 +BRDA:448,134,1,30 +BRDA:448,97,1,58 +BRDA:448,194,0,37 +BRDA:451,206,0,37 +BRDA:451,215,0,31 +BRDA:451,206,1,6 +BRDA:451,215,1,6 +BRDA:451,242,0,0 +BRDA:453,267,0,0 +BRDA:453,267,1,0 +BRDA:457,310,0,0 +BRDA:457,310,1,0 +BRDA:451,242,1,37 +BRDA:448,194,1,211 +BRDA:467,372,0,185 +BRDA:467,372,1,26 +BRDA:467,393,0,33 +BRDA:469,421,0,17 +BRDA:472,452,0,2 +BRDA:472,452,1,15 +BRDA:476,490,0,2 +BRDA:476,490,1,13 +BRDA:480,513,0,6 +BRDA:480,513,1,7 +BRDA:480,534,0,6 +BRDA:480,534,1,7 +BRDA:484,574,0,7 +BRDA:484,574,1,0 +BRDA:484,594,0,7 +BRDA:484,594,1,0 +BRDA:469,421,1,33 +BRDA:467,393,1,178 +BRDA:494,662,0,159 +BRDA:494,675,0,8 +BRDA:494,662,1,170 +BRDA:494,675,1,170 +BRDA:494,700,0,8 +BRDA:494,700,1,170 +BRDA:498,747,0,16 +BRDA:498,760,0,3 +BRDA:498,747,1,167 +BRDA:498,760,1,167 +BRDA:498,786,0,3 +BRDA:498,786,1,167 +BRDA:505,851,0,105 +BRDA:507,874,0,1 +BRDA:507,874,1,105 +BRDA:508,912,0,61 +BRDA:510,923,0,1 +BRDA:510,923,1,61 +BRDA:508,912,1,44 +BRDA:514,967,0,1 +BRDA:514,967,1,44 +BRDA:505,851,1,167 +BRDA:519,1010,0,62 +BRDA:521,1032,0,6 +BRDA:521,1041,0,1 +BRDA:521,1032,1,61 +BRDA:521,1041,1,61 +BRDA:521,1069,0,1 +BRDA:521,1069,1,61 +BRDA:525,1106,0,6 +BRDA:525,1114,0,1 +BRDA:525,1106,1,60 +BRDA:525,1114,1,60 +BRDA:525,1142,0,1 +BRDA:525,1142,1,60 +BRDA:531,1167,0,2 +BRDA:531,1167,1,58 +BRDA:519,1010,1,164 +BRDA:536,1232,2,180 +BRDA:536,1232,12,180 +BRDA:536,1232,8,7 +BRDA:536,1232,11,7 +BRDA:536,1232,3,43 +BRDA:536,1232,13,3 +BRDA:536,1232,1,8 +BRDA:536,1232,10,4 +BRDA:536,1232,0,245 +BRDA:536,1232,4,245 +BRDA:536,1232,5,245 +BRDA:536,1232,6,245 +BRDA:536,1232,7,245 +BRDA:536,1232,9,245 +BRDA:436,1376,0,1064 +BRDA:436,1399,0,953 +BRDA:436,1419,0,946 +BRDA:436,1439,0,946 +BRDA:436,1459,0,903 +BRDA:436,1479,0,900 +BRDA:436,1499,0,887 +BRDA:436,1376,1,250 +BRDA:436,1399,1,250 +BRDA:436,1419,1,250 +BRDA:436,1439,1,250 +BRDA:436,1459,1,250 +BRDA:436,1479,1,250 +BRDA:436,1499,1,250 +BRDA:436,1528,0,883 +FN:564,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::HasImplicitConversion(System.Type,System.Type) +FNDA:2,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::HasImplicitConversion(System.Type,System.Type) +DA:565,2 +DA:566,2 +DA:567,4 +DA:568,4 +DA:569,2 +FN:571,System.Linq.Expressions.ConstantExpression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseEnumToConstantExpression(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) +FNDA:17,System.Linq.Expressions.ConstantExpression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseEnumToConstantExpression(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) +DA:572,17 +DA:573,17 +DA:574,17 +FN:576,System.Object System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConstantExpressionToEnum(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) +FNDA:17,System.Object System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConstantExpressionToEnum(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) +DA:577,17 +DA:579,17 +DA:580,17 +DA:581,12 +DA:582,12 +DA:585,5 +DA:587,0 +DA:588,0 +DA:589,0 +DA:591,17 +BRDA:580,18,0,12 +BRDA:580,18,1,5 +FN:594,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseShiftOperator() +FNDA:1163,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseShiftOperator() +DA:595,1163 +DA:596,1163 +DA:597,1172 +DA:598,33 +DA:599,33 +DA:600,33 +DA:601,33 +DA:602,32 +DA:605,24 +DA:606,24 +DA:607,24 +DA:609,8 +DA:610,8 +DA:611,8 +DA:613,32 +DA:614,1140 +DA:615,1140 +BRDA:597,205,1,33 +BRDA:602,56,0,24 +BRDA:602,63,1,24 +BRDA:602,56,1,8 +BRDA:602,63,0,32 +BRDA:597,176,0,1148 +BRDA:597,176,1,25 +BRDA:597,205,0,1140 +FN:618,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAdditive() +FNDA:1197,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAdditive() +DA:619,1197 +DA:620,1197 +DA:621,1202 +DA:622,30 +DA:623,30 +DA:624,30 +DA:625,30 +DA:626,30 +DA:629,29 +DA:630,15 +DA:631,15 +DA:632,15 +DA:634,14 +DA:635,14 +DA:636,14 +DA:637,14 +DA:638,29 +DA:640,1 +DA:641,1 +DA:642,1 +DA:644,30 +DA:645,1173 +DA:646,1173 +BRDA:621,275,1,30 +BRDA:626,56,0,1 +BRDA:626,56,1,29 +BRDA:629,91,0,15 +BRDA:629,91,1,14 +BRDA:629,121,0,15 +BRDA:629,121,1,14 +BRDA:626,63,1,1 +BRDA:626,63,0,30 +BRDA:621,246,0,1174 +BRDA:621,246,1,29 +BRDA:621,275,0,1173 +FN:649,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMultiplicative() +FNDA:1227,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMultiplicative() +DA:650,1227 +DA:651,1227 +DA:652,1221 +DA:653,1221 +DA:654,18 +DA:655,18 +DA:656,18 +DA:657,18 +DA:658,18 +DA:659,17 +DA:662,15 +DA:663,15 +DA:665,1 +DA:666,1 +DA:669,1 +DA:670,1 +DA:672,17 +DA:673,1203 +DA:674,1203 +BRDA:652,226,1,18 +BRDA:659,90,0,1 +BRDA:659,94,0,1 +BRDA:659,90,1,16 +BRDA:659,107,0,1 +BRDA:659,107,1,15 +BRDA:659,114,1,1 +BRDA:659,94,1,1 +BRDA:659,100,1,1 +BRDA:659,100,0,17 +BRDA:659,114,0,17 +BRDA:652,167,0,1205 +BRDA:652,187,0,1204 +BRDA:652,206,0,1203 +BRDA:652,167,1,18 +BRDA:652,187,1,18 +BRDA:652,206,1,18 +BRDA:652,226,0,1203 +FN:677,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseUnary() +FNDA:1275,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseUnary() +DA:678,1275 +DA:679,1275 +DA:680,26 +DA:681,26 +DA:682,26 +DA:683,23 +DA:684,23 +DA:685,23 +DA:686,23 +DA:687,23 +DA:690,0 +DA:691,0 +DA:692,0 +DA:693,0 +DA:694,0 +DA:695,0 +DA:697,0 +DA:698,0 +DA:699,0 +DA:700,0 +DA:702,0 +DA:705,1248 +DA:706,1251 +BRDA:679,19,0,1249 +BRDA:679,38,0,1249 +BRDA:679,19,1,26 +BRDA:679,38,1,26 +BRDA:679,56,0,26 +BRDA:683,95,0,23 +BRDA:683,114,0,8 +BRDA:683,114,1,15 +BRDA:683,95,1,0 +BRDA:683,143,0,23 +BRDA:683,143,1,0 +BRDA:691,245,0,0 +BRDA:691,245,1,0 +BRDA:679,56,1,1249 +FN:708,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimary() +FNDA:1274,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimary() +DA:709,1274 +DA:710,1274 +DA:711,1513 +DA:712,1513 +DA:713,1513 +DA:714,255 +DA:715,255 +DA:716,255 +DA:717,254 +DA:718,1258 +DA:719,1 +DA:720,1 +DA:722,1257 +DA:723,3 +DA:724,3 +DA:725,3 +DA:727,1254 +DA:728,1254 +DA:730,257 +DA:731,1254 +DA:732,1254 +BRDA:713,33,0,255 +BRDA:713,33,1,1258 +BRDA:718,82,0,1 +BRDA:718,82,1,1257 +BRDA:722,118,0,3 +BRDA:722,118,1,1254 +FN:734,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimaryStart() +FNDA:1275,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimaryStart() +DA:735,1275 +DA:736,1275 +DA:739,953 +DA:741,52 +DA:743,208 +DA:745,19 +DA:747,41 +DA:749,2 +DA:751,1256 +BRDA:736,21,1,953 +BRDA:736,21,2,52 +BRDA:736,21,3,208 +BRDA:736,21,4,19 +BRDA:736,21,8,41 +BRDA:736,21,0,2 +BRDA:736,21,5,2 +BRDA:736,21,6,2 +BRDA:736,21,7,2 +FN:753,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseStringLiteral() +FNDA:52,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseStringLiteral() +DA:754,52 +DA:755,52 +DA:756,52 +DA:757,52 +DA:758,52 +DA:759,60 +DA:760,60 +DA:761,60 +DA:762,60 +DA:763,52 +DA:764,52 +DA:767,8 +DA:768,2 +DA:769,2 +DA:770,2 +DA:771,8 +DA:772,8 +DA:774,52 +DA:775,0 +DA:776,0 +DA:777,0 +DA:778,0 +DA:780,0 +DA:781,0 +DA:783,52 +DA:784,52 +DA:785,52 +BRDA:762,105,0,52 +BRDA:762,105,1,8 +BRDA:767,119,0,8 +BRDA:767,119,1,0 +BRDA:767,140,0,2 +BRDA:767,140,1,8 +BRDA:774,172,0,0 +BRDA:776,191,0,0 +BRDA:776,191,1,0 +BRDA:774,172,1,52 +FN:787,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIntegerLiteral() +FNDA:208,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIntegerLiteral() +DA:788,208 +DA:789,208 +DA:791,208 +DA:792,208 +DA:793,208 +DA:794,208 +DA:795,208 +DA:796,208 +DA:797,208 +DA:799,208 +DA:800,26 +DA:801,52 +DA:802,56 +DA:803,30 +DA:804,30 +DA:805,30 +DA:806,30 +DA:807,26 +DA:808,26 +DA:809,26 +DA:811,208 +DA:812,193 +DA:813,193 +DA:814,4 +DA:815,4 +DA:816,4 +DA:818,193 +DA:819,0 +DA:820,0 +DA:823,193 +DA:824,193 +DA:825,15 +DA:826,18 +DA:827,15 +DA:830,9 +DA:834,356 +DA:835,0 +DA:836,0 +DA:838,0 +DA:841,15 +DA:842,15 +DA:843,2 +DA:844,2 +DA:845,2 +DA:847,15 +DA:848,0 +DA:849,0 +DA:852,15 +DA:853,2 +DA:854,2 +DA:855,2 +DA:857,15 +DA:858,15 +DA:859,11 +DA:860,11 +DA:861,4 +DA:863,7 +DA:864,2 +DA:866,5 +DA:867,2 +DA:869,3 +DA:870,2 +DA:872,1 +DA:875,4 +DA:876,4 +DA:877,4 +DA:880,0 +DA:882,207 +BRDA:794,58,0,193 +BRDA:794,58,1,15 +BRDA:795,80,0,202 +BRDA:795,80,1,6 +BRDA:799,133,0,26 +BRDA:802,184,1,30 +BRDA:802,184,0,26 +BRDA:799,133,1,208 +BRDA:811,240,0,193 +BRDA:813,251,0,4 +BRDA:813,251,1,193 +BRDA:818,265,0,189 +BRDA:818,265,1,4 +BRDA:818,294,0,0 +BRDA:818,294,1,193 +BRDA:824,344,0,15 +BRDA:826,361,0,12 +BRDA:826,361,1,3 +BRDA:826,381,0,3 +BRDA:826,381,1,12 +BRDA:827,415,0,9 +BRDA:827,415,1,3 +BRDA:827,435,0,3 +BRDA:827,435,1,9 +BRDA:824,344,1,178 +BRDA:834,494,0,178 +BRDA:834,494,1,0 +BRDA:835,530,0,0 +BRDA:835,530,1,0 +BRDA:836,573,0,0 +BRDA:836,573,1,0 +BRDA:811,240,1,15 +BRDA:842,621,0,2 +BRDA:842,621,1,15 +BRDA:847,635,0,13 +BRDA:847,635,1,2 +BRDA:847,664,0,0 +BRDA:847,664,1,15 +BRDA:852,694,0,2 +BRDA:852,694,1,15 +BRDA:858,728,0,11 +BRDA:860,745,0,7 +BRDA:860,745,1,4 +BRDA:860,765,0,4 +BRDA:860,765,1,7 +BRDA:863,798,0,6 +BRDA:863,798,1,1 +BRDA:863,818,0,2 +BRDA:863,818,1,5 +BRDA:866,852,0,4 +BRDA:866,852,1,1 +BRDA:866,872,0,2 +BRDA:866,872,1,3 +BRDA:869,903,0,2 +BRDA:869,903,1,1 +BRDA:869,923,0,2 +BRDA:869,923,1,1 +BRDA:858,728,1,4 +BRDA:875,977,0,4 +BRDA:875,977,1,0 +FN:884,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRealLiteral() +FNDA:19,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRealLiteral() +DA:885,19 +DA:886,19 +DA:888,19 +DA:889,19 +DA:891,19 +DA:892,19 +DA:893,19 +FN:895,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsFloat(System.String,System.Char) +FNDA:21,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsFloat(System.String,System.Char) +DA:896,21 +DA:897,21 +DA:898,7 +DA:899,7 +DA:900,5 +DA:901,5 +DA:903,2 +DA:906,16 +DA:907,21 +BRDA:897,4,0,18 +BRDA:897,4,1,3 +BRDA:897,16,0,7 +BRDA:899,53,0,5 +BRDA:899,53,1,2 +BRDA:897,16,1,16 +FN:909,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDecimal(System.String,System.Char) +FNDA:18,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDecimal(System.String,System.Char) +DA:910,18 +DA:911,18 +DA:912,7 +DA:913,7 +DA:914,5 +DA:915,5 +DA:917,2 +DA:920,13 +DA:921,18 +BRDA:911,4,0,15 +BRDA:911,4,1,3 +BRDA:911,16,0,7 +BRDA:913,50,0,5 +BRDA:913,50,1,2 +BRDA:911,16,1,13 +FN:923,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDouble(System.String,System.Char) +FNDA:15,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDouble(System.String,System.Char) +DA:924,15 +DA:926,15 +DA:927,7 +DA:928,7 +DA:929,5 +DA:930,5 +DA:932,2 +DA:934,10 +DA:935,10 +DA:936,10 +DA:939,0 +DA:940,15 +BRDA:926,4,0,12 +BRDA:926,4,1,3 +BRDA:926,16,0,7 +BRDA:928,50,0,5 +BRDA:928,50,1,2 +BRDA:926,16,1,10 +BRDA:934,88,0,10 +BRDA:934,88,1,0 +FN:942,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParenExpression() +FNDA:41,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParenExpression() +DA:943,41 +DA:944,41 +DA:945,41 +DA:946,41 +DA:947,41 +DA:948,41 +DA:949,41 +DA:950,41 +FN:952,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIdentifier() +FNDA:953,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIdentifier() +DA:953,953 +DA:954,952 +DA:956,952 +DA:957,438 +DA:958,438 +DA:959,438 +DA:960,34 +DA:961,34 +DA:964,707 +DA:965,102 +DA:966,100 +DA:967,102 +DA:968,99 +DA:969,100 +DA:970,100 +DA:971,155 +DA:972,27 +DA:974,15 +DA:976,15 +DA:979,515 +DA:980,515 +DA:981,515 +DA:982,201 +DA:983,201 +DA:984,201 +DA:985,146 +DA:986,146 +DA:987,146 +DA:989,55 +DA:990,55 +DA:991,55 +DA:992,0 +DA:993,0 +DA:995,55 +DA:997,201 +DA:999,201 +DA:1002,314 +DA:1003,314 +DA:1004,314 +DA:1007,0 +DA:1008,937 +BRDA:956,45,0,438 +BRDA:959,67,0,34 +BRDA:959,67,1,403 +BRDA:964,96,0,303 +BRDA:964,96,1,101 +BRDA:965,123,0,1 +BRDA:965,123,1,100 +BRDA:966,150,0,0 +BRDA:966,150,1,100 +BRDA:967,177,0,2 +BRDA:967,177,1,98 +BRDA:968,204,0,1 +BRDA:968,204,1,97 +BRDA:969,231,0,3 +BRDA:969,231,1,94 +BRDA:970,258,0,6 +BRDA:970,258,1,88 +BRDA:971,285,0,67 +BRDA:971,285,1,21 +BRDA:972,312,0,6 +BRDA:972,312,1,15 +BRDA:956,45,1,515 +BRDA:979,381,0,340 +BRDA:979,389,0,26 +BRDA:979,389,1,336 +BRDA:979,420,0,336 +BRDA:979,381,1,179 +BRDA:979,420,1,179 +BRDA:979,458,0,201 +BRDA:984,478,0,146 +BRDA:984,478,1,55 +BRDA:991,511,0,0 +BRDA:991,511,1,55 +BRDA:979,458,1,314 +BRDA:1002,558,0,314 +BRDA:1002,558,1,0 +FN:1010,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIt() +FNDA:305,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIt() +DA:1011,305 +DA:1012,305 +DA:1013,0 +DA:1014,0 +DA:1016,305 +DA:1017,305 +DA:1018,305 +BRDA:1012,12,0,0 +BRDA:1012,12,1,305 +FN:1020,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParent() +FNDA:2,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParent() +DA:1021,2 +DA:1022,2 +DA:1023,0 +DA:1024,0 +DA:1026,2 +DA:1027,2 +DA:1028,2 +BRDA:1022,12,0,0 +BRDA:1022,12,1,2 +FN:1030,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRoot() +FNDA:3,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRoot() +DA:1031,3 +DA:1032,3 +DA:1033,0 +DA:1034,0 +DA:1036,3 +DA:1037,3 +DA:1038,3 +BRDA:1032,12,0,0 +BRDA:1032,12,1,3 +FN:1040,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIif() +FNDA:6,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIif() +DA:1041,6 +DA:1042,6 +DA:1043,6 +DA:1044,6 +DA:1045,6 +DA:1046,0 +DA:1047,0 +DA:1050,6 +DA:1051,6 +BRDA:1045,48,0,0 +BRDA:1045,48,1,6 +FN:1053,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConditional(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) +FNDA:7,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConditional(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) +DA:1054,7 +DA:1055,7 +DA:1056,0 +DA:1057,0 +DA:1060,7 +DA:1061,1 +DA:1062,1 +DA:1063,1 +DA:1064,1 +DA:1065,0 +DA:1066,0 +DA:1067,0 +DA:1068,1 +DA:1069,1 +DA:1070,1 +DA:1071,1 +DA:1073,0 +DA:1074,0 +DA:1075,0 +DA:1076,0 +DA:1077,0 +DA:1078,0 +DA:1081,0 +DA:1083,1 +DA:1085,7 +DA:1086,7 +BRDA:1055,24,0,0 +BRDA:1055,24,1,7 +BRDA:1060,64,0,1 +BRDA:1062,76,0,1 +BRDA:1062,76,1,0 +BRDA:1063,102,0,0 +BRDA:1063,102,1,1 +BRDA:1064,123,0,0 +BRDA:1064,123,1,1 +BRDA:1064,136,0,0 +BRDA:1064,136,1,1 +BRDA:1068,149,0,1 +BRDA:1068,149,1,0 +BRDA:1068,162,0,1 +BRDA:1068,162,1,0 +BRDA:1074,178,0,0 +BRDA:1074,178,1,0 +BRDA:1075,206,0,0 +BRDA:1075,206,1,0 +BRDA:1076,236,0,0 +BRDA:1076,236,1,0 +BRDA:1060,64,1,7 +FN:1088,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNew() +FNDA:67,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNew() +DA:1089,67 +DA:1090,67 +DA:1091,67 +DA:1092,67 +DA:1093,67 +DA:1094,67 +DA:1095,1 +DA:1096,1 +DA:1099,66 +DA:1100,66 +DA:1101,7 +DA:1102,7 +DA:1103,7 +DA:1105,28 +DA:1106,21 +DA:1107,21 +DA:1108,21 +DA:1109,21 +DA:1110,0 +DA:1111,0 +DA:1113,21 +DA:1114,21 +DA:1115,21 +DA:1117,7 +DA:1118,7 +DA:1119,2 +DA:1120,2 +DA:1123,5 +DA:1124,5 +DA:1125,5 +DA:1126,0 +DA:1127,0 +DA:1129,5 +DA:1131,64 +DA:1132,64 +DA:1133,7 +DA:1134,7 +DA:1135,7 +DA:1136,6 +DA:1137,6 +DA:1138,6 +DA:1139,6 +DA:1141,63 +DA:1143,63 +DA:1144,63 +DA:1146,135 +DA:1147,134 +DA:1148,134 +DA:1149,134 +DA:1150,132 +DA:1151,121 +DA:1153,121 +DA:1154,84 +DA:1155,84 +DA:1156,84 +DA:1157,84 +DA:1158,84 +DA:1160,37 +DA:1161,37 +DA:1162,0 +DA:1163,0 +DA:1165,37 +DA:1167,121 +DA:1168,121 +DA:1170,132 +DA:1172,132 +DA:1173,60 +DA:1174,60 +DA:1177,72 +DA:1178,72 +DA:1180,61 +DA:1181,2 +DA:1182,2 +DA:1184,59 +DA:1186,59 +DA:1187,6 +DA:1188,6 +DA:1191,53 +DA:1192,59 +BRDA:1091,31,0,18 +BRDA:1091,51,0,14 +BRDA:1091,71,0,8 +BRDA:1091,31,1,59 +BRDA:1091,51,1,59 +BRDA:1091,71,1,59 +BRDA:1091,102,0,1 +BRDA:1091,102,1,66 +BRDA:1100,147,0,7 +BRDA:1105,349,1,21 +BRDA:1109,242,0,0 +BRDA:1109,242,1,21 +BRDA:1105,320,0,13 +BRDA:1105,320,1,15 +BRDA:1105,349,0,7 +BRDA:1118,374,0,2 +BRDA:1118,374,1,5 +BRDA:1123,433,0,2 +BRDA:1123,453,0,1 +BRDA:1123,433,1,4 +BRDA:1123,453,1,4 +BRDA:1123,485,0,0 +BRDA:1123,485,1,5 +BRDA:1100,147,1,64 +BRDA:1132,532,0,7 +BRDA:1132,532,1,63 +BRDA:1146,885,1,134 +BRDA:1150,664,0,121 +BRDA:1153,682,0,84 +BRDA:1153,682,1,37 +BRDA:1161,737,0,0 +BRDA:1161,737,1,37 +BRDA:1150,664,1,132 +BRDA:1172,817,0,60 +BRDA:1172,817,1,72 +BRDA:1146,853,0,135 +BRDA:1146,853,1,0 +BRDA:1146,885,0,61 +BRDA:1180,908,0,13 +BRDA:1180,908,1,48 +BRDA:1180,940,0,2 +BRDA:1180,940,1,59 +BRDA:1186,977,0,6 +BRDA:1186,977,1,53 +FN:1194,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateArrayInitializerExpression(System.Collections.Generic.List`1,System.Type) +FNDA:6,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateArrayInitializerExpression(System.Collections.Generic.List`1,System.Type) +DA:1195,6 +DA:1196,6 +DA:1197,1 +DA:1198,1 +DA:1201,5 +DA:1202,1 +DA:1203,4 +DA:1206,12 +DA:1207,6 +BRDA:1196,37,0,1 +BRDA:1198,47,0,1 +BRDA:1198,47,1,1 +BRDA:1196,37,1,5 +BRDA:1201,87,0,1 +BRDA:1201,87,1,4 +BRDA:1206,150,0,0 +BRDA:1206,150,1,4 +FN:1209,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateNewExpression(System.Collections.Generic.List`1,System.Collections.Generic.List`1,System.Type) +FNDA:53,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateNewExpression(System.Collections.Generic.List`1,System.Collections.Generic.List`1,System.Type) +DA:1210,53 +DA:1212,53 +DA:1214,53 +DA:1215,47 +DA:1217,47 +DA:1218,0 +DA:1220,0 +DA:1221,0 +DA:1225,0 +DA:1227,0 +DA:1228,0 +DA:1229,0 +DA:1231,0 +DA:1232,0 +DA:1234,0 +DA:1235,0 +DA:1238,0 +DA:1244,0 +DA:1246,0 +DA:1250,47 +DA:1252,47 +DA:1254,53 +DA:1255,53 +DA:1256,47 +DA:1257,315 +DA:1258,47 +DA:1260,172 +DA:1261,53 +DA:1262,53 +DA:1263,41 +DA:1264,41 +DA:1267,258 +DA:1268,88 +DA:1269,88 +DA:1270,88 +DA:1273,87 +DA:1274,88 +DA:1276,41 +DA:1279,12 +DA:1280,74 +DA:1281,25 +DA:1282,25 +DA:1283,25 +DA:1284,25 +DA:1287,25 +DA:1288,25 +DA:1290,12 +DA:1291,53 +BRDA:1212,3,0,49 +BRDA:1212,3,1,53 +BRDA:1214,24,0,47 +BRDA:1217,36,0,47 +BRDA:1217,36,1,0 +BRDA:1217,56,0,0 +BRDA:1228,214,1,0 +BRDA:1228,214,0,0 +BRDA:1217,56,1,47 +BRDA:1214,24,1,53 +BRDA:1255,329,0,47 +BRDA:1257,339,0,1 +BRDA:1257,339,1,47 +BRDA:1255,329,1,53 +BRDA:1260,378,0,1 +BRDA:1260,378,1,53 +BRDA:1262,429,0,41 +BRDA:1262,429,1,12 +BRDA:1262,454,0,41 +BRDA:1267,534,1,88 +BRDA:1267,534,0,41 +BRDA:1262,454,1,12 +BRDA:1280,664,1,25 +BRDA:1280,664,0,12 +FN:1293,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaInvocation(System.Linq.Expressions.LambdaExpression) +FNDA:0,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaInvocation(System.Linq.Expressions.LambdaExpression) +DA:1294,0 +DA:1295,0 +DA:1296,0 +DA:1297,0 +DA:1298,0 +DA:1299,0 +DA:1300,0 +DA:1303,0 +DA:1304,0 +BRDA:1298,65,0,0 +BRDA:1298,65,1,0 +FN:1306,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseTypeAccess(System.Type) +FNDA:34,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseTypeAccess(System.Type) +DA:1307,34 +DA:1308,34 +DA:1309,34 +DA:1311,34 +DA:1312,7 +DA:1313,7 +DA:1314,0 +DA:1315,0 +DA:1318,7 +DA:1319,7 +DA:1320,7 +DA:1323,34 +DA:1324,34 +DA:1325,18 +DA:1326,18 +DA:1329,18 +DA:1330,18 +DA:1331,18 +DA:1333,18 +DA:1334,7 +DA:1335,7 +DA:1337,11 +DA:1339,11 +DA:1342,10 +DA:1343,10 +DA:1344,10 +DA:1347,0 +DA:1350,1 +DA:1353,0 +DA:1357,16 +DA:1358,16 +DA:1360,16 +DA:1361,34 +BRDA:1311,52,0,7 +BRDA:1313,66,0,7 +BRDA:1313,66,1,0 +BRDA:1313,79,0,0 +BRDA:1313,79,1,7 +BRDA:1311,52,1,34 +BRDA:1324,195,0,18 +BRDA:1326,202,0,18 +BRDA:1326,202,1,0 +BRDA:1329,240,0,18 +BRDA:1333,265,0,15 +BRDA:1333,273,0,7 +BRDA:1333,265,1,11 +BRDA:1333,273,1,11 +BRDA:1333,294,0,7 +BRDA:1333,294,1,11 +BRDA:1329,240,1,11 +BRDA:1339,334,0,1 +BRDA:1339,334,1,10 +BRDA:1342,356,0,10 +BRDA:1342,356,1,0 +BRDA:1339,341,1,1 +BRDA:1339,341,0,0 +BRDA:1324,195,1,16 +FN:1363,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConversion(System.Linq.Expressions.Expression,System.Type,System.Int32) +FNDA:10,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConversion(System.Linq.Expressions.Expression,System.Type,System.Int32) +DA:1364,10 +DA:1365,10 +DA:1366,10 +DA:1367,0 +DA:1368,0 +DA:1371,10 +DA:1372,5 +DA:1373,5 +DA:1374,0 +DA:1375,0 +DA:1378,5 +DA:1379,5 +DA:1380,5 +DA:1382,0 +DA:1384,5 +DA:1385,1 +DA:1386,1 +DA:1390,4 +DA:1391,0 +DA:1392,0 +DA:1395,0 +DA:1396,0 +DA:1397,0 +DA:1400,0 +DA:1402,0 +DA:1406,0 +DA:1407,0 +DA:1408,0 +DA:1410,0 +DA:1413,10 +DA:1414,4 +DA:1415,4 +DA:1416,4 +DA:1419,0 +DA:1420,10 +BRDA:1366,35,0,0 +BRDA:1366,35,1,10 +BRDA:1371,57,0,6 +BRDA:1371,57,1,4 +BRDA:1371,82,0,5 +BRDA:1373,94,0,5 +BRDA:1373,94,1,0 +BRDA:1373,107,0,0 +BRDA:1373,107,1,5 +BRDA:1373,138,0,0 +BRDA:1373,138,1,5 +BRDA:1378,166,0,0 +BRDA:1378,166,1,5 +BRDA:1378,174,0,5 +BRDA:1378,174,1,0 +BRDA:1378,187,0,0 +BRDA:1378,187,1,5 +BRDA:1378,207,0,5 +BRDA:1378,207,1,0 +BRDA:1371,82,1,5 +BRDA:1384,242,0,5 +BRDA:1384,256,0,4 +BRDA:1384,269,0,4 +BRDA:1384,242,1,1 +BRDA:1384,256,1,1 +BRDA:1384,269,1,1 +BRDA:1384,294,0,1 +BRDA:1384,294,1,4 +BRDA:1390,324,0,0 +BRDA:1390,324,1,4 +BRDA:1390,349,0,0 +BRDA:1395,394,0,0 +BRDA:1395,394,1,0 +BRDA:1395,418,0,0 +BRDA:1395,418,1,0 +BRDA:1406,518,0,0 +BRDA:1406,518,1,0 +BRDA:1406,542,0,0 +BRDA:1406,542,1,0 +BRDA:1390,349,1,4 +BRDA:1414,604,0,4 +BRDA:1414,604,1,0 +FN:1422,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMemberAccess(System.Type,System.Linq.Expressions.Expression) +FNDA:585,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMemberAccess(System.Type,System.Linq.Expressions.Expression) +DA:1423,585 +DA:1424,585 +DA:1425,569 +DA:1426,569 +DA:1427,569 +DA:1429,585 +DA:1430,585 +DA:1431,585 +DA:1433,585 +DA:1434,110 +DA:1435,110 +DA:1436,98 +DA:1437,98 +DA:1438,98 +DA:1439,87 +DA:1440,87 +DA:1441,87 +DA:1443,11 +DA:1445,23 +DA:1446,23 +DA:1449,0 +DA:1452,23 +DA:1453,23 +DA:1454,1 +DA:1455,1 +DA:1458,22 +DA:1459,0 +DA:1460,0 +DA:1463,22 +DA:1466,0 +DA:1470,475 +DA:1471,11 +DA:1472,11 +DA:1474,11 +DA:1483,464 +DA:1484,464 +DA:1485,433 +DA:1486,433 +DA:1489,31 +DA:1490,0 +DA:1491,0 +DA:1495,31 +DA:1496,1 +DA:1497,1 +DA:1501,30 +DA:1502,30 +DA:1503,4 +DA:1504,4 +DA:1507,26 +DA:1508,19 +DA:1510,19 +DA:1511,19 +DA:1513,19 +DA:1516,7 +DA:1517,577 +BRDA:1424,9,0,569 +BRDA:1424,9,1,585 +BRDA:1433,81,0,110 +BRDA:1435,88,0,102 +BRDA:1435,88,1,8 +BRDA:1435,113,0,98 +BRDA:1438,146,0,87 +BRDA:1438,146,1,11 +BRDA:1435,113,1,23 +BRDA:1446,233,0,23 +BRDA:1446,233,1,0 +BRDA:1446,240,1,23 +BRDA:1453,305,0,11 +BRDA:1453,314,0,11 +BRDA:1453,314,1,0 +BRDA:1453,305,1,12 +BRDA:1453,347,0,1 +BRDA:1453,347,1,22 +BRDA:1458,409,0,0 +BRDA:1458,409,1,22 +BRDA:1446,240,0,0 +BRDA:1433,81,1,475 +BRDA:1470,512,0,11 +BRDA:1470,512,1,464 +BRDA:1484,566,0,433 +BRDA:1484,566,1,31 +BRDA:1489,599,0,0 +BRDA:1489,599,1,31 +BRDA:1495,637,0,1 +BRDA:1495,637,1,30 +BRDA:1502,709,0,4 +BRDA:1502,709,1,26 +BRDA:1507,757,0,19 +BRDA:1507,757,1,7 +BRDA:1507,783,0,19 +BRDA:1507,783,1,7 +FN:1519,System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::FindType(System.String) +FNDA:7,System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::FindType(System.String) +DA:1520,7 +DA:1521,7 +DA:1523,7 +DA:1524,7 +DA:1525,2 +DA:1526,2 +DA:1529,5 +DA:1530,1 +DA:1531,1 +DA:1534,4 +DA:1535,0 +DA:1536,0 +DA:1539,4 +DA:1540,0 +DA:1541,0 +DA:1543,4 +DA:1544,0 +DA:1545,0 +DA:1548,4 +DA:1549,0 +DA:1550,0 +DA:1553,4 +DA:1554,0 +DA:1555,0 +DA:1558,4 +DA:1559,2 +DA:1560,2 +DA:1563,2 +DA:1564,7 +BRDA:1524,32,0,2 +BRDA:1524,32,1,5 +BRDA:1529,48,0,5 +BRDA:1529,48,1,0 +BRDA:1529,79,0,1 +BRDA:1529,79,1,4 +BRDA:1534,105,0,0 +BRDA:1534,105,1,4 +BRDA:1534,136,0,0 +BRDA:1534,136,1,4 +BRDA:1539,162,0,4 +BRDA:1539,162,1,0 +BRDA:1539,193,0,0 +BRDA:1539,193,1,4 +BRDA:1543,219,0,4 +BRDA:1543,219,1,0 +BRDA:1543,276,0,0 +BRDA:1543,276,1,4 +BRDA:1548,302,0,0 +BRDA:1548,302,1,4 +BRDA:1548,359,0,0 +BRDA:1548,359,1,4 +BRDA:1553,385,0,4 +BRDA:1553,385,1,0 +BRDA:1553,442,0,0 +BRDA:1553,442,1,4 +BRDA:1558,470,0,2 +BRDA:1558,470,1,2 +BRDA:1558,493,0,2 +BRDA:1558,493,1,2 +FN:1566,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAggregate(System.Linq.Expressions.Expression,System.Type,System.String,System.Int32,System.Boolean) +FNDA:87,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAggregate(System.Linq.Expressions.Expression,System.Type,System.String,System.Int32,System.Boolean) +DA:1567,87 +DA:1568,87 +DA:1570,87 +DA:1571,87 +DA:1573,87 +DA:1575,87 +DA:1576,7 +DA:1578,7 +DA:1579,7 +DA:1581,80 +DA:1582,80 +DA:1583,80 +DA:1585,87 +DA:1587,87 +DA:1588,87 +DA:1590,87 +DA:1591,0 +DA:1592,0 +DA:1595,87 +DA:1596,87 +DA:1597,15 +DA:1598,15 +DA:1599,15 +DA:1602,87 +DA:1603,24 +DA:1604,24 +DA:1605,1 +DA:1606,1 +DA:1607,1 +DA:1609,23 +DA:1610,23 +DA:1611,23 +DA:1612,24 +DA:1613,63 +DA:1614,3 +DA:1615,3 +DA:1616,3 +DA:1617,30 +DA:1618,3 +DA:1619,3 +DA:1620,3 +DA:1622,60 +DA:1623,60 +DA:1624,60 +DA:1626,87 +DA:1627,27 +DA:1628,27 +DA:1629,27 +DA:1631,60 +DA:1632,60 +DA:1633,9 +DA:1634,9 +DA:1635,9 +DA:1637,51 +DA:1638,51 +DA:1639,1 +DA:1640,1 +DA:1641,1 +DA:1643,50 +DA:1644,50 +DA:1645,50 +DA:1646,51 +DA:1647,60 +DA:1649,87 +DA:1650,87 +BRDA:1575,50,0,82 +BRDA:1575,63,0,81 +BRDA:1575,50,1,6 +BRDA:1575,63,1,6 +BRDA:1575,83,0,7 +BRDA:1575,83,1,80 +BRDA:1590,151,0,0 +BRDA:1590,151,1,87 +BRDA:1596,191,0,16 +BRDA:1596,191,1,71 +BRDA:1596,218,0,15 +BRDA:1596,218,1,87 +BRDA:1602,314,0,24 +BRDA:1604,327,0,1 +BRDA:1604,327,1,23 +BRDA:1602,314,1,63 +BRDA:1613,413,0,3 +BRDA:1617,482,0,1 +BRDA:1617,482,1,3 +BRDA:1613,413,1,60 +BRDA:1626,573,0,27 +BRDA:1626,573,1,60 +BRDA:1632,642,0,9 +BRDA:1632,642,1,51 +BRDA:1638,676,0,1 +BRDA:1638,676,1,50 +FN:1652,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArgumentList() +FNDA:140,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArgumentList() +DA:1653,140 +DA:1654,140 +DA:1655,140 +DA:1656,140 +DA:1657,140 +DA:1658,140 +DA:1659,140 +DA:1660,140 +BRDA:1656,50,0,31 +BRDA:1656,50,1,109 +FN:1662,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArguments() +FNDA:112,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArguments() +DA:1663,112 +DA:1664,112 +DA:1665,132 +DA:1666,132 +DA:1667,132 +DA:1669,132 +DA:1670,112 +DA:1671,112 +DA:1674,20 +DA:1675,20 +DA:1677,112 +DA:1678,112 +BRDA:1669,48,0,112 +BRDA:1669,48,1,20 +FN:1680,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseElementAccess(System.Linq.Expressions.Expression) +FNDA:3,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseElementAccess(System.Linq.Expressions.Expression) +DA:1681,3 +DA:1682,3 +DA:1683,3 +DA:1684,3 +DA:1686,3 +DA:1687,3 +DA:1688,3 +DA:1690,3 +DA:1691,0 +DA:1692,0 +DA:1693,0 +DA:1694,0 +DA:1696,0 +DA:1698,0 +DA:1699,0 +DA:1700,0 +DA:1703,0 +DA:1706,3 +DA:1709,0 +DA:1710,0 +DA:1712,3 +DA:1715,0 +DA:1717,3 +BRDA:1690,100,0,0 +BRDA:1692,115,0,0 +BRDA:1692,115,1,0 +BRDA:1692,133,0,0 +BRDA:1692,133,1,0 +BRDA:1698,184,0,0 +BRDA:1698,184,1,0 +BRDA:1690,100,1,3 +BRDA:1706,234,0,3 +BRDA:1706,234,1,0 +BRDA:1706,241,1,3 +BRDA:1706,241,0,0 +FN:1719,System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::ToNullableType(System.Type) +FNDA:4,System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::ToNullableType(System.Type) +DA:1720,4 +DA:1721,4 +DA:1723,4 +DA:1724,0 +DA:1725,0 +DA:1728,4 +DA:1729,4 +BRDA:1723,24,0,4 +BRDA:1723,24,1,0 +BRDA:1723,37,0,0 +BRDA:1723,37,1,4 +FN:1731,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TryGetMemberName(System.Linq.Expressions.Expression,System.String&) +FNDA:37,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TryGetMemberName(System.Linq.Expressions.Expression,System.String&) +DA:1732,37 +DA:1733,37 +DA:1734,37 +DA:1735,0 +DA:1736,0 +DA:1737,0 +DA:1739,37 +DA:1740,37 +DA:1741,37 +DA:1742,37 +DA:1753,0 +DA:1754,0 +DA:1755,37 +BRDA:1734,9,0,0 +BRDA:1734,9,1,37 +BRDA:1734,25,0,0 +BRDA:1734,25,1,37 +BRDA:1739,52,0,37 +BRDA:1739,52,1,0 +FN:1757,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperand(System.Type,System.String,System.Linq.Expressions.Expression&,System.Int32) +FNDA:0,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperand(System.Type,System.String,System.Linq.Expressions.Expression&,System.Int32) +DA:1758,0 +DA:1759,0 +DA:1761,0 +DA:1762,0 +DA:1763,0 +DA:1766,0 +DA:1767,0 +BRDA:1761,31,0,0 +BRDA:1761,31,1,0 +FN:1769,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperands(System.Type,System.String,System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&,System.Int32) +FNDA:150,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperands(System.Type,System.String,System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&,System.Int32) +DA:1770,150 +DA:1771,150 +DA:1773,150 +DA:1774,4 +DA:1775,4 +DA:1778,146 +DA:1779,146 +DA:1780,146 +BRDA:1773,37,0,4 +BRDA:1773,37,1,146 +FN:1782,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandError(System.String,System.Linq.Expressions.Expression,System.Int32) +FNDA:0,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandError(System.String,System.Linq.Expressions.Expression,System.Int32) +DA:1783,0 +DA:1784,0 +DA:1785,0 +FN:1787,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandsError(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) +FNDA:4,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandsError(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) +DA:1788,4 +DA:1789,4 +DA:1790,4 +FN:1792,System.Reflection.MemberInfo System.Linq.Dynamic.Core.Parser.ExpressionParser::FindPropertyOrField(System.Type,System.String,System.Boolean) +FNDA:464,System.Reflection.MemberInfo System.Linq.Dynamic.Core.Parser.ExpressionParser::FindPropertyOrField(System.Type,System.String,System.Boolean) +DA:1793,464 +DA:1806,1977 +DA:1807,509 +DA:1809,2063 +DA:1810,509 +DA:1811,433 +DA:1812,433 +DA:1816,284 +DA:1817,76 +DA:1818,0 +DA:1819,0 +DA:1823,76 +DA:1824,31 +DA:1826,464 +BRDA:1806,192,1,509 +BRDA:1809,65,0,464 +BRDA:1809,65,1,509 +BRDA:1810,108,0,433 +BRDA:1810,108,1,76 +BRDA:1816,134,0,32 +BRDA:1816,134,1,76 +BRDA:1817,177,0,0 +BRDA:1817,177,1,76 +BRDA:1806,192,0,31 +FN:1828,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TokenIdentifierIs(System.String) +FNDA:5172,System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TokenIdentifierIs(System.String) +DA:1829,5172 +DA:1830,5172 +DA:1831,5173 +BRDA:1830,18,0,1450 +BRDA:1830,18,1,3723 +FN:1833,System.String System.Linq.Dynamic.Core.Parser.ExpressionParser::GetIdentifier() +FNDA:669,System.String System.Linq.Dynamic.Core.Parser.ExpressionParser::GetIdentifier() +DA:1834,669 +DA:1835,669 +DA:1836,669 +DA:1837,669 +DA:1838,0 +DA:1839,0 +DA:1840,0 +DA:1842,669 +DA:1843,669 +BRDA:1837,43,0,611 +BRDA:1837,43,1,58 +BRDA:1837,61,0,0 +BRDA:1837,61,1,669 +FN:1845,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.String,System.Object[]) +FNDA:7,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.String,System.Object[]) +DA:1846,7 +DA:1847,7 +DA:1848,7 +BRDA:1847,8,0,1 +BRDA:1847,8,1,6 +FN:1850,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.Int32,System.String,System.Object[]) +FNDA:22,System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.Int32,System.String,System.Object[]) +DA:1851,22 +DA:1852,22 +DA:1853,22 +FN:45,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.ctor(System.Linq.Expressions.ParameterExpression[],System.String,System.Object[],System.Linq.Dynamic.Core.ParsingConfig) +FNDA:510,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.ctor(System.Linq.Expressions.ParameterExpression[],System.String,System.Object[],System.Linq.Dynamic.Core.ParsingConfig) +DA:46,510 +DA:47,510 +DA:48,510 +DA:50,510 +DA:51,510 +DA:53,510 +DA:54,510 +DA:55,510 +DA:56,509 +DA:58,509 +DA:59,499 +DA:60,499 +DA:61,499 +DA:63,509 +DA:65,509 +DA:66,509 +DA:67,509 +BRDA:53,53,0,510 +BRDA:53,53,1,509 +BRDA:58,71,0,499 +BRDA:58,71,1,509 +BRDA:63,87,0,469 +BRDA:63,87,1,509 +FN:20,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.cctor() +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +LF:1210 +LH:1021 +BRF:749 +BRH:620 +FNF:61 +FNH:58 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionPromoter.cs +FN:8,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionPromoter::Promote(System.Linq.Expressions.Expression,System.Type,System.Boolean,System.Boolean) +FNDA:3903,System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionPromoter::Promote(System.Linq.Expressions.Expression,System.Type,System.Boolean,System.Boolean) +DA:9,3903 +DA:10,3903 +DA:11,563 +DA:12,564 +DA:15,3339 +DA:17,3339 +DA:18,832 +DA:19,832 +DA:20,47 +DA:21,47 +DA:22,26 +DA:23,26 +DA:25,21 +DA:27,785 +DA:28,785 +DA:29,716 +DA:30,716 +DA:31,716 +DA:58,716 +DA:59,699 +DA:60,699 +DA:63,699 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,699 +DA:68,17 +DA:69,10 +DA:70,10 +DA:71,4 +DA:72,4 +DA:73,4 +DA:74,10 +DA:75,7 +DA:76,7 +DA:77,7 +DA:78,7 +DA:80,716 +DA:81,644 +DA:82,644 +DA:84,72 +DA:85,141 +DA:86,162 +DA:88,2669 +DA:89,1163 +DA:90,1163 +DA:91,1114 +DA:92,1114 +DA:95,49 +DA:98,1506 +DA:99,3903 +BRDA:10,15,0,563 +BRDA:10,15,1,3339 +BRDA:17,38,0,832 +BRDA:19,50,0,790 +BRDA:19,50,1,42 +BRDA:19,68,0,47 +BRDA:21,82,0,44 +BRDA:21,82,1,3 +BRDA:21,97,0,26 +BRDA:21,97,1,21 +BRDA:19,68,1,785 +BRDA:28,132,0,716 +BRDA:58,170,0,69 +BRDA:58,193,0,58 +BRDA:58,216,0,40 +BRDA:58,170,1,676 +BRDA:58,193,1,676 +BRDA:58,216,1,676 +BRDA:58,246,0,699 +BRDA:63,276,0,0 +BRDA:63,276,1,699 +BRDA:58,246,1,17 +BRDA:68,319,0,10 +BRDA:70,343,0,4 +BRDA:70,343,1,10 +BRDA:68,319,1,7 +BRDA:75,386,0,7 +BRDA:75,386,1,716 +BRDA:80,410,0,644 +BRDA:80,410,1,72 +BRDA:28,132,1,141 +BRDA:17,38,1,2669 +BRDA:88,443,0,1163 +BRDA:90,459,0,57 +BRDA:90,459,1,1106 +BRDA:90,486,0,1114 +BRDA:90,486,1,49 +BRDA:88,443,1,1506 +LF:51 +LH:48 +BRF:38 +BRH:37 +FNF:1 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\KeywordsHelper.cs +FN:62,System.Boolean System.Linq.Dynamic.Core.Parser.KeywordsHelper::TryGetValue(System.String,System.Object&) +FNDA:960,System.Boolean System.Linq.Dynamic.Core.Parser.KeywordsHelper::TryGetValue(System.String,System.Object&) +DA:63,960 +DA:64,960 +DA:65,960 +FN:17,System.Void System.Linq.Dynamic.Core.Parser.KeywordsHelper::.ctor(System.Linq.Dynamic.Core.ParsingConfig) +FNDA:509,System.Void System.Linq.Dynamic.Core.Parser.KeywordsHelper::.ctor(System.Linq.Dynamic.Core.ParsingConfig) +DA:18,509 +DA:19,509 +DA:20,509 +DA:21,509 +DA:22,509 +DA:23,509 +DA:25,509 +DA:26,509 +DA:27,509 +DA:28,509 +DA:29,509 +DA:30,509 +DA:31,509 +DA:32,509 +DA:34,509 +DA:35,509 +DA:36,509 +DA:37,509 +DA:38,509 +DA:39,509 +DA:41,48296 +DA:42,11692 +DA:43,11693 +DA:44,11684 +DA:45,11684 +DA:47,9658 +DA:48,4067 +DA:49,4067 +DA:50,4062 +DA:52,509 +DA:53,26 +DA:54,238 +DA:55,79 +DA:56,81 +DA:57,80 +DA:58,81 +DA:59,26 +DA:60,509 +BRDA:27,83,0,509 +BRDA:27,83,1,509 +BRDA:41,297,0,1 +BRDA:41,297,1,509 +BRDA:41,333,0,1 +BRDA:41,333,1,509 +BRDA:41,424,1,11691 +BRDA:41,424,0,509 +BRDA:47,495,1,4067 +BRDA:47,495,0,508 +BRDA:52,523,0,26 +BRDA:54,607,1,81 +BRDA:54,607,0,26 +BRDA:52,523,1,509 +LF:41 +LH:41 +BRF:14 +BRH:14 +FNF:2 +FNH:2 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\PredefinedTypesHelper.cs +FN:70,System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::TryAdd(System.String,System.Int32) +FNDA:1,System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::TryAdd(System.String,System.Int32) +DA:71,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,1 +DA:78,1 +DA:79,1 +DA:80,0 +DA:81,0 +DA:83,0 +DA:84,1 +BRDA:75,18,0,1 +BRDA:75,18,1,1 +FN:86,System.Boolean System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::IsPredefinedType(System.Linq.Dynamic.Core.ParsingConfig,System.Type) +FNDA:34,System.Boolean System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::IsPredefinedType(System.Linq.Dynamic.Core.ParsingConfig,System.Type) +DA:87,34 +DA:88,34 +DA:89,34 +DA:91,34 +DA:92,20 +DA:93,20 +DA:96,14 +DA:97,34 +BRDA:91,38,0,20 +BRDA:91,38,1,14 +BRDA:96,51,0,2 +BRDA:96,51,1,12 +FN:9,System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::.cctor() +FNDA:1,System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::.cctor() +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:48,1 +DA:66,1 +DA:68,1 +LF:58 +LH:55 +BRF:6 +BRH:6 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\TypeHelper.cs +FN:9,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::FindGenericType(System.Type,System.Type) +FNDA:1739,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::FindGenericType(System.Type,System.Type) +DA:10,1739 +DA:11,3186 +DA:12,1744 +DA:13,1744 +DA:14,103 +DA:15,103 +DA:18,1641 +DA:19,1641 +DA:20,7837 +DA:21,1554 +DA:22,1554 +DA:23,1748 +DA:24,1360 +DA:25,1447 +DA:27,1447 +DA:28,1447 +DA:30,1442 +DA:31,1739 +BRDA:11,173,1,1744 +BRDA:13,18,0,861 +BRDA:13,18,1,883 +BRDA:13,37,0,103 +BRDA:13,37,1,1641 +BRDA:18,60,0,1641 +BRDA:20,124,1,1554 +BRDA:23,105,0,194 +BRDA:23,105,1,1360 +BRDA:20,124,0,1447 +BRDA:18,60,1,1447 +BRDA:11,148,0,1791 +BRDA:11,148,1,1395 +BRDA:11,173,0,1442 +FN:33,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsCompatibleWith(System.Type,System.Type) +FNDA:4600,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsCompatibleWith(System.Type,System.Type) +DA:34,4600 +DA:173,4600 +DA:174,1 +DA:175,1 +DA:177,4599 +DA:178,127 +DA:179,127 +DA:181,4472 +DA:182,4472 +DA:184,4472 +DA:185,589 +DA:186,589 +DA:188,3883 +DA:189,3883 +DA:191,3883 +DA:192,116 +DA:193,116 +DA:194,52 +DA:195,64 +DA:196,3767 +DA:197,117 +DA:198,117 +DA:199,93 +DA:200,24 +DA:201,3650 +DA:202,143 +DA:203,143 +DA:204,63 +DA:205,80 +DA:206,3507 +DA:207,116 +DA:208,116 +DA:209,92 +DA:210,24 +DA:211,3391 +DA:212,1213 +DA:213,1213 +DA:214,838 +DA:215,375 +DA:216,2178 +DA:217,259 +DA:218,259 +DA:219,117 +DA:220,142 +DA:221,1919 +DA:222,480 +DA:223,480 +DA:224,187 +DA:225,293 +DA:226,1439 +DA:227,266 +DA:228,266 +DA:229,64 +DA:230,202 +DA:231,1173 +DA:232,284 +DA:233,284 +DA:234,70 +DA:235,214 +DA:237,2307 +DA:238,126 +DA:239,126 +DA:242,2181 +DA:244,4600 +BRDA:173,12,0,1 +BRDA:173,12,1,4599 +BRDA:177,41,0,127 +BRDA:177,41,1,4472 +BRDA:184,79,0,785 +BRDA:184,79,1,3687 +BRDA:184,95,0,589 +BRDA:184,95,1,3883 +BRDA:188,117,0,3874 +BRDA:188,117,1,9 +BRDA:189,144,0,3864 +BRDA:189,144,1,19 +BRDA:191,180,0,116 +BRDA:193,202,0,116 +BRDA:193,220,0,116 +BRDA:193,238,0,96 +BRDA:193,256,0,76 +BRDA:193,274,0,72 +BRDA:193,292,0,68 +BRDA:193,202,1,48 +BRDA:193,220,1,48 +BRDA:193,238,1,48 +BRDA:193,256,1,48 +BRDA:193,274,1,48 +BRDA:193,292,1,48 +BRDA:193,317,0,52 +BRDA:193,317,1,64 +BRDA:191,180,1,3767 +BRDA:196,353,0,117 +BRDA:198,375,0,117 +BRDA:198,396,0,117 +BRDA:198,417,0,117 +BRDA:198,435,0,97 +BRDA:198,453,0,77 +BRDA:198,471,0,56 +BRDA:198,489,0,36 +BRDA:198,507,0,32 +BRDA:198,525,0,28 +BRDA:198,375,1,89 +BRDA:198,396,1,89 +BRDA:198,417,1,89 +BRDA:198,435,1,89 +BRDA:198,453,1,89 +BRDA:198,471,1,89 +BRDA:198,489,1,89 +BRDA:198,507,1,89 +BRDA:198,525,1,89 +BRDA:198,550,0,93 +BRDA:198,550,1,24 +BRDA:196,353,1,3650 +BRDA:201,586,0,143 +BRDA:203,608,0,143 +BRDA:203,626,0,121 +BRDA:203,644,0,98 +BRDA:203,662,0,92 +BRDA:203,680,0,86 +BRDA:203,608,1,57 +BRDA:203,626,1,57 +BRDA:203,644,1,57 +BRDA:203,662,1,57 +BRDA:203,680,1,57 +BRDA:203,705,0,63 +BRDA:203,705,1,80 +BRDA:201,586,1,3507 +BRDA:206,741,0,116 +BRDA:208,763,0,116 +BRDA:208,781,0,96 +BRDA:208,799,0,76 +BRDA:208,817,0,56 +BRDA:208,835,0,36 +BRDA:208,853,0,32 +BRDA:208,871,0,28 +BRDA:208,763,1,88 +BRDA:208,781,1,88 +BRDA:208,799,1,88 +BRDA:208,817,1,88 +BRDA:208,835,1,88 +BRDA:208,853,1,88 +BRDA:208,871,1,88 +BRDA:208,896,0,92 +BRDA:208,896,1,24 +BRDA:206,741,1,3391 +BRDA:211,932,0,1213 +BRDA:213,951,0,1037 +BRDA:213,969,0,762 +BRDA:213,987,0,633 +BRDA:213,1005,0,504 +BRDA:213,951,1,709 +BRDA:213,969,1,709 +BRDA:213,987,1,709 +BRDA:213,1005,1,709 +BRDA:213,1030,0,838 +BRDA:213,1030,1,375 +BRDA:211,932,1,2178 +BRDA:216,1066,0,259 +BRDA:218,1088,0,244 +BRDA:218,1106,0,214 +BRDA:218,1124,0,184 +BRDA:218,1142,0,170 +BRDA:218,1160,0,156 +BRDA:218,1088,1,103 +BRDA:218,1106,1,103 +BRDA:218,1124,1,103 +BRDA:218,1142,1,103 +BRDA:218,1160,1,103 +BRDA:218,1185,0,117 +BRDA:218,1185,1,142 +BRDA:216,1066,1,1919 +BRDA:221,1221,0,480 +BRDA:223,1240,0,458 +BRDA:223,1258,0,403 +BRDA:223,1276,0,348 +BRDA:223,1240,1,132 +BRDA:223,1258,1,132 +BRDA:223,1276,1,132 +BRDA:223,1301,0,187 +BRDA:223,1301,1,293 +BRDA:221,1221,1,1439 +BRDA:226,1337,0,266 +BRDA:228,1356,0,250 +BRDA:228,1374,0,234 +BRDA:228,1392,0,218 +BRDA:228,1356,1,48 +BRDA:228,1374,1,48 +BRDA:228,1392,1,48 +BRDA:228,1417,0,64 +BRDA:228,1417,1,202 +BRDA:226,1337,1,1173 +BRDA:231,1447,0,284 +BRDA:233,1466,0,261 +BRDA:233,1466,1,23 +BRDA:233,1491,0,70 +BRDA:233,1491,1,214 +BRDA:231,1447,1,2307 +BRDA:237,1510,0,126 +BRDA:237,1510,1,2181 +FN:246,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsEnumType(System.Type) +FNDA:416,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsEnumType(System.Type) +DA:247,416 +DA:248,416 +DA:249,416 +FN:251,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNumericType(System.Type) +FNDA:13,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNumericType(System.Type) +DA:252,13 +DA:253,13 +DA:254,13 +FN:256,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNullableType(System.Type) +FNDA:11820,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNullableType(System.Type) +DA:257,11820 +DA:258,11820 +DA:260,11820 +DA:261,11820 +BRDA:260,24,0,3705 +BRDA:260,24,1,8115 +FN:263,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsSignedIntegralType(System.Type) +FNDA:654,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsSignedIntegralType(System.Type) +DA:264,654 +DA:265,654 +DA:266,654 +FN:268,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsUnsignedIntegralType(System.Type) +FNDA:250,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsUnsignedIntegralType(System.Type) +DA:269,250 +DA:270,250 +DA:271,250 +FN:273,System.Int32 System.Linq.Dynamic.Core.Parser.TypeHelper::GetNumericTypeKind(System.Type) +FNDA:917,System.Int32 System.Linq.Dynamic.Core.Parser.TypeHelper::GetNumericTypeKind(System.Type) +DA:274,917 +DA:275,917 +DA:304,917 +DA:305,0 +DA:306,0 +DA:309,917 +DA:310,398 +DA:311,519 +DA:312,276 +DA:313,243 +DA:314,243 +DA:316,0 +DA:318,917 +BRDA:304,22,0,0 +BRDA:304,22,1,917 +BRDA:309,48,0,917 +BRDA:309,66,0,791 +BRDA:309,84,0,682 +BRDA:309,48,1,235 +BRDA:309,66,1,235 +BRDA:309,84,1,235 +BRDA:309,107,0,398 +BRDA:309,107,1,519 +BRDA:311,132,0,519 +BRDA:311,150,0,518 +BRDA:311,168,0,288 +BRDA:311,132,1,231 +BRDA:311,150,1,231 +BRDA:311,168,1,231 +BRDA:311,191,0,276 +BRDA:311,191,1,243 +BRDA:313,213,0,242 +BRDA:313,231,0,242 +BRDA:313,249,0,121 +BRDA:313,213,1,122 +BRDA:313,231,1,122 +BRDA:313,249,1,122 +BRDA:313,274,0,243 +BRDA:313,274,1,0 +FN:320,System.String System.Linq.Dynamic.Core.Parser.TypeHelper::GetTypeName(System.Type) +FNDA:16,System.String System.Linq.Dynamic.Core.Parser.TypeHelper::GetTypeName(System.Type) +DA:321,16 +DA:322,16 +DA:324,16 +DA:325,16 +DA:326,0 +DA:327,0 +DA:328,0 +DA:329,16 +DA:330,16 +BRDA:325,24,0,0 +BRDA:325,24,1,16 +FN:332,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetNonNullableType(System.Type) +FNDA:11724,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetNonNullableType(System.Type) +DA:333,11724 +DA:334,11724 +DA:336,11724 +DA:337,11724 +BRDA:336,19,0,8067 +BRDA:336,19,1,3657 +FN:339,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetUnderlyingType(System.Type) +FNDA:240,System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetUnderlyingType(System.Type) +DA:340,240 +DA:341,240 +DA:343,240 +DA:344,240 +DA:345,168 +DA:346,168 +DA:347,168 +DA:350,72 +DA:351,240 +BRDA:344,28,0,168 +BRDA:347,55,0,138 +BRDA:347,55,1,30 +BRDA:344,28,1,72 +FN:353,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.Parser.TypeHelper::GetSelfAndBaseTypes(System.Type) +FNDA:464,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.Parser.TypeHelper::GetSelfAndBaseTypes(System.Type) +DA:354,464 +DA:355,464 +DA:356,19 +DA:357,19 +DA:358,19 +DA:359,19 +DA:361,445 +DA:362,464 +BRDA:355,14,0,19 +BRDA:355,14,1,445 +FN:373,System.Void System.Linq.Dynamic.Core.Parser.TypeHelper::AddInterface(System.Collections.Generic.List`1,System.Type) +FNDA:76,System.Void System.Linq.Dynamic.Core.Parser.TypeHelper::AddInterface(System.Collections.Generic.List`1,System.Type) +DA:374,76 +DA:375,76 +DA:376,57 +DA:377,57 +DA:378,285 +DA:379,57 +DA:380,57 +DA:381,57 +DA:382,57 +DA:383,76 +BRDA:375,13,0,57 +BRDA:378,58,1,57 +BRDA:378,58,0,57 +BRDA:375,13,1,76 +FN:385,System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseNumber(System.String,System.Type) +FNDA:703,System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseNumber(System.String,System.Type) +DA:386,703 +DA:436,703 +DA:437,703 +DA:438,0 +DA:440,0 +DA:441,0 +DA:442,703 +DA:443,0 +DA:445,0 +DA:446,0 +DA:447,703 +DA:448,0 +DA:450,0 +DA:451,0 +DA:452,703 +DA:453,0 +DA:455,0 +DA:456,0 +DA:457,703 +DA:458,150 +DA:460,294 +DA:461,6 +DA:462,553 +DA:463,31 +DA:465,62 +DA:466,0 +DA:467,522 +DA:468,96 +DA:470,186 +DA:471,6 +DA:472,426 +DA:473,45 +DA:475,89 +DA:476,1 +DA:477,381 +DA:478,116 +DA:480,222 +DA:481,10 +DA:482,265 +DA:483,128 +DA:485,246 +DA:486,10 +DA:487,137 +DA:488,121 +DA:490,232 +DA:491,10 +DA:493,59 +DA:494,703 +BRDA:437,26,0,0 +BRDA:440,39,0,0 +BRDA:440,39,1,0 +BRDA:437,26,1,703 +BRDA:442,80,0,0 +BRDA:445,95,0,0 +BRDA:445,95,1,0 +BRDA:442,80,1,703 +BRDA:447,137,0,0 +BRDA:450,152,0,0 +BRDA:450,152,1,0 +BRDA:447,137,1,703 +BRDA:452,194,0,0 +BRDA:455,209,0,0 +BRDA:455,209,1,0 +BRDA:452,194,1,703 +BRDA:457,251,0,150 +BRDA:460,266,0,144 +BRDA:460,266,1,6 +BRDA:457,251,1,553 +BRDA:462,308,0,31 +BRDA:465,323,0,31 +BRDA:465,323,1,0 +BRDA:462,308,1,522 +BRDA:467,365,0,96 +BRDA:470,380,0,90 +BRDA:470,380,1,6 +BRDA:467,365,1,426 +BRDA:472,422,0,45 +BRDA:475,437,0,44 +BRDA:475,437,1,1 +BRDA:472,422,1,381 +BRDA:477,479,0,116 +BRDA:480,494,0,106 +BRDA:480,494,1,10 +BRDA:477,479,1,265 +BRDA:482,530,0,128 +BRDA:485,545,0,118 +BRDA:485,545,1,10 +BRDA:482,530,1,137 +BRDA:487,581,0,121 +BRDA:490,596,0,111 +BRDA:490,596,1,10 +BRDA:487,581,1,59 +FN:496,System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseEnum(System.String,System.Type) +FNDA:9,System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseEnum(System.String,System.Type) +DA:497,9 +DA:498,9 +DA:499,1 +DA:500,1 +DA:503,8 +DA:504,9 +BRDA:498,12,0,2 +BRDA:498,12,1,7 +BRDA:498,26,0,1 +BRDA:498,26,1,8 +FN:364,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper/d__12::MoveNext() +FNDA:445,System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper/d__12::MoveNext() +DA:365,445 +DA:366,503 +DA:367,478 +DA:368,478 +DA:369,58 +DA:370,58 +DA:371,25 +BRDA:366,100,1,478 +BRDA:365,14,1,58 +BRDA:366,100,0,25 +LF:212 +LH:193 +BRF:243 +BRH:227 +FNF:16 +FNH:16 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodData.cs +FN:7,System.Reflection.MethodBase System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_MethodBase() +FNDA:6717,System.Reflection.MethodBase System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_MethodBase() +DA:8,6717 +FN:8,System.Reflection.ParameterInfo[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Parameters() +FNDA:13729,System.Reflection.ParameterInfo[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Parameters() +DA:9,13729 +FN:9,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Args() +FNDA:1594,System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Args() +DA:10,1594 +LF:3 +LH:3 +BRF:0 +BRH:0 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs +FN:9,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::ContainsMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[]) +FNDA:253,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::ContainsMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[]) +DA:10,253 +DA:11,253 +DA:12,253 +FN:14,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +FNDA:279,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +DA:15,279 +DA:28,1347 +DA:29,392 +DA:30,10278 +DA:31,392 +DA:32,392 +DA:33,274 +DA:34,274 +DA:36,118 +DA:38,5 +DA:39,5 +DA:40,279 +BRDA:28,135,1,392 +BRDA:30,62,0,9710 +BRDA:30,62,1,10194 +BRDA:32,119,0,274 +BRDA:32,119,1,118 +BRDA:28,135,0,5 +FN:42,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindBestMethod(System.Collections.Generic.IEnumerable`1,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +FNDA:406,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindBestMethod(System.Collections.Generic.IEnumerable`1,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +DA:43,406 +DA:44,406 +DA:45,3146 +DA:46,3146 +DA:47,406 +DA:49,406 +DA:50,141 +DA:51,3619 +DA:52,141 +DA:54,406 +DA:55,0 +DA:56,0 +DA:57,0 +DA:59,406 +DA:60,278 +DA:61,278 +DA:62,1346 +DA:63,395 +DA:64,395 +DA:65,395 +DA:66,278 +DA:67,278 +DA:69,128 +DA:70,128 +DA:71,128 +DA:73,406 +DA:74,406 +BRDA:44,22,0,1 +BRDA:44,22,1,406 +BRDA:49,92,0,141 +BRDA:49,92,1,406 +BRDA:54,139,0,264 +BRDA:54,150,0,0 +BRDA:54,180,0,0 +BRDA:54,180,1,0 +BRDA:54,139,1,406 +BRDA:54,150,1,406 +BRDA:54,218,0,0 +BRDA:54,218,1,406 +BRDA:59,258,0,278 +BRDA:62,319,1,395 +BRDA:62,319,0,278 +BRDA:59,258,1,128 +FN:76,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindIndexer(System.Type,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +FNDA:3,System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindIndexer(System.Type,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) +DA:77,3 +DA:78,12 +DA:79,3 +DA:80,3 +DA:81,3 +DA:82,3 +DA:83,3 +DA:84,3 +DA:85,3 +DA:86,3 +DA:87,3 +DA:88,7 +DA:90,3 +DA:91,3 +DA:92,3 +DA:93,3 +DA:95,0 +DA:96,0 +DA:98,0 +DA:99,0 +DA:100,3 +BRDA:78,122,1,3 +BRDA:81,38,0,3 +BRDA:83,53,0,1 +BRDA:83,53,1,3 +BRDA:91,105,0,3 +BRDA:91,105,1,0 +BRDA:81,38,1,0 +BRDA:78,122,0,0 +FN:102,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsApplicable(System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Expressions.Expression[]) +FNDA:2740,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsApplicable(System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Expressions.Expression[]) +DA:103,2740 +DA:104,2740 +DA:105,63 +DA:106,63 +DA:109,2677 +DA:110,9796 +DA:111,3699 +DA:112,3699 +DA:113,3699 +DA:114,0 +DA:115,0 +DA:118,3699 +DA:119,3699 +DA:120,1478 +DA:121,1478 +DA:123,2221 +DA:124,2221 +DA:125,1199 +DA:126,1199 +DA:127,2740 +BRDA:104,19,0,63 +BRDA:104,19,1,2677 +BRDA:110,151,1,3699 +BRDA:113,64,0,0 +BRDA:113,64,1,3699 +BRDA:119,124,0,1478 +BRDA:119,124,1,2221 +BRDA:110,151,0,1199 +FN:129,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsBetterThan(System.Linq.Expressions.Expression[],System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData) +FNDA:2211,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsBetterThan(System.Linq.Expressions.Expression[],System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData) +DA:130,2211 +DA:131,2211 +DA:132,4964 +DA:133,2275 +DA:134,2275 +DA:137,2275 +DA:138,921 +DA:139,921 +DA:143,1354 +DA:144,1083 +DA:145,1083 +DA:149,271 +DA:150,271 +DA:151,271 +DA:152,271 +DA:153,271 +DA:155,207 +DA:156,2211 +BRDA:132,107,1,2275 +BRDA:137,54,0,921 +BRDA:137,54,1,1354 +BRDA:143,70,0,1083 +BRDA:143,70,1,271 +BRDA:149,86,0,271 +BRDA:149,86,1,271 +BRDA:132,107,0,207 +FN:161,System.Linq.Dynamic.Core.Parser.SupportedMethods.CompareConversionType System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::CompareConversions(System.Type,System.Type,System.Type) +FNDA:2275,System.Linq.Dynamic.Core.Parser.SupportedMethods.CompareConversionType System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::CompareConversions(System.Type,System.Type,System.Type) +DA:162,2275 +DA:163,2275 +DA:164,64 +DA:165,64 +DA:167,2211 +DA:168,646 +DA:169,646 +DA:171,1565 +DA:172,601 +DA:173,601 +DA:176,964 +DA:177,964 +DA:179,964 +DA:180,357 +DA:181,357 +DA:183,607 +DA:184,240 +DA:185,240 +DA:188,367 +DA:189,80 +DA:190,80 +DA:192,287 +DA:193,80 +DA:194,80 +DA:197,207 +DA:198,2275 +BRDA:163,10,0,64 +BRDA:163,10,1,2211 +BRDA:167,31,0,646 +BRDA:167,31,1,1565 +BRDA:171,52,0,601 +BRDA:171,52,1,964 +BRDA:179,76,0,357 +BRDA:179,76,1,607 +BRDA:179,89,0,357 +BRDA:179,89,1,607 +BRDA:183,97,0,240 +BRDA:183,97,1,367 +BRDA:183,110,0,240 +BRDA:183,110,1,367 +BRDA:188,123,0,143 +BRDA:188,123,1,224 +BRDA:188,138,0,80 +BRDA:188,138,1,287 +BRDA:192,151,0,107 +BRDA:192,151,1,180 +BRDA:192,166,0,80 +BRDA:192,166,1,207 +FN:200,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::SelfAndBaseTypes(System.Type) +FNDA:282,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::SelfAndBaseTypes(System.Type) +DA:201,282 +DA:202,282 +DA:203,256 +DA:204,256 +DA:205,256 +DA:206,256 +DA:208,26 +DA:209,282 +BRDA:202,14,0,256 +BRDA:202,14,1,26 +FN:220,System.Void System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::AddInterface(System.Collections.Generic.List`1,System.Type) +FNDA:455,System.Void System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::AddInterface(System.Collections.Generic.List`1,System.Type) +DA:221,455 +DA:222,455 +DA:223,394 +DA:224,394 +DA:225,1779 +DA:226,394 +DA:227,455 +BRDA:222,13,0,394 +BRDA:225,56,1,199 +BRDA:225,56,0,394 +BRDA:222,13,1,455 +FN:211,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/d__8::MoveNext() +FNDA:26,System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/d__8::MoveNext() +DA:212,26 +DA:213,27 +DA:214,27 +DA:215,27 +DA:216,1 +DA:217,1 +DA:218,0 +BRDA:213,100,1,27 +BRDA:212,14,1,1 +LF:149 +LH:139 +BRF:80 +BRH:72 +FNF:10 +FNH:10 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs +FN:14,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) +FNDA:408,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) +DA:15,408 +DA:16,408 +DA:17,408 +DA:19,408 +DA:20,408 +FN:22,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) +FNDA:409,System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) +DA:23,409 +DA:24,409 +DA:28,409 +DA:30,409 +DA:31,34 +DA:33,34 +DA:34,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:41,0 +DA:42,0 +DA:43,0 +DA:46,33 +DA:48,408 +DA:49,409 +BRDA:30,41,0,34 +BRDA:33,62,0,1 +BRDA:39,97,0,1 +BRDA:39,97,1,0 +BRDA:33,62,1,33 +BRDA:30,41,1,408 +LF:22 +LH:19 +BRF:6 +BRH:5 +FNF:2 +FNH:2 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Exceptions\ParseException.cs +FN:30,System.Int32 System.Linq.Dynamic.Core.Exceptions.ParseException::get_Position() +FNDA:0,System.Int32 System.Linq.Dynamic.Core.Exceptions.ParseException::get_Position() +DA:31,0 +FN:37,System.String System.Linq.Dynamic.Core.Exceptions.ParseException::ToString() +FNDA:0,System.String System.Linq.Dynamic.Core.Exceptions.ParseException::ToString() +DA:38,0 +DA:39,0 +DA:40,0 +FN:22,System.Void System.Linq.Dynamic.Core.Exceptions.ParseException::.ctor(System.String,System.Int32) +FNDA:40,System.Void System.Linq.Dynamic.Core.Exceptions.ParseException::.ctor(System.String,System.Int32) +DA:23,40 +DA:24,40 +DA:25,40 +DA:26,40 +LF:8 +LH:4 +BRF:0 +BRH:0 +FNF:3 +FNH:1 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\AbstractDynamicLinqCustomTypeProvider.cs +FN:18,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::FindTypesMarkedWithDynamicLinqTypeAttribute(System.Collections.Generic.IEnumerable`1) +FNDA:26,System.Collections.Generic.IEnumerable`1 System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::FindTypesMarkedWithDynamicLinqTypeAttribute(System.Collections.Generic.IEnumerable`1) +DA:19,26 +DA:20,26 +DA:22,5452 +DA:24,26 +DA:27,649691 +DA:31,26 +BRDA:22,20,0,1 +BRDA:22,20,1,26 +BRDA:27,67,0,1 +BRDA:27,67,1,26 +BRDA:27,103,0,1 +BRDA:27,103,1,26 +FN:39,System.Type System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::ResolveType(System.Collections.Generic.IEnumerable`1,System.String) +FNDA:2,System.Type System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::ResolveType(System.Collections.Generic.IEnumerable`1,System.String) +DA:40,2 +DA:41,2 +DA:42,2 +DA:44,276 +DA:45,136 +DA:46,136 +DA:47,136 +DA:48,2 +DA:49,2 +DA:51,134 +DA:53,0 +DA:54,2 +BRDA:44,77,1,136 +BRDA:47,62,0,2 +BRDA:47,62,1,134 +BRDA:44,77,0,0 +FN:62,System.Boolean System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider/d__2::MoveNext() +FNDA:26,System.Boolean System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider/d__2::MoveNext() +DA:63,26 +DA:64,26 +DA:66,10839 +DA:67,5380 +DA:68,5380 +DA:71,5385 +DA:72,5383 +DA:73,5373 +DA:74,0 +DA:75,0 +DA:77,0 +DA:79,5377 +DA:80,5375 +DA:81,925629 +DA:82,454817 +DA:83,455017 +DA:84,454946 +DA:85,5383 +DA:86,5381 +DA:87,26 +BRDA:66,292,1,5381 +BRDA:79,150,0,5380 +BRDA:81,249,1,455159 +BRDA:63,14,1,454686 +BRDA:81,249,0,5384 +BRDA:79,150,1,5384 +BRDA:66,292,0,26 +LF:38 +LH:34 +BRF:19 +BRH:18 +FNF:3 +FNH:3 +end_of_record +SF:C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\DefaultDynamicLinqCustomTypeProvider.cs +FN:21,System.Collections.Generic.HashSet`1 System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::GetCustomTypes() +FNDA:0,System.Collections.Generic.HashSet`1 System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::GetCustomTypes() +DA:22,0 +DA:23,0 +DA:24,0 +DA:25,0 +FN:28,System.Type System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::ResolveType(System.String) +FNDA:0,System.Type System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::ResolveType(System.String) +DA:29,0 +DA:30,0 +DA:32,0 +DA:33,0 +DA:34,0 +FN:17,System.Void System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::.ctor() +FNDA:0,System.Void System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::.ctor() +DA:18,0 +LF:10 +LH:0 +BRF:0 +BRH:0 +FNF:3 +FNH:0 +end_of_record \ No newline at end of file diff --git a/report/coverage.opencover.xml b/report/coverage.opencover.xml new file mode 100644 index 00000000..16b05c0d --- /dev/null +++ b/report/coverage.opencover.xml @@ -0,0 +1,9866 @@ + + + + + + Microsoft.EntityFrameworkCore.DynamicLinq.dll + 2018-10-23T04:43:53 + Microsoft.EntityFrameworkCore.DynamicLinq + + + + + + + + + + + + + System.Reflection.CustomIntrospectionExtensions + + + + + System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) + + + + + + + + + + + + + + System.Reflection.CustomTypeBuilderExtensions + + + + + System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Validation.Check + + + + + T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + + T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) + + + + + + + + + + + + + + + + + + + + T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IList`1<T> System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IList`1<T> System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Validation.CoreStrings + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions + + + + + System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions + + + + + System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String) + + + + + + + + + + + System.Boolean Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions::Like(System.String,System.String,System.String) + + + + + + + + + + + + Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions + + + + + System.Linq.Expressions.Expression Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Boolean> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Boolean> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Boolean> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::AnyAsync(System.Linq.IQueryable,System.String,System.Threading.CancellationToken,System.Object[]) + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Int32> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Int32> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Int32> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<TResult> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Threading.CancellationToken) + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<TResult> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Threading.CancellationToken) + + + + + + + + + + + System.Threading.Tasks.Task`1<TResult> Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression,System.Threading.CancellationToken) + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Reflection.MethodInfo Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>) + + + + + + + + + + + + System.Void Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions/<>c__DisplayClass35_0`1 + + + + + Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions/<>c__DisplayClass36_0 + + + + + + System.Linq.Dynamic.Core.dll + 2018-10-23T04:43:53 + System.Linq.Dynamic.Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Reflection.CustomIntrospectionExtensions + + + + + System.Type[] System.Reflection.CustomIntrospectionExtensions::GetGenericTypeArguments(System.Reflection.TypeInfo) + + + + + + + + + + + + + + System.Reflection.CustomTypeBuilderExtensions + + + + + System.Type System.Reflection.CustomTypeBuilderExtensions::CreateType(System.Reflection.Emit.TypeBuilder) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.AssemblyBuilderFactory + + + + + System.Reflection.Emit.AssemblyBuilder System.Linq.Dynamic.Core.AssemblyBuilderFactory::DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DefaultAssemblyHelper + + + + + System.Reflection.Assembly[] System.Linq.Dynamic.Core.DefaultAssemblyHelper::GetAssemblies() + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicClass + + + + + System.Collections.Generic.Dictionary`2<System.String,System.Object> System.Linq.Dynamic.Core.DynamicClass::get_Properties() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicClass::GetDynamicPropertyValue(System.String) + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,T) + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicClass::SetDynamicPropertyValue(System.String,System.Object) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicClass::get_Item(System.String) + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicClass::set_Item(System.String,System.Object) + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.String> System.Linq.Dynamic.Core.DynamicClass::GetDynamicMemberNames() + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicClass::TryGetMember(System.Dynamic.GetMemberBinder,System.Object&) + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicClass::TrySetMember(System.Dynamic.SetMemberBinder,System.Object) + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicClassFactory + + + + + System.Type System.Linq.Dynamic.Core.DynamicClassFactory::CreateType(System.Collections.Generic.IList`1<System.Linq.Dynamic.Core.DynamicProperty>,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.DynamicClassFactory::GenerateKey(System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.DynamicProperty>,System.Boolean) + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.DynamicClassFactory::Escape(System.String) + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicClassFactory::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions + + + + + System.Threading.Tasks.Task`1<System.Object[]> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable,System.Type) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Object[]> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<T[]> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicArrayAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Collections.Generic.List`1<System.Object>> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable,System.Type) + + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Collections.Generic.List`1<System.Object>> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Collections.Generic.List`1<T>> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::ToDynamicListAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Threading.Tasks.Task`1<T[]> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToArrayAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + System.Threading.Tasks.Task`1<System.Collections.Generic.List`1<T>> System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions::CastToListAsync(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicEnumerableExtensions + + + + + System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) + + + + + + + + + + + + + + T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Object[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicArray(System.Collections.IEnumerable,System.Type) + + + + + + + + + + + + + + + + System.Collections.Generic.List`1<System.Object> System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) + + + + + + + + + + + + + + System.Collections.Generic.List`1<System.Object> System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable,System.Type) + + + + + + + + + + + + + + + System.Collections.Generic.List`1<T> System.Linq.Dynamic.Core.DynamicEnumerableExtensions::ToDynamicList(System.Collections.IEnumerable) + + + + + + + + + + + + + + T[] System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToArray(System.Collections.IEnumerable) + + + + + + + + + + + + + System.Collections.Generic.List`1<T> System.Linq.Dynamic.Core.DynamicEnumerableExtensions::CastToList(System.Collections.IEnumerable) + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicEnumerableExtensions::.cctor() + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicExpressionParser + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + System.Linq.Expressions.Expression`1<System.Func`1<TResult>> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression`1<System.Func`1<TResult>> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Type,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + System.Linq.Expressions.Expression`1<System.Func`2<T,TResult>> System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[]) + + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Type,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Expressions.LambdaExpression System.Linq.Dynamic.Core.DynamicExpressionParser::ParseLambda(System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicGetMemberBinder + + + + + System.Dynamic.DynamicMetaObject System.Linq.Dynamic.Core.DynamicGetMemberBinder::FallbackGetMember(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject) + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.ctor(System.String) + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicGetMemberBinder::.cctor() + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicProperty + + + + + System.String System.Linq.Dynamic.Core.DynamicProperty::get_Name() + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.DynamicProperty::get_Type() + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicProperty::.ctor(System.String,System.Type) + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicQueryableExtensions + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.DynamicQueryableExtensions::OptimizeExpression(System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Aggregate(System.Linq.IQueryable,System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions::Any(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.DynamicQueryableExtensions::Count(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::DefaultIfEmpty(System.Linq.IQueryable,System.Object) + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Distinct(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::First(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::FirstOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String) + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.String) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupBy(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.GroupResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.GroupResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.String[]) + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.GroupResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[]) + + + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.GroupResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupByManyInternal(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[],System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::GroupJoin(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable`1<TElement> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable`1<TElement> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Join(System.Linq.IQueryable`1<TElement>,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Last(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::LastOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Linq.IOrderedQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IOrderedQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable`1<TSource>,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::OrderBy(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Page(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.PagedResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.PagedResult`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::PageResult(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Reverse(System.Linq.IQueryable) + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable`1<TResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable`1<TResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Select(System.Linq.IQueryable,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectManyInternal(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable`1<TResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable`1<TResult> System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[],System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.Object[],System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SelectMany(System.Linq.IQueryable,System.String,System.String,System.String,System.String,System.Object[],System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable) + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Single(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable) + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::SingleOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Skip(System.Linq.IQueryable,System.Int32) + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::SkipWhile(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Sum(System.Linq.IQueryable) + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Take(System.Linq.IQueryable,System.Int32) + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::TakeWhile(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IOrderedQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IOrderedQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IOrderedQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::ThenBy(System.Linq.IOrderedQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + System.Linq.IQueryable`1<TSource> System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable`1<TSource>,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[]) + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::Where(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::CheckOuterAndInnerTypes(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.String,System.Linq.Expressions.LambdaExpression&,System.Linq.Expressions.LambdaExpression&,System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable) + + + + + + + + + + + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.DynamicQueryableExtensions::CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) + + + + + + + + + + + + + + + + + + + + + TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable) + + + + + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + TResult System.Linq.Dynamic.Core.DynamicQueryableExtensions::Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + System.Reflection.MethodInfo System.Linq.Dynamic.Core.DynamicQueryableExtensions::GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>) + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.DynamicQueryableExtensions::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicQueryableExtensions/<AsEnumerable>d__9 + + + + + System.Boolean System.Linq.Dynamic.Core.DynamicQueryableExtensions/<AsEnumerable>d__9::MoveNext() + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.DynamicQueryableExtensions/<>c__DisplayClass2_0 + + + + + System.Linq.Dynamic.Core.DynamicQueryableExtensions/<>c + + + + + System.Linq.Dynamic.Core.DynamicQueryableExtensions/<>c__DisplayClass128_0 + + + + + System.Linq.Dynamic.Core.ExtensibilityPoint + + + + + System.Void System.Linq.Dynamic.Core.ExtensibilityPoint::.cctor() + + + + + + + + + + + + System.Linq.Dynamic.Core.GroupResult + + + + + System.Object System.Linq.Dynamic.Core.GroupResult::get_Key() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.GroupResult::get_Count() + + + + + + + + + + + System.Collections.IEnumerable System.Linq.Dynamic.Core.GroupResult::get_Items() + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Linq.Dynamic.Core.GroupResult> System.Linq.Dynamic.Core.GroupResult::get_Subgroups() + + + + + + + + + + + System.String System.Linq.Dynamic.Core.GroupResult::ToString() + + + + + + + + + + + + + + System.Linq.Dynamic.Core.PagedResult + + + + + System.Linq.IQueryable System.Linq.Dynamic.Core.PagedResult::get_Queryable() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.PagedResult::get_CurrentPage() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageCount() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.PagedResult::get_PageSize() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.PagedResult::get_RowCount() + + + + + + + + + + + + System.Linq.Dynamic.Core.PagedResult`1 + + + + + System.Linq.IQueryable`1<TSource> System.Linq.Dynamic.Core.PagedResult`1::get_Queryable() + + + + + + + + + + + + System.Linq.Dynamic.Core.ParameterExpressionHelper + + + + + System.Linq.Expressions.ParameterExpression System.Linq.Dynamic.Core.ParameterExpressionHelper::CreateParameterExpression(System.Type,System.String) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.ParsingConfig + + + + + System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_Default() + + + + + + + + + + + System.Linq.Dynamic.Core.ParsingConfig System.Linq.Dynamic.Core.ParsingConfig::get_DefaultEFCore21() + + + + + + + + + + + System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider System.Linq.Dynamic.Core.ParsingConfig::get_CustomTypeProvider() + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.ParsingConfig::set_CustomTypeProvider(System.Linq.Dynamic.Core.CustomTypeProviders.IDynamicLinkCustomTypeProvider) + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AreContextKeywordsEnabled() + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_UseDynamicObjectClassForAnonymousTypes() + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_EvaluateGroupByAtDatabase() + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.ParsingConfig::get_AllowNewToEvaluateAnyType() + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.ParsingConfig::.cctor() + + + + + + + + + + + + + + System.Linq.Dynamic.Core.TypeConverterFactory + + + + + System.ComponentModel.TypeConverter System.Linq.Dynamic.Core.TypeConverterFactory::GetConverter(System.Type) + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Validation.Check + + + + + T System.Linq.Dynamic.Core.Validation.Check::Condition(T,System.Predicate`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + + T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String) + + + + + + + + + + + + + + + + + + + + T System.Linq.Dynamic.Core.Validation.Check::NotNull(T,System.String,System.String) + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IList`1<T> System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.Collections.Generic.IList`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.Check::NotEmpty(System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.Check::NullButNotEmpty(System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IList`1<T> System.Linq.Dynamic.Core.Validation.Check::HasNoNulls(System.Collections.Generic.IList`1<T>,System.String) + + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Validation.Check::ValidEntityType(System.Type,System.String) + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Validation.CoreStrings + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentPropertyNull(System.String,System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::ArgumentIsEmpty(System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::InvalidEntityType(System.Type,System.String) + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Validation.CoreStrings::CollectionArgumentIsEmpty(System.String) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Tokenizer.TextParser + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::SetTextPos(System.Int32) + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextChar() + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::NextToken() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateToken(System.Linq.Dynamic.Core.Tokenizer.TokenId) + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateExpression() + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateDigit() + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::ValidateHexChar() + + + + + + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.String,System.Object[]) + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Tokenizer.TextParser::ParseError(System.Int32,System.String,System.Object[]) + + + + + + + + + + + + + System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.TextParser::GetAliasedTokenId(System.Linq.Dynamic.Core.Tokenizer.TokenId,System.String) + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Tokenizer.TextParser::IsHexChar(System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.ctor(System.String) + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Tokenizer.TextParser::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Tokenizer.Token + + + + + System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_Id() + + + + + + + + + + + System.Linq.Dynamic.Core.Tokenizer.TokenId System.Linq.Dynamic.Core.Tokenizer.Token::get_OriginalId() + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Tokenizer.Token::get_Text() + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.Tokenizer.Token::get_Pos() + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::TryGetText(System.Linq.Expressions.Expression,System.String&) + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::CreateLiteral(System.Object,System.String) + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper::.cctor() + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.Constants + + + + + System.Void System.Linq.Dynamic.Core.Parser.Constants::.cctor() + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.ExpressionHelper + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateAdd(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStringConcat(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateSubtract(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateNotEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateGreaterThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateLessThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeForEqualityIfPossible(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::OptimizeStringForEqualityIfPossible(System.String,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Reflection.MethodInfo System.Linq.Dynamic.Core.Parser.ExpressionHelper::GetStaticMethod(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionHelper::GenerateStaticMethodCall(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.ExpressionParser + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessParameters(System.Linq.Expressions.ParameterExpression[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::ProcessValues(System.Object[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::AddSymbol(System.String,System.Object) + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::Parse(System.Type,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IList`1<System.Linq.Dynamic.Core.DynamicOrdering> System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrdering(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConditionalOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNullCoalescingOperator() + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIsNull() + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseOrOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAndOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIn() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLogicalAndOrOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseComparisonOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::HasImplicitConversion(System.Type,System.Type) + + + + + + + + + + + + + + + System.Linq.Expressions.ConstantExpression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseEnumToConstantExpression(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseConstantExpressionToEnum(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression) + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseShiftOperator() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAdditive() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMultiplicative() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseUnary() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimary() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParsePrimaryStart() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseStringLiteral() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIntegerLiteral() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRealLiteral() + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsFloat(System.String,System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDecimal(System.String,System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::TryParseAsDouble(System.String,System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParenExpression() + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIdentifier() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIt() + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseParent() + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseRoot() + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseIif() + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConditional(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseNew() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateArrayInitializerExpression(System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::CreateNewExpression(System.Collections.Generic.List`1<System.Linq.Dynamic.Core.DynamicProperty>,System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseLambdaInvocation(System.Linq.Expressions.LambdaExpression) + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseTypeAccess(System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::GenerateConversion(System.Linq.Expressions.Expression,System.Type,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseMemberAccess(System.Type,System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::FindType(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseAggregate(System.Linq.Expressions.Expression,System.Type,System.String,System.Int32,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArgumentList() + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseArguments() + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseElementAccess(System.Linq.Expressions.Expression) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Parser.ExpressionParser::ToNullableType(System.Type) + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TryGetMemberName(System.Linq.Expressions.Expression,System.String&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperand(System.Type,System.String,System.Linq.Expressions.Expression&,System.Int32) + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::CheckAndPromoteOperands(System.Type,System.String,System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&,System.Int32) + + + + + + + + + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandError(System.String,System.Linq.Expressions.Expression,System.Int32) + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::IncompatibleOperandsError(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32) + + + + + + + + + + + + + System.Reflection.MemberInfo System.Linq.Dynamic.Core.Parser.ExpressionParser::FindPropertyOrField(System.Type,System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.ExpressionParser::TokenIdentifierIs(System.String) + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Parser.ExpressionParser::GetIdentifier() + + + + + + + + + + + + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.String,System.Object[]) + + + + + + + + + + + + + + + + System.Exception System.Linq.Dynamic.Core.Parser.ExpressionParser::ParseError(System.Int32,System.String,System.Object[]) + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.ctor(System.Linq.Expressions.ParameterExpression[],System.String,System.Object[],System.Linq.Dynamic.Core.ParsingConfig) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.ExpressionParser::.cctor() + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.ExpressionParser/<>c__DisplayClass30_0 + + + + + System.Linq.Dynamic.Core.Parser.ExpressionParser/<>c__DisplayClass70_0 + + + + + System.Linq.Dynamic.Core.Parser.ExpressionPromoter + + + + + System.Linq.Expressions.Expression System.Linq.Dynamic.Core.Parser.ExpressionPromoter::Promote(System.Linq.Expressions.Expression,System.Type,System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.KeywordsHelper + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.KeywordsHelper::TryGetValue(System.String,System.Object&) + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.KeywordsHelper::.ctor(System.Linq.Dynamic.Core.ParsingConfig) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper + + + + + System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::TryAdd(System.String,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::IsPredefinedType(System.Linq.Dynamic.Core.ParsingConfig,System.Type) + + + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.TypeHelper + + + + + System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::FindGenericType(System.Type,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsCompatibleWith(System.Type,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsEnumType(System.Type) + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNumericType(System.Type) + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsNullableType(System.Type) + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsSignedIntegralType(System.Type) + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper::IsUnsignedIntegralType(System.Type) + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.Parser.TypeHelper::GetNumericTypeKind(System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Parser.TypeHelper::GetTypeName(System.Type) + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetNonNullableType(System.Type) + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.Parser.TypeHelper::GetUnderlyingType(System.Type) + + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Type> System.Linq.Dynamic.Core.Parser.TypeHelper::GetSelfAndBaseTypes(System.Type) + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.TypeHelper::AddInterface(System.Collections.Generic.List`1<System.Type>,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseNumber(System.String,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Object System.Linq.Dynamic.Core.Parser.TypeHelper::ParseEnum(System.String,System.Type) + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.TypeHelper/<GetSelfAndBaseClasses>d__12 + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.TypeHelper/<GetSelfAndBaseClasses>d__12::MoveNext() + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData + + + + + System.Reflection.MethodBase System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_MethodBase() + + + + + + + + + + + System.Reflection.ParameterInfo[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Parameters() + + + + + + + + + + + System.Linq.Expressions.Expression[] System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData::get_Args() + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::ContainsMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[]) + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindBestMethod(System.Collections.Generic.IEnumerable`1<System.Reflection.MethodBase>,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Int32 System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::FindIndexer(System.Type,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsApplicable(System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Expressions.Expression[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::IsBetterThan(System.Linq.Expressions.Expression[],System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.CompareConversionType System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::CompareConversions(System.Type,System.Type,System.Type) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Collections.Generic.IEnumerable`1<System.Type> System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::SelfAndBaseTypes(System.Type) + + + + + + + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder::AddInterface(System.Collections.Generic.List`1<System.Type>,System.Type) + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/<SelfAndBaseClasses>d__8 + + + + + System.Boolean System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/<SelfAndBaseClasses>d__8::MoveNext() + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/<>c__DisplayClass1_0 + + + + + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder/<>c__DisplayClass2_1 + + + + + System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions + + + + + System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsLinqToObjects(System.Linq.IQueryable) + + + + + + + + + + + + + + + System.Boolean System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions::IsProviderEnumerableQuery(System.Linq.IQueryProvider) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.Exceptions.ParseException + + + + + System.Int32 System.Linq.Dynamic.Core.Exceptions.ParseException::get_Position() + + + + + + + + + + + System.String System.Linq.Dynamic.Core.Exceptions.ParseException::ToString() + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.Exceptions.ParseException::.ctor(System.String,System.Int32) + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider + + + + + System.Collections.Generic.IEnumerable`1<System.Type> System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::FindTypesMarkedWithDynamicLinqTypeAttribute(System.Collections.Generic.IEnumerable`1<System.Reflection.Assembly>) + + + + + + + + + + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider::ResolveType(System.Collections.Generic.IEnumerable`1<System.Reflection.Assembly>,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider/<GetAssemblyTypes>d__2 + + + + + System.Boolean System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider/<GetAssemblyTypes>d__2::MoveNext() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider/<>c + + + + + System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider + + + + + System.Collections.Generic.HashSet`1<System.Type> System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::GetCustomTypes() + + + + + + + + + + + + + + System.Type System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::ResolveType(System.String) + + + + + + + + + + + + + + + System.Void System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider::.ctor() + + + + + + + + + + + + + \ No newline at end of file diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm similarity index 86% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm index 132bf797..69807a16 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Validation.Check - Coverage Report
@@ -15,31 +16,31 @@

Summary

Class:System.Linq.Dynamic.Core.Validation.Check Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs Covered lines:11 Uncovered lines:60 Coverable lines:71 Total lines:139 Line coverage:15.4% -Branch coverage:20% +Branch coverage:16.6%

Metrics

- + - - - - - - - - + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
Condition(...)2200
NotNull(...)2257.1466.67
NotNull(...)2200
NotEmpty(...)2200
NotEmpty(...)4843.7557.14
NullButNotEmpty(...)3200
HasNoNulls(...)3200
ValidEntityType(...)2200
Condition(...)0000
NotNull(...)005715
NotNull(...)0000
NotEmpty(...)0000
NotEmpty(...)004385
NullButNotEmpty(...)0000
HasNoNulls(...)0000
ValidEntityType(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs

@@ -63,7 +64,7 @@

- + @@ -76,7 +77,7 @@

- + @@ -92,7 +93,7 @@

- + @@ -108,7 +109,7 @@

- + @@ -122,16 +123,16 @@

- + - + - + @@ -143,7 +144,7 @@

- + @@ -159,7 +160,7 @@

- + @@ -171,7 +172,7 @@

- + @@ -184,18 +185,18 @@

#LineLine coverage
 018            NotNull(condition, nameof(condition));
 019            NotNull(value, nameof(value));
 20
 021             if (!condition(value))
 021            if (!condition(value))
 022            {
 023                NotEmpty(parameterName, nameof(parameterName));
 24
 31        [ContractAnnotation("value:null => halt")]
 32        public static T NotNull<T>([NoEnumeration] T value, [InvokerParameterName] [NotNull] string parameterName)
 2933        {
 2934             if (ReferenceEquals(value, null))
 2934            if (ReferenceEquals(value, null))
 035            {
 036                NotEmpty(parameterName, nameof(parameterName));
 37
 47            [InvokerParameterName] [NotNull] string parameterName,
 48            [NotNull] string propertyName)
 049        {
 050             if (ReferenceEquals(value, null))
 050            if (ReferenceEquals(value, null))
 051            {
 052                NotEmpty(parameterName, nameof(parameterName));
 053                NotEmpty(propertyName, nameof(propertyName));
 063        {
 064            NotNull(value, parameterName);
 65
 066             if (value.Count == 0)
 066            if (value.Count == 0)
 067            {
 068                NotEmpty(parameterName, nameof(parameterName));
 69
 77        public static string NotEmpty(string value, [InvokerParameterName] [NotNull] string parameterName)
 278        {
 279            Exception e = null;
 280             if (ReferenceEquals(value, null))
 280            if (ReferenceEquals(value, null))
 081            {
 082                e = new ArgumentNullException(parameterName);
 083            }
 284             else if (value.Trim().Length == 0)
 284            else if (value.Trim().Length == 0)
 085            {
 086                e = new ArgumentException(CoreStrings.ArgumentIsEmpty(parameterName));
 087            }
 88
 289             if (e != null)
 289            if (e != null)
 090            {
 091                NotEmpty(parameterName, nameof(parameterName));
 92
 98
 99        public static string NullButNotEmpty(string value, [InvokerParameterName] [NotNull] string parameterName)
 0100        {
 0101             if (!ReferenceEquals(value, null)
 0101            if (!ReferenceEquals(value, null)
 0102                && (value.Length == 0))
 0103            {
 0104                NotEmpty(parameterName, nameof(parameterName));
 0114        {
 0115            NotNull(value, parameterName);
 116
 0117             if (value.Any(e => e == null))
 0117            if (value.Any(e => e == null))
 0118            {
 0119                NotEmpty(parameterName, nameof(parameterName));
 120
 126
 127        public static Type ValidEntityType(Type value, [InvokerParameterName] [NotNull] string parameterName)
 0128        {
 0129             if (!value.GetTypeInfo().IsClass)
 0129            if (!value.GetTypeInfo().IsClass)
 0130            {
 0131                NotEmpty(parameterName, nameof(parameterName));
 132
 139}
-
+
diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm similarity index 79% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm index 9458e6cf..12cab635 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Validation.CoreStrings - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Validation.CoreStrings Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs Covered lines:0 Uncovered lines:12 Coverable lines:12 @@ -25,16 +26,16 @@

Summary

Metrics

- + - - - - + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ArgumentPropertyNull(...)1000
ArgumentIsEmpty(...)1000
InvalidEntityType(...)1000
CollectionArgumentIsEmpty(...)1000
ArgumentPropertyNull(...)0000
ArgumentIsEmpty(...)0000
InvalidEntityType(...)0000
CollectionArgumentIsEmpty(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs

@@ -81,14 +82,14 @@

#LineLine coverage
 41}
-
+
diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm similarity index 80% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm index 3ff6412e..8e40c549 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm @@ -3,6 +3,7 @@ + System.Reflection.CustomIntrospectionExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Reflection.CustomIntrospectionExtensions Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs Covered lines:0 Uncovered lines:3 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetGenericTypeArguments(...)1000
GetGenericTypeArguments(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs

@@ -76,11 +77,11 @@

#LineLine coverage
 39}
-
+
diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm similarity index 78% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm index 7522e7e6..e13298b1 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm @@ -3,6 +3,7 @@ + System.Reflection.CustomTypeBuilderExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Reflection.CustomTypeBuilderExtensions Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs Covered lines:0 Uncovered lines:3 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
CreateType(...)1000
CreateType(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs

@@ -72,11 +73,11 @@

#LineLine coverage
 35}
-
+
diff --git a/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm new file mode 100644 index 00000000..b6998c72 --- /dev/null +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm @@ -0,0 +1,102 @@ + + + + + + +Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions
Assembly:Microsoft.EntityFrameworkCore.DynamicLinq
File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\DynamicFunctions.cs
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:51
Line coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
Like(...)0000
Like(...)0000
+

File(s)

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\DynamicFunctions.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System.Linq.Dynamic.Core.CustomTypeProviders;
 2
 3namespace Microsoft.EntityFrameworkCore.DynamicLinq
 4{
 5    /// <summary>
 6    /// DynamicFunctions (EF.Functions)
 7    /// </summary>
 8    [DynamicLinqType]
 9    public static class DynamicFunctions
 10    {
 11#if NETSTANDARD2_0
 12        /// <summary>
 13        ///     <para>
 14        ///         An implementation of the SQL LIKE operation. On relational databases this is usually directly
 15        ///         translated to SQL.
 16        ///     </para>
 17        ///     <para>
 18        ///         Note that if this function is translated into SQL, then the semantics of the comparison will
 19        ///         depend on the database configuration. In particular, it may be either case-sensitive or
 20        ///         case-insensitive. If this function is evaluated on the client, then it will always use
 21        ///         a case-insensitive comparison.
 22        ///     </para>
 23        /// </summary>
 24        /// <param name="matchExpression">The string that is to be matched.</param>
 25        /// <param name="pattern">The pattern which may involve wildcards %,_,[,],^.</param>
 26        /// <returns>true if there is a match.</returns>
 027        public static bool Like(string matchExpression, string pattern) => EF.Functions.Like(matchExpression, pattern);
 28
 29        /// <summary>
 30        ///     <para>
 31        ///         An implementation of the SQL LIKE operation. On relational databases this is usually directly
 32        ///         translated to SQL.
 33        ///     </para>
 34        ///     <para>
 35        ///         Note that if this function is translated into SQL, then the semantics of the comparison will
 36        ///         depend on the database configuration. In particular, it may be either case-sensitive or
 37        ///         case-insensitive. If this function is evaluated on the client, then it will always use
 38        ///         a case-insensitive comparison.
 39        ///     </para>
 40        /// </summary>
 41        /// <param name="matchExpression">The string that is to be matched.</param>
 42        /// <param name="pattern">The pattern which may involve wildcards %,_,[,],^.</param>
 43        /// <param name="escapeCharacter">
 44        ///     The escape character (as a single character string) to use in front of %,_,[,],^
 45        ///     if they are not used as wildcards.
 46        /// </param>
 47        /// <returns>true if there is a match.</returns>
 048        public static bool Like(string matchExpression, string pattern, string escapeCharacter) => EF.Functions.Like(mat
 49#endif
 50    }
 51}
+
+
+ + \ No newline at end of file diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm similarity index 95% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm index 7be90852..b74e50dc 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm @@ -3,6 +3,7 @@ + Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions - Coverage Report
@@ -15,47 +16,47 @@

Summary

Class:Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\EFDynamicQueryableExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\EFDynamicQueryableExtensions.cs Covered lines:96 Uncovered lines:42 Coverable lines:138 Total lines:654 Line coverage:69.5% -Branch coverage:50% +Branch coverage:58.3%

Metrics

- + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
OptimizeExpression(...)3458.3360
AnyAsync(...)10100100
AnyAsync(...)10100100
AnyAsync(...)10100100
CountAsync(...)1000
CountAsync(...)10100100
CountAsync(...)10100100
FirstAsync(...)10100100
FirstAsync(...)10100100
FirstAsync(...)10100100
FirstOrDefaultAsync(...)10100100
FirstOrDefaultAsync(...)10100100
FirstOrDefaultAsync(...)10100100
LastAsync(...)1000
LastAsync(...)1000
LastAsync(...)1000
LastOrDefaultAsync(...)1000
LastOrDefaultAsync(...)1000
LastOrDefaultAsync(...)1000
ExecuteAsync(...)3491.6760
ExecuteAsync(...)1000
ExecuteAsync(...)3288.8966.67
GetMethod(...)10100100
.cctor()10100100
OptimizeExpression(...)005835
AnyAsync(...)0010
AnyAsync(...)0010
AnyAsync(...)0010
CountAsync(...)0000
CountAsync(...)0010
CountAsync(...)0010
FirstAsync(...)0010
FirstAsync(...)0010
FirstAsync(...)0010
FirstOrDefaultAsync(...)0010
FirstOrDefaultAsync(...)0010
FirstOrDefaultAsync(...)0010
LastAsync(...)0000
LastAsync(...)0000
LastAsync(...)0000
LastOrDefaultAsync(...)0000
LastOrDefaultAsync(...)0000
LastOrDefaultAsync(...)0000
ExecuteAsync(...)0091775
ExecuteAsync(...)0000
ExecuteAsync(...)009175
GetMethod(...)0050
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\EFDynamicQueryableExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\Microsoft.EntityFrameworkCore.DynamicLinq\EFDynamicQueryableExtensions.cs

@@ -92,12 +93,12 @@

- + - + @@ -666,9 +667,9 @@

- + - + @@ -691,9 +692,9 @@

- + - + @@ -715,35 +716,34 @@

#LineLine coverage
 31
 32        private static Expression OptimizeExpression(Expression expression)
 1433        {
 1434             if (ExtensibilityPoint.QueryOptimizer != null)
 1434            if (ExtensibilityPoint.QueryOptimizer != null)
 1435            {
 1436                var optimized = ExtensibilityPoint.QueryOptimizer(expression);
 37
 38#if !(WINDOWS_APP45x || SILVERLIGHT)
 1439                 if (optimized != expression)
 1439                if (optimized != expression)
 040                {
 041                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression before : {0}", expression);
 042                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression after  : {0}", optimized);
 605            var provider = source.Provider as IDbAsyncQueryProvider;
 606#endif
 607
 8608             if (provider != null)
 8608            if (provider != null)
 8609            {
 8610                 if (operatorMethodInfo.IsGenericMethod)
 8610                if (operatorMethodInfo.IsGenericMethod)
 8611                {
 8612                    operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 8613                }
 630            var provider = source.Provider as IDbAsyncQueryProvider;
 631#endif
 632
 6633             if (provider != null)
 6633            if (provider != null)
 6634            {
 6635                operatorMethodInfo
 6635                operatorMethodInfo
 6636                    = operatorMethodInfo.GetGenericArguments().Length == 2
 6637                        ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(TResult))
 6638                        : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 654}
-
+

Methods/Properties

-.cctor()
-OptimizeExpression(System.Linq.Expressions.Expression)
-AnyAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-AnyAsync(System.Linq.IQueryable,System.String,System.Object[])
-AnyAsync(System.Linq.IQueryable,System.String,System.Threading.CancellationToken,System.Object[])
-CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-CountAsync(System.Linq.IQueryable,System.String,System.Object[])
-CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
-FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-FirstAsync(System.Linq.IQueryable,System.String,System.Object[])
-FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
-FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-FirstOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[])
-FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
-LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-LastAsync(System.Linq.IQueryable,System.String,System.Object[])
-LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
-LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
-LastOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[])
-LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
-ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Threading.CancellationToken)
-ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Threading.CancellationToken)
-ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression,System.Threading.CancellationToken)
-GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>)
-GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>)
+.cctor()
+OptimizeExpression(System.Linq.Expressions.Expression)
+AnyAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+AnyAsync(System.Linq.IQueryable,System.String,System.Object[])
+AnyAsync(System.Linq.IQueryable,System.String,System.Threading.CancellationToken,System.Object[])
+CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+CountAsync(System.Linq.IQueryable,System.String,System.Object[])
+CountAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
+FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+FirstAsync(System.Linq.IQueryable,System.String,System.Object[])
+FirstAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
+FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+FirstOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[])
+FirstOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
+LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+LastAsync(System.Linq.IQueryable,System.String,System.Object[])
+LastAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
+LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken)
+LastOrDefaultAsync(System.Linq.IQueryable,System.String,System.Object[])
+LastOrDefaultAsync(System.Linq.IQueryable,System.Threading.CancellationToken,System.String,System.Object[])
+ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Threading.CancellationToken)
+ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression,System.Threading.CancellationToken)
+ExecuteAsync(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression,System.Threading.CancellationToken)
+GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>)

diff --git a/report/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm similarity index 80% rename from report/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm rename to report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm index 5788297a..23b77723 100644 --- a/report/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm +++ b/report/coverlet/Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions Assembly:Microsoft.EntityFrameworkCore.DynamicLinq -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs Covered lines:0 Uncovered lines:22 Coverable lines:22 @@ -26,14 +27,14 @@

Summary

Metrics

- + - - + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
IsLinqToObjects(...)1000
IsProviderEnumerableQuery(...)4800
IsLinqToObjects(...)0000
IsProviderEnumerableQuery(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs

@@ -66,16 +67,16 @@

- + - + - + @@ -90,12 +91,12 @@

#LineLine coverage
 27#else
 028            bool isLinqToObjects = baseType == typeof(EnumerableQuery);
 29#endif
 030             if (!isLinqToObjects)
 030            if (!isLinqToObjects)
 031            {
 32                // add support for https://github.com/StefH/QueryInterceptor.Core, version 1.0.1 and up
 033                 if (baseType.Name == "QueryTranslatorProvider")
 033                if (baseType.Name == "QueryTranslatorProvider")
 034                {
 35                    try
 036                    {
 037                        PropertyInfo property = baseType.GetProperty("OriginalProvider");
 038                        IQueryProvider originalProvider = property.GetValue(provider, null) as IQueryProvider;
 039                         return originalProvider != null && IsProviderEnumerableQuery(originalProvider);
 039                        return originalProvider != null && IsProviderEnumerableQuery(originalProvider);
 40                    }
 041                    catch
 042                    {
 51}
-
+
diff --git a/report/coverlet/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm b/report/coverlet/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm new file mode 100644 index 00000000..af5ed800 --- /dev/null +++ b/report/coverlet/System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm @@ -0,0 +1,176 @@ + + + + + + +System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider
Assembly:System.Linq.Dynamic.Core
File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\AbstractDynamicLinqCustomTypeProvider.cs
Covered lines:34
Uncovered lines:4
Coverable lines:38
Total lines:122
Line coverage:89.4%
Branch coverage:94.1%
+

Metrics

+ + + + + + + +
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
FindTypesMarkedWithDynamicLinqTypeAttribute(...)0011
ResolveType(...)0091775
GetAssemblyTypes()00851
+

File(s)

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\AbstractDynamicLinqCustomTypeProvider.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using JetBrains.Annotations;
 2using System.Collections.Generic;
 3using System.Reflection;
 4using System.Linq.Dynamic.Core.Validation;
 5
 6namespace System.Linq.Dynamic.Core.CustomTypeProviders
 7{
 8    /// <summary>
 9    /// The abstract DynamicLinqCustomTypeProvider which is used by the <see cref="IDynamicLinkCustomTypeProvider"/> and
 10    /// </summary>
 11    public abstract class AbstractDynamicLinqCustomTypeProvider
 12    {
 13        /// <summary>
 14        /// Finds the types marked with DynamicLinqTypeAttribute.
 15        /// </summary>
 16        /// <param name="assemblies">The assemblies to process.</param>
 17        /// <returns>IEnumerable{Type}</returns>
 18        protected IEnumerable<Type> FindTypesMarkedWithDynamicLinqTypeAttribute([NotNull] IEnumerable<Assembly> assembli
 2619        {
 2620            Check.NotNull(assemblies, nameof(assemblies));
 21#if !NET35
 545222            assemblies = assemblies.Where(x => !x.IsDynamic);
 23#endif
 2624            var definedTypes = GetAssemblyTypes(assemblies);
 25
 26#if (WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 64969127            return definedTypes.Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(DynamicLinqTypeAttribut
 28#else
 29            return definedTypes.Where(x => x.GetCustomAttributes(typeof(DynamicLinqTypeAttribute), false).Any());
 30#endif
 2631        }
 32
 33        /// <summary>
 34        /// Resolve any type which is registered in the current application domain.
 35        /// </summary>
 36        /// <param name="assemblies">The assemblies to inspect.</param>
 37        /// <param name="typeName">The typename to resolve.</param>
 38        /// <returns>A resolved <see cref="Type"/> or null when not found.</returns>
 39        protected Type ResolveType([NotNull] IEnumerable<Assembly> assemblies, [NotNull] string typeName)
 240        {
 241            Check.NotNull(assemblies, nameof(assemblies));
 242            Check.NotEmpty(typeName, nameof(typeName));
 43
 27644            foreach (Assembly assembly in assemblies)
 13645            {
 13646                Type resolvedType = assembly.GetType(typeName, false, true);
 13647                if (resolvedType != null)
 248                {
 249                    return resolvedType;
 50                }
 13451            }
 52
 053            return null;
 254        }
 55
 56#if (WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 57        /// <summary>
 58        /// Gets the assembly types in an Exception friendly way.
 59        /// </summary>
 60        /// <param name="assemblies">The assemblies to process.</param>
 61        /// <returns>IEnumerable{Type}</returns>
 62        protected IEnumerable<TypeInfo> GetAssemblyTypes([NotNull] IEnumerable<Assembly> assemblies)
 2663        {
 2664            Check.NotNull(assemblies, nameof(assemblies));
 65
 1083966            foreach (var assembly in assemblies)
 538067            {
 538068                IEnumerable<TypeInfo> definedTypes = null;
 69
 70                try
 538571                {
 538372                    definedTypes = assembly.DefinedTypes;
 537373                }
 074                catch
 075                {
 76                    // Ignore error
 077                }
 78
 537779                if (definedTypes != null)
 537580                {
 92562981                    foreach (var definedType in definedTypes)
 45481782                    {
 45501783                        yield return definedType;
 45494684                    }
 538385                }
 538186            }
 2687        }
 88#else
 89        /// <summary>
 90        /// Gets the assembly types in an Exception friendly way.
 91        /// </summary>
 92        /// <param name="assemblies">The assemblies to process.</param>
 93        /// <returns>IEnumerable{Type}</returns>
 94        protected IEnumerable<Type> GetAssemblyTypes([NotNull] IEnumerable<Assembly> assemblies)
 95        {
 96            Check.NotNull(assemblies, nameof(assemblies));
 97
 98            foreach (var assembly in assemblies)
 99            {
 100                IEnumerable<Type> definedTypes = null;
 101
 102                try
 103                {
 104                    definedTypes = assembly.GetTypes();
 105                }
 106                catch
 107                {
 108                    // Ignore error
 109                }
 110
 111                if (definedTypes != null)
 112                {
 113                    foreach (var definedType in definedTypes)
 114                    {
 115                        yield return definedType;
 116                    }
 117                }
 118            }
 119        }
 120#endif
 121    }
 122}
+
+
+ + \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm b/report/coverlet/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm similarity index 73% rename from report/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm rename to report/coverlet/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm index 111a6349..360c59cb 100644 --- a/report/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.AssemblyBuilderFactory - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.AssemblyBuilderFactory Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\AssemblyBuilderFactory.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\AssemblyBuilderFactory.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
DefineDynamicAssembly(...)10100100
DefineDynamicAssembly(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\AssemblyBuilderFactory.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\AssemblyBuilderFactory.cs

@@ -62,11 +63,11 @@

#LineLine coverage
 25#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_Check.htm b/report/coverlet/System.Linq.Dynamic.Core_Check.htm similarity index 75% rename from report/System.Linq.Dynamic.Core_Check.htm rename to report/coverlet/System.Linq.Dynamic.Core_Check.htm index 7ae368bb..8d3d09ed 100644 --- a/report/System.Linq.Dynamic.Core_Check.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_Check.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Validation.Check - Coverage Report
@@ -15,31 +16,31 @@

Summary

Class:System.Linq.Dynamic.Core.Validation.Check Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs -Covered lines:39 -Uncovered lines:32 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs +Covered lines:34 +Uncovered lines:37 Coverable lines:71 Total lines:139 -Line coverage:54.9% -Branch coverage:55% +Line coverage:47.8% +Branch coverage:50%

Metrics

- + - - - - - - - - + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
Condition(...)2266.6766.67
NotNull(...)22100100
NotNull(...)2200
NotEmpty(...)2262.566.67
NotEmpty(...)48100100
NullButNotEmpty(...)3200
HasNoNulls(...)3262.566.67
ValidEntityType(...)2200
Condition(...)006675
NotNull(...)0011
NotNull(...)0000
NotEmpty(...)0000
NotEmpty(...)0011
NullButNotEmpty(...)0000
HasNoNulls(...)0062575
ValidEntityType(...)0000

File(s)

-

C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\Check.cs

@@ -59,32 +60,32 @@

- - - + + + - + - - + + - - + + - - + + @@ -92,7 +93,7 @@

- + @@ -105,45 +106,45 @@

- - + + - + - - + + - - - + + + - + - + - - + + - + @@ -156,22 +157,22 @@

- - + + - + - - + + - + @@ -184,18 +185,18 @@

#LineLine coverage
 14    {
 15        [ContractAnnotation("value:null => halt")]
 16        public static T Condition<T>([NoEnumeration] T value, [NotNull] Predicate<T> condition, [InvokerParameterName] [
 37417        {
 37418            NotNull(condition, nameof(condition));
 37419            NotNull(value, nameof(value));
 4817        {
 4818            NotNull(condition, nameof(condition));
 4819            NotNull(value, nameof(value));
 20
 37421             if (!condition(value))
 4821            if (!condition(value))
 022            {
 023                NotEmpty(parameterName, nameof(parameterName));
 24
 025                throw new ArgumentOutOfRangeException(parameterName);
 26            }
 27
 37428            return value;
 37429        }
 4828            return value;
 4829        }
 30
 31        [ContractAnnotation("value:null => halt")]
 32        public static T NotNull<T>([NoEnumeration] T value, [InvokerParameterName] [NotNull] string parameterName)
 279233        {
 279234             if (ReferenceEquals(value, null))
 2726233        {
 2726234            if (ReferenceEquals(value, null))
 535            {
 536                NotEmpty(parameterName, nameof(parameterName));
 37
 538                throw new ArgumentNullException(parameterName);
 39            }
 40
 278741            return value;
 278742        }
 2725741            return value;
 2725742        }
 43
 44        [ContractAnnotation("value:null => halt")]
 45        public static T NotNull<T>(
 47            [InvokerParameterName] [NotNull] string parameterName,
 48            [NotNull] string propertyName)
 049        {
 050             if (ReferenceEquals(value, null))
 050            if (ReferenceEquals(value, null))
 051            {
 052                NotEmpty(parameterName, nameof(parameterName));
 053                NotEmpty(propertyName, nameof(propertyName));
 60
 61        [ContractAnnotation("value:null => halt")]
 62        public static IList<T> NotEmpty<T>(IList<T> value, [InvokerParameterName] [NotNull] string parameterName)
 32863        {
 32864            NotNull(value, parameterName);
 063        {
 064            NotNull(value, parameterName);
 65
 32866             if (value.Count == 0)
 066            if (value.Count == 0)
 067            {
 068                NotEmpty(parameterName, nameof(parameterName));
 69
 070                throw new ArgumentException(CoreStrings.CollectionArgumentIsEmpty(parameterName));
 71            }
 72
 32873            return value;
 32874        }
 073            return value;
 074        }
 75
 76        [ContractAnnotation("value:null => halt")]
 77        public static string NotEmpty(string value, [InvokerParameterName] [NotNull] string parameterName)
 118678        {
 118679            Exception e = null;
 118680             if (ReferenceEquals(value, null))
 215678        {
 215679            Exception e = null;
 215680            if (ReferenceEquals(value, null))
 681            {
 682                e = new ArgumentNullException(parameterName);
 683            }
 118084             else if (value.Trim().Length == 0)
 215084            else if (value.Trim().Length == 0)
 1285            {
 1286                e = new ArgumentException(CoreStrings.ArgumentIsEmpty(parameterName));
 1287            }
 88
 118689             if (e != null)
 215689            if (e != null)
 1890            {
 1891                NotEmpty(parameterName, nameof(parameterName));
 92
 1893                throw e;
 94            }
 95
 116896            return value;
 116897        }
 213896            return value;
 213897        }
 98
 99        public static string NullButNotEmpty(string value, [InvokerParameterName] [NotNull] string parameterName)
 0100        {
 0101             if (!ReferenceEquals(value, null)
 0101            if (!ReferenceEquals(value, null)
 0102                && (value.Length == 0))
 0103            {
 0104                NotEmpty(parameterName, nameof(parameterName));
 111
 112        public static IList<T> HasNoNulls<T>(IList<T> value, [InvokerParameterName] [NotNull] string parameterName)
 113            where T : class
 36114        {
 36115            NotNull(value, parameterName);
 530114        {
 530115            NotNull(value, parameterName);
 116
 114117             if (value.Any(e => e == null))
 1119117            if (value.Any(e => e == null))
 0118            {
 0119                NotEmpty(parameterName, nameof(parameterName));
 120
 0121                throw new ArgumentException(parameterName);
 122            }
 123
 36124            return value;
 36125        }
 530124            return value;
 530125        }
 126
 127        public static Type ValidEntityType(Type value, [InvokerParameterName] [NotNull] string parameterName)
 0128        {
 0129             if (!value.GetTypeInfo().IsClass)
 0129            if (!value.GetTypeInfo().IsClass)
 0130            {
 0131                NotEmpty(parameterName, nameof(parameterName));
 132
 139}
-
+
diff --git a/report/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm similarity index 63% rename from report/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm index 3e9b7b3e..a2b7fc1c 100644 --- a/report/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ConstantExpressionHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ConstantExpressionHelper.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ConstantExpressionHelper.cs Covered lines:14 Uncovered lines:0 Coverable lines:14 @@ -26,15 +27,15 @@

Summary

Metrics

- + - - - + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
TryGetText(...)10100100
CreateLiteral(...)22100100
.cctor()10100100
TryGetText(...)0010
CreateLiteral(...)0011
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ConstantExpressionHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ConstantExpressionHelper.cs

@@ -49,33 +50,33 @@

- - - + + + - - - - + + + + - - - + + + - - + +
#LineLine coverage
 19        private static readonly ConcurrentDictionary<Expression, string> Literals = new ConcurrentDictionary<Expression,
 10
 11        public static bool TryGetText(Expression expression, out string text)
 78712        {
 78713            return Literals.TryGetValue(expression, out text);
 78714        }
 78512        {
 78513            return Literals.TryGetValue(expression, out text);
 78514        }
 15
 16        public static Expression CreateLiteral(object value, string text)
 25917        {
 25918             if (!Expressions.ContainsKey(value))
 7619            {
 7620                ConstantExpression constantExpression = Expression.Constant(value);
 27817        {
 27818            if (!Expressions.ContainsKey(value))
 8719            {
 8720                ConstantExpression constantExpression = Expression.Constant(value);
 21
 7622                Expressions.TryAdd(value, constantExpression);
 7623                Literals.TryAdd(constantExpression, text);
 7624            }
 8722                Expressions.TryAdd(value, constantExpression);
 8723                Literals.TryAdd(constantExpression, text);
 8724            }
 25
 25926            return Expressions[value];
 25927        }
 27826            return Expressions[value];
 27827        }
 28    }
 29}
-
+
diff --git a/report/System.Linq.Dynamic.Core_Constants.htm b/report/coverlet/System.Linq.Dynamic.Core_Constants.htm similarity index 59% rename from report/System.Linq.Dynamic.Core_Constants.htm rename to report/coverlet/System.Linq.Dynamic.Core_Constants.htm index ca9b1114..12386d45 100644 --- a/report/System.Linq.Dynamic.Core_Constants.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_Constants.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.Constants - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.Constants Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\Constants.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\Constants.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()10100100
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\Constants.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\Constants.cs

@@ -48,11 +49,11 @@

#LineLine coverage
 11}
-
+

Methods/Properties

-.cctor()
+.cctor()

diff --git a/report/System.Linq.Dynamic.Core_CoreStrings.htm b/report/coverlet/System.Linq.Dynamic.Core_CoreStrings.htm similarity index 76% rename from report/System.Linq.Dynamic.Core_CoreStrings.htm rename to report/coverlet/System.Linq.Dynamic.Core_CoreStrings.htm index df8aaeb8..c2fd059b 100644 --- a/report/System.Linq.Dynamic.Core_CoreStrings.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_CoreStrings.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Validation.CoreStrings - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Validation.CoreStrings Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs Covered lines:3 Uncovered lines:9 Coverable lines:12 @@ -25,16 +26,16 @@

Summary

Metrics

- + - - - - + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ArgumentPropertyNull(...)1000
ArgumentIsEmpty(...)10100100
InvalidEntityType(...)1000
CollectionArgumentIsEmpty(...)1000
ArgumentPropertyNull(...)0000
ArgumentIsEmpty(...)0010
InvalidEntityType(...)0000
CollectionArgumentIsEmpty(...)0000

File(s)

-

C:\Users\Stef\Documents\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Validation\CoreStrings.cs

@@ -51,7 +52,7 @@

- + @@ -59,7 +60,7 @@

- + @@ -67,7 +68,7 @@

- + @@ -75,20 +76,20 @@

- +
#LineLine coverage
 11        /// </summary>
 12        public static string ArgumentPropertyNull([CanBeNull] string property, [CanBeNull] string argument)
 013        {
 014            return string.Format(CultureInfo.CurrentCulture, $"The property '{property}' of the argument '{argument}' ca
 014            return string.Format(CultureInfo.CurrentCulture, "The property '{0}' of the argument '{1}' cannot be null.",
 015        }
 16
 17        /// <summary>
 19        /// </summary>
 20        public static string ArgumentIsEmpty([CanBeNull] string argumentName)
 1221        {
 1222            return string.Format(CultureInfo.CurrentCulture, $"The string argument '{argumentName}' cannot be empty.", a
 1222            return string.Format(CultureInfo.CurrentCulture, "The string argument '{0}' cannot be empty.", argumentName)
 1223        }
 24
 25        /// <summary>
 27        /// </summary>
 28        public static string InvalidEntityType([CanBeNull] Type type, [CanBeNull] string argumentName)
 029        {
 030            return string.Format(CultureInfo.CurrentCulture, $"The entity type '{type}' provided for the argument '{argu
 030            return string.Format(CultureInfo.CurrentCulture, "The entity type '{0}' provided for the argument '{1}' must
 031        }
 32
 33        /// <summary>
 35        /// </summary>
 36        public static string CollectionArgumentIsEmpty([CanBeNull] string argumentName)
 037        {
 038            return string.Format(CultureInfo.CurrentCulture, $"The collection argument '{argumentName}' must contain at 
 038            return string.Format(CultureInfo.CurrentCulture, "The collection argument '{0}' must contain at least one el
 039        }
 40    }
 41}
-
+
diff --git a/report/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm similarity index 78% rename from report/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm index 5388fc60..d8847634 100644 --- a/report/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm @@ -3,6 +3,7 @@ + System.Reflection.CustomIntrospectionExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Reflection.CustomIntrospectionExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetGenericTypeArguments(...)10100100
GetGenericTypeArguments(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomIntrospectionExtensions.cs

@@ -68,19 +69,19 @@

- - - + + +
#LineLine coverage
 31        }
 32#else
 33        public static Type[] GetGenericTypeArguments(this TypeInfo typeInfo)
 382334        {
 382335            return typeInfo.GenericTypeArguments;
 382336        }
 376234        {
 376235            return typeInfo.GenericTypeArguments;
 376236        }
 37#endif
 38    }
 39}
-
+
diff --git a/report/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm similarity index 76% rename from report/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm index ed29ebe1..121b6d48 100644 --- a/report/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm @@ -3,6 +3,7 @@ + System.Reflection.CustomTypeBuilderExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Reflection.CustomTypeBuilderExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
CreateType(...)10100100
CreateType(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Compatibility\CustomTypeBuilderExtensions.cs

@@ -44,9 +45,9 @@

- - - + + + @@ -72,11 +73,11 @@

#LineLine coverage
 7    {
 8#if !(NET35 || NET40 || SILVERLIGHT || WPSL || UAP10_0)
 9        public static Type CreateType(this TypeBuilder tb)
 3010        {
 3011            return tb.CreateTypeInfo().AsType();
 3012        }
 3310        {
 3311            return tb.CreateTypeInfo().AsType();
 3312        }
 13#endif
 14
 15#if NET35 || NET40 || SILVERLIGHT || WPSL
 35}
-
+
diff --git a/report/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm similarity index 82% rename from report/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm index 64ee9e5d..71764230 100644 --- a/report/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DefaultAssemblyHelper - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.DefaultAssemblyHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DefaultAssemblyHelper.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DefaultAssemblyHelper.cs Covered lines:0 Uncovered lines:2 Coverable lines:2 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetAssemblies()1000
GetAssemblies()0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DefaultAssemblyHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DefaultAssemblyHelper.cs

@@ -81,11 +82,11 @@

#LineLine coverage
 44}
-
+

Methods/Properties

-GetAssemblies()
+GetAssemblies()

diff --git a/report/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm b/report/coverlet/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm similarity index 54% rename from report/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm rename to report/coverlet/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm index 33fee4f5..abc7410e 100644 --- a/report/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider - Coverage Report
@@ -15,70 +16,74 @@

Summary

Class:System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\DefaultDynamicLinqCustomTypeProvider.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\DefaultDynamicLinqCustomTypeProvider.cs Covered lines:0 -Uncovered lines:9 -Coverable lines:9 -Total lines:34 +Uncovered lines:10 +Coverable lines:10 +Total lines:37 Line coverage:0% -Branch coverage:0%

Metrics

- + - - + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetCustomTypes()2200
.ctor()1000
GetCustomTypes()0000
ResolveType(...)0000
.ctor()0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\DefaultDynamicLinqCustomTypeProvider.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\CustomTypeProviders\DefaultDynamicLinqCustomTypeProvider.cs

- - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + +
#LineLine coverage
 1#if !(WINDOWS_APP || UAP10_0)
 2using System.Collections.Generic;
 3using System.Reflection;
 4
 5namespace System.Linq.Dynamic.Core.CustomTypeProviders
 6{
 7    /// <summary>
 8    /// The default <see cref="IDynamicLinkCustomTypeProvider"/>. Scans the current AppDomain for all types marked with 
 9    /// </summary>
 10    public class DefaultDynamicLinqCustomTypeProvider : AbstractDynamicLinqCustomTypeProvider, IDynamicLinkCustomTypePro
 11    {
 012        private readonly IAssemblyHelper _assemblyHelper = new DefaultAssemblyHelper();
 13        private HashSet<Type> _customTypes;
 14
 15        /// <summary>
 16        /// Returns a list of custom types that System.Linq.Dynamic.Core will understand.
 17        /// </summary>
 18        /// <returns>
 19        /// A <see cref="System.Collections.Generic.HashSet&lt;Type&gt;" /> list of custom types.
 20        /// </returns>
 3using System.Linq.Dynamic.Core.Validation;
 4using System.Reflection;
 5
 6namespace System.Linq.Dynamic.Core.CustomTypeProviders
 7{
 8    /// <summary>
 9    /// The default <see cref="IDynamicLinkCustomTypeProvider"/>.
 10    /// Scans the current AppDomain for all types marked with <see cref="DynamicLinqTypeAttribute"/>, and adds them as c
 11    ///
 12    /// Also provides functionality to resolve a Type in the current Application Domain.
 13    ///
 14    /// This class is used as default for full .NET Framework, so not for .NET Core
 15    /// </summary>
 16    public class DefaultDynamicLinqCustomTypeProvider : AbstractDynamicLinqCustomTypeProvider, IDynamicLinkCustomTypePro
 17    {
 018        private readonly IAssemblyHelper _assemblyHelper = new DefaultAssemblyHelper();
 19
 20        /// <inheritdoc cref="IDynamicLinkCustomTypeProvider.GetCustomTypes"/>
 21        public virtual HashSet<Type> GetCustomTypes()
 022        {
 023             if (_customTypes != null)
 024            {
 025                return _customTypes;
 26            }
 27
 028            IEnumerable<Assembly> assemblies = _assemblyHelper.GetAssemblies();
 029            _customTypes = new HashSet<Type>(FindTypesMarkedWithDynamicLinqTypeAttribute(assemblies));
 030            return _customTypes;
 031        }
 32    }
 33}
 34#endif
 023            IEnumerable<Assembly> assemblies = _assemblyHelper.GetAssemblies();
 024            return new HashSet<Type>(FindTypesMarkedWithDynamicLinqTypeAttribute(assemblies));
 025        }
 26
 27        /// <inheritdoc cref="IDynamicLinkCustomTypeProvider.ResolveType"/>
 28        public Type ResolveType(string typeName)
 029        {
 030            Check.NotEmpty(typeName, nameof(typeName));
 31
 032            IEnumerable<Assembly> assemblies = _assemblyHelper.GetAssemblies();
 033            return ResolveType(assemblies, typeName);
 034        }
 35    }
 36}
 37#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicClass.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicClass.htm similarity index 89% rename from report/System.Linq.Dynamic.Core_DynamicClass.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicClass.htm index 8b1d48bb..de8ef15d 100644 --- a/report/System.Linq.Dynamic.Core_DynamicClass.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicClass.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicClass - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicClass Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClass.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClass.cs Covered lines:5 Uncovered lines:60 Coverable lines:65 @@ -26,19 +27,19 @@

Summary

Metrics

- + - - - - - - - + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetDynamicPropertyValue(...)10100100
GetDynamicPropertyValue(...)1000
SetDynamicPropertyValue(...)1000
SetDynamicPropertyValue(...)1000
GetDynamicMemberNames()1000
TryGetMember(...)1000
TrySetMember(...)2200
GetDynamicPropertyValue(...)0010
GetDynamicPropertyValue(...)0000
SetDynamicPropertyValue(...)0000
SetDynamicPropertyValue(...)0000
GetDynamicMemberNames()0000
TryGetMember(...)0000
TrySetMember(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClass.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClass.cs

@@ -68,14 +69,14 @@

- + - + - + @@ -96,12 +97,12 @@

- - - + + + - - + + @@ -147,7 +148,7 @@

- + @@ -157,7 +158,7 @@

- + @@ -206,7 +207,7 @@

- + @@ -222,20 +223,20 @@

#LineLine coverage
 24        {
 25            get
 026            {
 027                 if (_propertiesDictionary == null)
 027                if (_propertiesDictionary == null)
 028                {
 029                    _propertiesDictionary = new Dictionary<string, object>();
 30
 031                    foreach (PropertyInfo pi in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
 031                    foreach (PropertyInfo pi in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
 032                    {
 033                        int parameters = pi.GetIndexParameters().Length;
 034                         if (parameters > 0)
 034                        if (parameters > 0)
 035                        {
 36                            // The property is an indexer, skip this.
 037                            continue;
 52        /// <param name="propertyName">Name of the property.</param>
 53        /// <returns>T</returns>
 54        public T GetDynamicPropertyValue<T>(string propertyName)
 5455        {
 5456            var type = GetType();
 5457            var propInfo = type.GetProperty(propertyName);
 1855        {
 1856            var type = GetType();
 1857            var propInfo = type.GetProperty(propertyName);
 58
 5459            return (T)propInfo.GetValue(this, null);
 5460        }
 1859            return (T)propInfo.GetValue(this, null);
 1860        }
 61
 62        /// <summary>
 63        /// Gets the dynamic property value by name.
 103        {
 104            get
 0105            {
 0106                 if (Properties.TryGetValue(name, out object result))
 0106                if (Properties.TryGetValue(name, out object result))
 0107                {
 0108                    return result;
 109                }
 113
 114            set
 0115            {
 0116                 if (Properties.ContainsKey(name))
 0116                if (Properties.ContainsKey(name))
 0117                {
 0118                    Properties[name] = value;
 0119                }
 162        public override bool TrySetMember(SetMemberBinder binder, object value)
 0163        {
 0164            string name = binder.Name;
 0165             if (Properties.ContainsKey(name))
 0165            if (Properties.ContainsKey(name))
 0166            {
 0167                Properties[name] = value;
 0168            }
 178#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicClassFactory.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicClassFactory.htm similarity index 69% rename from report/System.Linq.Dynamic.Core_DynamicClassFactory.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicClassFactory.htm index 3c976dbe..97b26694 100644 --- a/report/System.Linq.Dynamic.Core_DynamicClassFactory.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicClassFactory.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicClassFactory - Coverage Report
@@ -15,27 +16,27 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicClassFactory Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClassFactory.cs -Covered lines:204 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClassFactory.cs +Covered lines:205 Uncovered lines:15 -Coverable lines:219 -Total lines:390 +Coverable lines:220 +Total lines:388 Line coverage:93.1% -Branch coverage:79.4% +Branch coverage:88%

Metrics

- + - - - - + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()10100100
CreateType(...)266553692.578.79
GenerateKey(...)42100100
Escape(...)10100100
CreateType(...)0092187
GenerateKey(...)0011
Escape(...)0010
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClassFactory.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicClassFactory.cs

@@ -103,342 +104,340 @@

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 62
 163        private static int _index = -1;
 64
 65        /// <summary>
 66        /// The AssemblyName
 67        /// </summary>
 168        public static string DynamicAssemblyName = "System.Linq.Dynamic.Core.DynamicClasses, Version=1.0.0.0";
 69
 70        /// <summary>
 71        /// Initializes the <see cref="DynamicClassFactory"/> class.
 72        /// </summary>
 73        static DynamicClassFactory()
 174        {
 175            var assemblyName = new AssemblyName(DynamicAssemblyName);
 176            var assemblyBuilder = AssemblyBuilderFactory.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
 77
 178            ModuleBuilder = assemblyBuilder.DefineDynamicModule("System.Linq.Dynamic.Core.DynamicClasses");
 179        }
 80
 81        /// <summary>
 82        /// The CreateType method creates a new data class with a given set of public properties and returns the System.
 83        /// Data classes implement private instance variables and read/write property accessors for the specified proper
 84        /// Data classes are created in an in-memory assembly in the current application domain. All data classes inheri
 85        /// The dynamic expression parser uses the CreateClass methods to generate classes from data object initializers
 86        /// </summary>
 87        /// <param name="properties">The DynamicProperties</param>
 88        /// <param name="createParameterCtor">Create a constructor with parameters. Default set to true. Note that for L
 89        /// <returns>Type</returns>
 90        /// <example>
 91        /// <code>
 92        /// <![CDATA[
 93        /// DynamicProperty[] props = new DynamicProperty[] { new DynamicProperty("Name", typeof(string)), new DynamicPr
 94        /// Type type = DynamicClassFactory.CreateType(props);
 95        /// DynamicClass dynamicClass = Activator.CreateInstance(type) as DynamicClass;
 96        /// dynamicClass.SetDynamicProperty("Name", "Albert");
 97        /// dynamicClass.SetDynamicProperty("Birthday", new DateTime(1879, 3, 14));
 98        /// Console.WriteLine(dynamicClass);
 99        /// ]]>
 100        /// </code>
 101        /// </example>
 102        public static Type CreateType([NotNull] IList<DynamicProperty> properties, bool createParameterCtor = true)
 44103        {
 44104            Check.HasNoNulls(properties, nameof(properties));
 105
 136106            Type[] types = properties.Select(p => p.Type).ToArray();
 136107            string[] names = properties.Select(p => p.Name).ToArray();
 165        private static string DynamicAssemblyName = "System.Linq.Dynamic.Core.DynamicClasses, Version=1.0.0.0";
 166        private static string DynamicModuleName = "System.Linq.Dynamic.Core.DynamicClasses";
 67
 68        /// <summary>
 69        /// Initializes the <see cref="DynamicClassFactory"/> class.
 70        /// </summary>
 71        static DynamicClassFactory()
 172        {
 173            var assemblyName = new AssemblyName(DynamicAssemblyName);
 174            var assemblyBuilder = AssemblyBuilderFactory.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
 75
 176            ModuleBuilder = assemblyBuilder.DefineDynamicModule(DynamicModuleName);
 177        }
 78
 79        /// <summary>
 80        /// The CreateType method creates a new data class with a given set of public properties and returns the System.
 81        /// Data classes implement private instance variables and read/write property accessors for the specified proper
 82        /// Data classes are created in an in-memory assembly in the current application domain. All data classes inheri
 83        /// The dynamic expression parser uses the CreateClass methods to generate classes from data object initializers
 84        /// </summary>
 85        /// <param name="properties">The DynamicProperties</param>
 86        /// <param name="createParameterCtor">Create a constructor with parameters. Default set to true. Note that for L
 87        /// <returns>Type</returns>
 88        /// <example>
 89        /// <code>
 90        /// <![CDATA[
 91        /// DynamicProperty[] props = new DynamicProperty[] { new DynamicProperty("Name", typeof(string)), new DynamicPr
 92        /// Type type = DynamicClassFactory.CreateType(props);
 93        /// DynamicClass dynamicClass = Activator.CreateInstance(type) as DynamicClass;
 94        /// dynamicClass.SetDynamicProperty("Name", "Albert");
 95        /// dynamicClass.SetDynamicProperty("Birthday", new DateTime(1879, 3, 14));
 96        /// Console.WriteLine(dynamicClass);
 97        /// ]]>
 98        /// </code>
 99        /// </example>
 100        public static Type CreateType([NotNull] IList<DynamicProperty> properties, bool createParameterCtor = true)
 48101        {
 48102            Check.HasNoNulls(properties, nameof(properties));
 103
 147104            Type[] types = properties.Select(p => p.Type).ToArray();
 147105            string[] names = properties.Select(p => p.Name).ToArray();
 106
 48107            string key = GenerateKey(properties, createParameterCtor);
 108
 44109            string key = GenerateKey(properties, createParameterCtor);
 110
 111            Type type;
 44112             if (!GeneratedTypes.TryGetValue(key, out type))
 30113            {
 114                // We create only a single class at a time, through this lock
 115                // Note that this is a variant of the double-checked locking.
 116                // It is safe because we are using a thread safe class.
 30117                lock (GeneratedTypes)
 30118                {
 30119                     if (!GeneratedTypes.TryGetValue(key, out type))
 30120                    {
 30121                        int index = Interlocked.Increment(ref _index);
 109            Type type;
 48110            if (!GeneratedTypes.TryGetValue(key, out type))
 32111            {
 112                // We create only a single class at a time, through this lock
 113                // Note that this is a variant of the double-checked locking.
 114                // It is safe because we are using a thread safe class.
 32115                lock (GeneratedTypes)
 33116                {
 33117                    if (!GeneratedTypes.TryGetValue(key, out type))
 33118                    {
 33119                        int index = Interlocked.Increment(ref _index);
 120
 33121                        string name = names.Length != 0 ? $"<>f__AnonymousType{index}`{names.Length}" : $"<>f__Anonymous
 122
 30123                        string name = names.Length != 0 ? $"<>f__AnonymousType{index}`{names.Length}" : $"<>f__Anonymous
 124
 30125                        TypeBuilder tb = ModuleBuilder.DefineType(name, TypeAttributes.AnsiClass | TypeAttributes.Public
 30126                        tb.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 33123                        TypeBuilder tb = ModuleBuilder.DefineType(name, TypeAttributes.AnsiClass | TypeAttributes.Public
 33124                        tb.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 125
 126                        GenericTypeParameterBuilder[] generics;
 127
 128                        GenericTypeParameterBuilder[] generics;
 129
 30130                         if (names.Length != 0)
 30131                        {
 99132                            string[] genericNames = names.Select(genericName => $"<{genericName}>j__TPar").ToArray();
 30133                            generics = tb.DefineGenericParameters(genericNames);
 228134                            foreach (GenericTypeParameterBuilder b in generics)
 69135                            {
 69136                                b.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 69137                            }
 30138                        }
 139                        else
 0140                        {
 0141                            generics = new GenericTypeParameterBuilder[0];
 0142                        }
 33128                        if (names.Length != 0)
 33129                        {
 108130                            string[] genericNames = names.Select(genericName => $"<{genericName}>j__TPar").ToArray();
 33131                            generics = tb.DefineGenericParameters(genericNames);
 249132                            foreach (GenericTypeParameterBuilder b in generics)
 75133                            {
 75134                                b.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 75135                            }
 33136                        }
 137                        else
 0138                        {
 0139                            generics = new GenericTypeParameterBuilder[0];
 0140                        }
 141
 33142                        var fields = new FieldBuilder[names.Length];
 143
 30144                        var fields = new FieldBuilder[names.Length];
 145
 146                        // There are two for cycles because we want to have all the getter methods before all the other 
 198147                         for (int i = 0; i < names.Length; i++)
 69148                        {
 149                            // field
 69150                            fields[i] = tb.DefineField($"<{names[i]}>i__Field", generics[i].AsType(), FieldAttributes.Pr
 69151                            fields[i].SetCustomAttribute(DebuggerBrowsableAttributeBuilder);
 144                        // There are two for cycles because we want to have all the getter methods before all the other 
 216145                        for (int i = 0; i < names.Length; i++)
 75146                        {
 147                            // field
 75148                            fields[i] = tb.DefineField($"<{names[i]}>i__Field", generics[i].AsType(), FieldAttributes.Pr
 75149                            fields[i].SetCustomAttribute(DebuggerBrowsableAttributeBuilder);
 150
 75151                            PropertyBuilder property = tb.DefineProperty(names[i], PropertyAttributes.None, CallingConve
 152
 69153                            PropertyBuilder property = tb.DefineProperty(names[i], PropertyAttributes.None, CallingConve
 154
 155                            // getter
 69156                            MethodBuilder getter = tb.DefineMethod($"get_{names[i]}", MethodAttributes.Public | MethodAt
 69157                            getter.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 69158                            ILGenerator ilgeneratorGetter = getter.GetILGenerator();
 69159                            ilgeneratorGetter.Emit(OpCodes.Ldarg_0);
 69160                            ilgeneratorGetter.Emit(OpCodes.Ldfld, fields[i]);
 69161                            ilgeneratorGetter.Emit(OpCodes.Ret);
 69162                            property.SetGetMethod(getter);
 163
 164                            // setter
 69165                            MethodBuilder setter = tb.DefineMethod($"set_{names[i]}", MethodAttributes.Public | MethodAt
 69166                            setter.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 167
 168                            // workaround for https://github.com/dotnet/corefx/issues/7792
 69169                            setter.DefineParameter(1, ParameterAttributes.In, generics[i].Name);
 170
 69171                            ILGenerator ilgeneratorSetter = setter.GetILGenerator();
 69172                            ilgeneratorSetter.Emit(OpCodes.Ldarg_0);
 69173                            ilgeneratorSetter.Emit(OpCodes.Ldarg_1);
 69174                            ilgeneratorSetter.Emit(OpCodes.Stfld, fields[i]);
 69175                            ilgeneratorSetter.Emit(OpCodes.Ret);
 69176                            property.SetSetMethod(setter);
 69177                        }
 178
 179                        // ToString()
 30180                        MethodBuilder toString = tb.DefineMethod("ToString", MethodAttributes.Public | MethodAttributes.
 30181                        toString.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 30182                        ILGenerator ilgeneratorToString = toString.GetILGenerator();
 30183                        ilgeneratorToString.DeclareLocal(typeof(StringBuilder));
 30184                        ilgeneratorToString.Emit(OpCodes.Newobj, StringBuilderCtor);
 30185                        ilgeneratorToString.Emit(OpCodes.Stloc_0);
 186
 187                        // Equals
 30188                        MethodBuilder equals = tb.DefineMethod("Equals", MethodAttributes.Public | MethodAttributes.Virt
 30189                        equals.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 30190                        equals.DefineParameter(1, ParameterAttributes.In, "value");
 191
 30192                        ILGenerator ilgeneratorEquals = equals.GetILGenerator();
 30193                        ilgeneratorEquals.DeclareLocal(tb.AsType());
 30194                        ilgeneratorEquals.Emit(OpCodes.Ldarg_1);
 30195                        ilgeneratorEquals.Emit(OpCodes.Isinst, tb.AsType());
 30196                        ilgeneratorEquals.Emit(OpCodes.Stloc_0);
 30197                        ilgeneratorEquals.Emit(OpCodes.Ldloc_0);
 153                            // getter
 75154                            MethodBuilder getter = tb.DefineMethod($"get_{names[i]}", MethodAttributes.Public | MethodAt
 75155                            getter.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 75156                            ILGenerator ilgeneratorGetter = getter.GetILGenerator();
 75157                            ilgeneratorGetter.Emit(OpCodes.Ldarg_0);
 75158                            ilgeneratorGetter.Emit(OpCodes.Ldfld, fields[i]);
 75159                            ilgeneratorGetter.Emit(OpCodes.Ret);
 75160                            property.SetGetMethod(getter);
 161
 162                            // setter
 75163                            MethodBuilder setter = tb.DefineMethod($"set_{names[i]}", MethodAttributes.Public | MethodAt
 75164                            setter.SetCustomAttribute(CompilerGeneratedAttributeBuilder);
 165
 166                            // workaround for https://github.com/dotnet/corefx/issues/7792
 75167                            setter.DefineParameter(1, ParameterAttributes.In, generics[i].Name);
 168
 75169                            ILGenerator ilgeneratorSetter = setter.GetILGenerator();
 75170                            ilgeneratorSetter.Emit(OpCodes.Ldarg_0);
 75171                            ilgeneratorSetter.Emit(OpCodes.Ldarg_1);
 75172                            ilgeneratorSetter.Emit(OpCodes.Stfld, fields[i]);
 75173                            ilgeneratorSetter.Emit(OpCodes.Ret);
 75174                            property.SetSetMethod(setter);
 75175                        }
 176
 177                        // ToString()
 33178                        MethodBuilder toString = tb.DefineMethod("ToString", MethodAttributes.Public | MethodAttributes.
 33179                        toString.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 33180                        ILGenerator ilgeneratorToString = toString.GetILGenerator();
 33181                        ilgeneratorToString.DeclareLocal(typeof(StringBuilder));
 33182                        ilgeneratorToString.Emit(OpCodes.Newobj, StringBuilderCtor);
 33183                        ilgeneratorToString.Emit(OpCodes.Stloc_0);
 184
 185                        // Equals
 33186                        MethodBuilder equals = tb.DefineMethod("Equals", MethodAttributes.Public | MethodAttributes.Virt
 33187                        equals.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 33188                        equals.DefineParameter(1, ParameterAttributes.In, "value");
 189
 33190                        ILGenerator ilgeneratorEquals = equals.GetILGenerator();
 33191                        ilgeneratorEquals.DeclareLocal(tb.AsType());
 33192                        ilgeneratorEquals.Emit(OpCodes.Ldarg_1);
 33193                        ilgeneratorEquals.Emit(OpCodes.Isinst, tb.AsType());
 33194                        ilgeneratorEquals.Emit(OpCodes.Stloc_0);
 33195                        ilgeneratorEquals.Emit(OpCodes.Ldloc_0);
 196
 33197                        Label equalsLabel = ilgeneratorEquals.DefineLabel();
 198
 30199                        Label equalsLabel = ilgeneratorEquals.DefineLabel();
 200
 201                        // GetHashCode()
 30202                        MethodBuilder getHashCode = tb.DefineMethod("GetHashCode", MethodAttributes.Public | MethodAttri
 30203                        getHashCode.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 30204                        ILGenerator ilgeneratorGetHashCode = getHashCode.GetILGenerator();
 30205                        ilgeneratorGetHashCode.DeclareLocal(typeof(int));
 206
 30207                         if (names.Length == 0)
 0208                        {
 0209                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4_0);
 0210                        }
 211                        else
 30212                        {
 213                            // As done by Roslyn
 214                            // Note that initHash can vary, because string.GetHashCode() isn't "stable" for different co
 30215                            int initHash = 0;
 216
 198217                             for (int i = 0; i < names.Length; i++)
 69218                            {
 69219                                initHash = unchecked(initHash * (-1521134295) + fields[i].Name.GetHashCode());
 69220                            }
 221
 222                            // Note that the CSC seems to generate a different seed for every anonymous class
 30223                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, initHash);
 30224                        }
 225
 198226                         for (int i = 0; i < names.Length; i++)
 69227                        {
 69228                            Type equalityComparerT = EqualityComparer.MakeGenericType(generics[i].AsType());
 229
 230                            // Equals()
 69231                            MethodInfo equalityComparerTDefault = TypeBuilder.GetMethod(equalityComparerT, EqualityCompa
 69232                            MethodInfo equalityComparerTEquals = TypeBuilder.GetMethod(equalityComparerT, EqualityCompar
 233
 234                            // Illegal one-byte branch at position: 9. Requested branch was: 143.
 235                            // So replace OpCodes.Brfalse_S to OpCodes.Brfalse
 69236                            ilgeneratorEquals.Emit(OpCodes.Brfalse, equalsLabel);
 69237                            ilgeneratorEquals.Emit(OpCodes.Call, equalityComparerTDefault);
 69238                            ilgeneratorEquals.Emit(OpCodes.Ldarg_0);
 69239                            ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]);
 69240                            ilgeneratorEquals.Emit(OpCodes.Ldloc_0);
 69241                            ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]);
 69242                            ilgeneratorEquals.Emit(OpCodes.Callvirt, equalityComparerTEquals);
 243
 244                            // GetHashCode();
 69245                            MethodInfo equalityComparerTGetHashCode = TypeBuilder.GetMethod(equalityComparerT, EqualityC
 69246                            ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0);
 69247                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, -1521134295);
 69248                            ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0);
 69249                            ilgeneratorGetHashCode.Emit(OpCodes.Mul);
 69250                            ilgeneratorGetHashCode.Emit(OpCodes.Call, equalityComparerTDefault);
 69251                            ilgeneratorGetHashCode.Emit(OpCodes.Ldarg_0);
 69252                            ilgeneratorGetHashCode.Emit(OpCodes.Ldfld, fields[i]);
 69253                            ilgeneratorGetHashCode.Emit(OpCodes.Callvirt, equalityComparerTGetHashCode);
 69254                            ilgeneratorGetHashCode.Emit(OpCodes.Add);
 255
 256                            // ToString();
 69257                            ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 69258                            ilgeneratorToString.Emit(OpCodes.Ldstr, i == 0 ? $"{{ {names[i]} = " : $", {names[i]} = ");
 69259                            ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendString);
 69260                            ilgeneratorToString.Emit(OpCodes.Pop);
 69261                            ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 69262                            ilgeneratorToString.Emit(OpCodes.Ldarg_0);
 69263                            ilgeneratorToString.Emit(OpCodes.Ldfld, fields[i]);
 69264                            ilgeneratorToString.Emit(OpCodes.Box, generics[i].AsType());
 69265                            ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendObject);
 69266                            ilgeneratorToString.Emit(OpCodes.Pop);
 69267                        }
 268
 30269                         if (createParameterCtor)
 23270                        {
 271                            // .ctor default
 23272                            ConstructorBuilder constructorDef = tb.DefineConstructor(MethodAttributes.Public | MethodAtt
 23273                            constructorDef.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 274
 23275                            ILGenerator ilgeneratorConstructorDef = constructorDef.GetILGenerator();
 23276                            ilgeneratorConstructorDef.Emit(OpCodes.Ldarg_0);
 23277                            ilgeneratorConstructorDef.Emit(OpCodes.Call, ObjectCtor);
 23278                            ilgeneratorConstructorDef.Emit(OpCodes.Ret);
 279
 280                            // .ctor with params
 77281                            ConstructorBuilder constructor = tb.DefineConstructor(MethodAttributes.Public | MethodAttrib
 23282                            constructor.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 283
 23284                            ILGenerator ilgeneratorConstructor = constructor.GetILGenerator();
 23285                            ilgeneratorConstructor.Emit(OpCodes.Ldarg_0);
 23286                            ilgeneratorConstructor.Emit(OpCodes.Call, ObjectCtor);
 287
 154288                             for (int i = 0; i < names.Length; i++)
 54289                            {
 54290                                constructor.DefineParameter(i + 1, ParameterAttributes.None, names[i]);
 54291                                ilgeneratorConstructor.Emit(OpCodes.Ldarg_0);
 292
 54293                                 if (i == 0)
 23294                                {
 23295                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_1);
 23296                                }
 31297                                 else if (i == 1)
 16298                                {
 16299                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_2);
 16300                                }
 15301                                 else if (i == 2)
 6302                                {
 6303                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_3);
 6304                                }
 9305                                 else if (i < 255)
 9306                                {
 9307                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_S, (byte)(i + 1));
 9308                                }
 309                                else
 0310                                {
 311                                    // Ldarg uses a ushort, but the Emit only accepts short, so we use a unchecked(...),
 0312                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg, unchecked((short)(i + 1)));
 0313                                }
 314
 54315                                ilgeneratorConstructor.Emit(OpCodes.Stfld, fields[i]);
 54316                            }
 317
 23318                            ilgeneratorConstructor.Emit(OpCodes.Ret);
 23319                        }
 320
 321                        // Equals()
 30322                         if (names.Length == 0)
 0323                        {
 0324                            ilgeneratorEquals.Emit(OpCodes.Ldnull);
 199                        // GetHashCode()
 33200                        MethodBuilder getHashCode = tb.DefineMethod("GetHashCode", MethodAttributes.Public | MethodAttri
 33201                        getHashCode.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 33202                        ILGenerator ilgeneratorGetHashCode = getHashCode.GetILGenerator();
 33203                        ilgeneratorGetHashCode.DeclareLocal(typeof(int));
 204
 33205                        if (names.Length == 0)
 0206                        {
 0207                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4_0);
 0208                        }
 209                        else
 33210                        {
 211                            // As done by Roslyn
 212                            // Note that initHash can vary, because string.GetHashCode() isn't "stable" for different co
 33213                            int initHash = 0;
 214
 216215                            for (int i = 0; i < names.Length; i++)
 75216                            {
 75217                                initHash = unchecked(initHash * (-1521134295) + fields[i].Name.GetHashCode());
 75218                            }
 219
 220                            // Note that the CSC seems to generate a different seed for every anonymous class
 33221                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, initHash);
 33222                        }
 223
 216224                        for (int i = 0; i < names.Length; i++)
 75225                        {
 75226                            Type equalityComparerT = EqualityComparer.MakeGenericType(generics[i].AsType());
 227
 228                            // Equals()
 75229                            MethodInfo equalityComparerTDefault = TypeBuilder.GetMethod(equalityComparerT, EqualityCompa
 75230                            MethodInfo equalityComparerTEquals = TypeBuilder.GetMethod(equalityComparerT, EqualityCompar
 231
 232                            // Illegal one-byte branch at position: 9. Requested branch was: 143.
 233                            // So replace OpCodes.Brfalse_S to OpCodes.Brfalse
 75234                            ilgeneratorEquals.Emit(OpCodes.Brfalse, equalsLabel);
 75235                            ilgeneratorEquals.Emit(OpCodes.Call, equalityComparerTDefault);
 75236                            ilgeneratorEquals.Emit(OpCodes.Ldarg_0);
 75237                            ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]);
 75238                            ilgeneratorEquals.Emit(OpCodes.Ldloc_0);
 75239                            ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]);
 75240                            ilgeneratorEquals.Emit(OpCodes.Callvirt, equalityComparerTEquals);
 241
 242                            // GetHashCode();
 75243                            MethodInfo equalityComparerTGetHashCode = TypeBuilder.GetMethod(equalityComparerT, EqualityC
 75244                            ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0);
 75245                            ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, -1521134295);
 75246                            ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0);
 75247                            ilgeneratorGetHashCode.Emit(OpCodes.Mul);
 75248                            ilgeneratorGetHashCode.Emit(OpCodes.Call, equalityComparerTDefault);
 75249                            ilgeneratorGetHashCode.Emit(OpCodes.Ldarg_0);
 75250                            ilgeneratorGetHashCode.Emit(OpCodes.Ldfld, fields[i]);
 75251                            ilgeneratorGetHashCode.Emit(OpCodes.Callvirt, equalityComparerTGetHashCode);
 75252                            ilgeneratorGetHashCode.Emit(OpCodes.Add);
 253
 254                            // ToString();
 75255                            ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 75256                            ilgeneratorToString.Emit(OpCodes.Ldstr, i == 0 ? $"{{ {names[i]} = " : $", {names[i]} = ");
 75257                            ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendString);
 75258                            ilgeneratorToString.Emit(OpCodes.Pop);
 75259                            ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 75260                            ilgeneratorToString.Emit(OpCodes.Ldarg_0);
 75261                            ilgeneratorToString.Emit(OpCodes.Ldfld, fields[i]);
 75262                            ilgeneratorToString.Emit(OpCodes.Box, generics[i].AsType());
 75263                            ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendObject);
 75264                            ilgeneratorToString.Emit(OpCodes.Pop);
 75265                        }
 266
 33267                        if (createParameterCtor)
 26268                        {
 269                            // .ctor default
 26270                            ConstructorBuilder constructorDef = tb.DefineConstructor(MethodAttributes.Public | MethodAtt
 26271                            constructorDef.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 272
 26273                            ILGenerator ilgeneratorConstructorDef = constructorDef.GetILGenerator();
 26274                            ilgeneratorConstructorDef.Emit(OpCodes.Ldarg_0);
 26275                            ilgeneratorConstructorDef.Emit(OpCodes.Call, ObjectCtor);
 26276                            ilgeneratorConstructorDef.Emit(OpCodes.Ret);
 277
 278                            // .ctor with params
 86279                            ConstructorBuilder constructor = tb.DefineConstructor(MethodAttributes.Public | MethodAttrib
 26280                            constructor.SetCustomAttribute(DebuggerHiddenAttributeBuilder);
 281
 26282                            ILGenerator ilgeneratorConstructor = constructor.GetILGenerator();
 26283                            ilgeneratorConstructor.Emit(OpCodes.Ldarg_0);
 26284                            ilgeneratorConstructor.Emit(OpCodes.Call, ObjectCtor);
 285
 172286                            for (int i = 0; i < names.Length; i++)
 60287                            {
 60288                                constructor.DefineParameter(i + 1, ParameterAttributes.None, names[i]);
 60289                                ilgeneratorConstructor.Emit(OpCodes.Ldarg_0);
 290
 60291                                if (i == 0)
 26292                                {
 26293                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_1);
 26294                                }
 34295                                else if (i == 1)
 17296                                {
 17297                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_2);
 17298                                }
 17299                                else if (i == 2)
 7300                                {
 7301                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_3);
 7302                                }
 10303                                else if (i < 255)
 10304                                {
 10305                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg_S, (byte)(i + 1));
 10306                                }
 307                                else
 0308                                {
 309                                    // Ldarg uses a ushort, but the Emit only accepts short, so we use a unchecked(...),
 0310                                    ilgeneratorConstructor.Emit(OpCodes.Ldarg, unchecked((short)(i + 1)));
 0311                                }
 312
 60313                                ilgeneratorConstructor.Emit(OpCodes.Stfld, fields[i]);
 60314                            }
 315
 26316                            ilgeneratorConstructor.Emit(OpCodes.Ret);
 26317                        }
 318
 319                        // Equals()
 33320                        if (names.Length == 0)
 0321                        {
 0322                            ilgeneratorEquals.Emit(OpCodes.Ldnull);
 0323                            ilgeneratorEquals.Emit(OpCodes.Ceq);
 0324                            ilgeneratorEquals.Emit(OpCodes.Ldc_I4_0);
 0325                            ilgeneratorEquals.Emit(OpCodes.Ceq);
 0326                            ilgeneratorEquals.Emit(OpCodes.Ldc_I4_0);
 0327                            ilgeneratorEquals.Emit(OpCodes.Ceq);
 0328                        }
 329                        else
 30330                        {
 30331                            ilgeneratorEquals.Emit(OpCodes.Ret);
 30332                            ilgeneratorEquals.MarkLabel(equalsLabel);
 30333                            ilgeneratorEquals.Emit(OpCodes.Ldc_I4_0);
 30334                        }
 0326                        }
 327                        else
 33328                        {
 33329                            ilgeneratorEquals.Emit(OpCodes.Ret);
 33330                            ilgeneratorEquals.MarkLabel(equalsLabel);
 33331                            ilgeneratorEquals.Emit(OpCodes.Ldc_I4_0);
 33332                        }
 333
 33334                        ilgeneratorEquals.Emit(OpCodes.Ret);
 335
 30336                        ilgeneratorEquals.Emit(OpCodes.Ret);
 337
 338                        // GetHashCode()
 30339                        ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0);
 30340                        ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0);
 30341                        ilgeneratorGetHashCode.Emit(OpCodes.Ret);
 342
 343                        // ToString()
 30344                        ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 30345                         ilgeneratorToString.Emit(OpCodes.Ldstr, names.Length == 0 ? "{ }" : " }");
 30346                        ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendString);
 30347                        ilgeneratorToString.Emit(OpCodes.Pop);
 30348                        ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 30349                        ilgeneratorToString.Emit(OpCodes.Callvirt, ObjectToString);
 30350                        ilgeneratorToString.Emit(OpCodes.Ret);
 336                        // GetHashCode()
 33337                        ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0);
 33338                        ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0);
 33339                        ilgeneratorGetHashCode.Emit(OpCodes.Ret);
 340
 341                        // ToString()
 33342                        ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 33343                        ilgeneratorToString.Emit(OpCodes.Ldstr, names.Length == 0 ? "{ }" : " }");
 33344                        ilgeneratorToString.Emit(OpCodes.Callvirt, StringBuilderAppendString);
 33345                        ilgeneratorToString.Emit(OpCodes.Pop);
 33346                        ilgeneratorToString.Emit(OpCodes.Ldloc_0);
 33347                        ilgeneratorToString.Emit(OpCodes.Callvirt, ObjectToString);
 33348                        ilgeneratorToString.Emit(OpCodes.Ret);
 349
 33350                        type = tb.CreateType();
 351
 30352                        type = tb.CreateType();
 353
 30354                        type = GeneratedTypes.GetOrAdd(key, type);
 30355                    }
 30356                }
 30357            }
 358
 44359             if (types.Length != 0)
 44360            {
 44361                type = type.MakeGenericType(types);
 44362            }
 363
 44364            return type;
 44365        }
 366
 367        /// <summary>
 368        /// Generates the key.
 369        /// Anonymous classes are generics based. The generic classes are distinguished by number of parameters and name
 370        /// </summary>
 371        /// <param name="dynamicProperties">The dynamic propertys.</param>
 372        /// <param name="createParameterCtor">if set to <c>true</c> [create parameter ctor].</param>
 373        /// <returns></returns>
 374        private static string GenerateKey(IEnumerable<DynamicProperty> dynamicProperties, bool createParameterCtor)
 44375        {
 376            // We recreate this by creating a fullName composed of all the property names and types, separated by a "|".
 377            // And append and extra field depending on createParameterCtor.
 136378             return string.Format("{0}_{1}", string.Join("|", dynamicProperties.Select(p => Escape(p.Name) + "~" + p.Type
 44379        }
 380
 381        private static string Escape(string str)
 92382        {
 383            // We escape the \ with \\, so that we can safely escape the "|" (that we use as a separator) with "\|"
 92384            str = str.Replace(@"\", @"\\");
 92385            str = str.Replace(@"|", @"\|");
 92386            return str;
 92387        }
 388    }
 389}
 390#endif
 33352                        type = GeneratedTypes.GetOrAdd(key, type);
 33353                    }
 33354                }
 33355            }
 356
 48357            if (types.Length != 0)
 48358            {
 48359                type = type.MakeGenericType(types);
 48360            }
 361
 48362            return type;
 48363        }
 364
 365        /// <summary>
 366        /// Generates the key.
 367        /// Anonymous classes are generics based. The generic classes are distinguished by number of parameters and name
 368        /// </summary>
 369        /// <param name="dynamicProperties">The dynamic propertys.</param>
 370        /// <param name="createParameterCtor">if set to <c>true</c> [create parameter ctor].</param>
 371        /// <returns></returns>
 372        private static string GenerateKey(IEnumerable<DynamicProperty> dynamicProperties, bool createParameterCtor)
 48373        {
 374            // We recreate this by creating a fullName composed of all the property names and types, separated by a "|".
 375            // And append and extra field depending on createParameterCtor.
 147376            return string.Format("{0}_{1}", string.Join("|", dynamicProperties.Select(p => Escape(p.Name) + "~" + p.Type
 48377        }
 378
 379        private static string Escape(string str)
 99380        {
 381            // We escape the \ with \\, so that we can safely escape the "|" (that we use as a separator) with "\|"
 99382            str = str.Replace(@"\", @"\\");
 99383            str = str.Replace(@"|", @"\|");
 99384            return str;
 99385        }
 386    }
 387}
 388#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm similarity index 88% rename from report/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm index 1b0ada99..b0b002cf 100644 --- a/report/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableAsyncExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableAsyncExtensions.cs Covered lines:0 Uncovered lines:32 Coverable lines:32 @@ -25,20 +26,20 @@

Summary

Metrics

- + - - - - - - - - + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ToDynamicArrayAsync(...)1000
ToDynamicArrayAsync(...)1000
ToDynamicArrayAsync(...)1000
ToDynamicListAsync(...)1000
ToDynamicListAsync(...)1000
ToDynamicListAsync(...)1000
CastToArrayAsync(...)1000
CastToListAsync(...)1000
ToDynamicArrayAsync(...)0000
ToDynamicArrayAsync(...)0000
ToDynamicArrayAsync(...)0000
ToDynamicListAsync(...)0000
ToDynamicListAsync(...)0000
ToDynamicListAsync(...)0000
CastToArrayAsync(...)0000
CastToListAsync(...)0000

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableAsyncExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableAsyncExtensions.cs

@@ -150,18 +151,18 @@

#LineLine coverage
 106#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm similarity index 87% rename from report/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm index f5d5598c..6dd06111 100644 --- a/report/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicEnumerableExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicEnumerableExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions.cs Covered lines:37 Uncovered lines:0 Coverable lines:37 @@ -25,21 +26,21 @@

Summary

Metrics

- + - - - - - - - - - + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()10100100
ToDynamicArray(...)10100100
ToDynamicArray(...)10100100
ToDynamicArray(...)10100100
ToDynamicList(...)10100100
ToDynamicList(...)10100100
ToDynamicList(...)10100100
CastToArray(...)10100100
CastToList(...)10100100
ToDynamicArray(...)0010
ToDynamicArray(...)0010
ToDynamicArray(...)0010
ToDynamicList(...)0010
ToDynamicList(...)0010
ToDynamicList(...)0010
CastToArray(...)0010
CastToList(...)0010
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicEnumerableExtensions.cs

@@ -77,10 +78,10 @@

- - - - + + + + @@ -90,10 +91,10 @@

- - - - + + + + @@ -168,9 +169,9 @@

- - - + + + @@ -180,19 +181,19 @@

#LineLine coverage
 32        }
 33#else
 34        public static dynamic[] ToDynamicArray([NotNull] this IEnumerable source)
 1935        {
 1936            Check.NotNull(source, nameof(source));
 1937            return CastToArray<dynamic>(source);
 1938        }
 2535        {
 2536            Check.NotNull(source, nameof(source));
 2537            return CastToArray<dynamic>(source);
 2538        }
 39#endif
 40
 41        /// <summary>
 45        /// <param name="source">A <see cref="IEnumerable"/> to create an array from.</param>
 46        /// <returns>An Array{T} that contains the elements from the input sequence.</returns>
 47        public static T[] ToDynamicArray<T>([NotNull] this IEnumerable source)
 3748        {
 3749            Check.NotNull(source, nameof(source));
 3750            return CastToArray<T>(source);
 3751        }
 3548        {
 3549            Check.NotNull(source, nameof(source));
 3550            return CastToArray<T>(source);
 3551        }
 52
 53        /// <summary>
 54        /// Creates an array of dynamic objects from a <see cref="IEnumerable"/>.
 7123        }
 124
 125        internal static T[] CastToArray<T>(IEnumerable source)
 61126        {
 61127            return source.Cast<T>().ToArray();
 61128        }
 65126        {
 65127            return source.Cast<T>().ToArray();
 65128        }
 129
 130        internal static List<T> CastToList<T>(IEnumerable source)
 21131        {
 135}
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicExpressionParser.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicExpressionParser.htm similarity index 88% rename from report/System.Linq.Dynamic.Core_DynamicExpressionParser.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicExpressionParser.htm index 4e5aa7ac..3f5bd4e9 100644 --- a/report/System.Linq.Dynamic.Core_DynamicExpressionParser.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicExpressionParser.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicExpressionParser - Coverage Report
@@ -15,36 +16,36 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicExpressionParser Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs -Covered lines:38 -Uncovered lines:16 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs +Covered lines:41 +Uncovered lines:13 Coverable lines:54 Total lines:242 -Line coverage:70.3% +Line coverage:75.9%

Metrics

- + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ParseLambda(...)10100100
ParseLambda(...)1000
ParseLambda(...)10100100
ParseLambda(...)1000
ParseLambda(...)10100100
ParseLambda(...)1000
ParseLambda(...)10100100
ParseLambda(...)10100100
ParseLambda(...)10100100
ParseLambda(...)1000
ParseLambda(...)10100100
ParseLambda(...)10100100
ParseLambda(...)1000
ParseLambda(...)10100100
ParseLambda(...)0010
ParseLambda(...)0000
ParseLambda(...)0010
ParseLambda(...)0000
ParseLambda(...)0010
ParseLambda(...)0000
ParseLambda(...)0010
ParseLambda(...)0010
ParseLambda(...)0010
ParseLambda(...)0010
ParseLambda(...)0010
ParseLambda(...)0010
ParseLambda(...)0000
ParseLambda(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicExpressionParser.cs

@@ -61,7 +62,7 @@

- + @@ -95,7 +96,7 @@

- + @@ -106,15 +107,15 @@

- - - - + + + + - + - - + + @@ -143,12 +144,12 @@

- - - + + + - - + + @@ -207,9 +208,9 @@

- - - + + + @@ -222,9 +223,9 @@

- - - + + + @@ -238,12 +239,12 @@

- - - + + + - - + + @@ -285,31 +286,31 @@

- - - + + +
#LineLine coverage
 11    public static class DynamicExpressionParser
 12    {
 13        /// <summary>
 14        /// *** Parses an expression into a LambdaExpression.
 14        /// Parses an expression into a LambdaExpression.
 15        /// </summary>
 16        /// <param name="parsingConfig">The Configuration for the parsing.</param>
 17        /// <param name="createParameterCtor">if set to <c>true</c> then also create a constructor for all the parameter
 045        }
 46
 47        /// <summary>
 48        /// *** Parses an expression into a LambdaExpression.
 48        /// Parses an expression into a LambdaExpression.
 49        /// </summary>
 50        /// <param name="parsingConfig">The Configuration for the parsing.</param>
 51        /// <param name="createParameterCtor">if set to <c>true</c> then also create a constructor for all the parameter
 56        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 57        [PublicAPI]
 58        public static LambdaExpression ParseLambda([CanBeNull] ParsingConfig parsingConfig, bool createParameterCtor, [N
 46459        {
 46460            Check.NotNull(parameters, nameof(parameters));
 46461            Check.HasNoNulls(parameters, nameof(parameters));
 46462            Check.NotEmpty(expression, nameof(expression));
 48059        {
 48060            Check.NotNull(parameters, nameof(parameters));
 48061            Check.HasNoNulls(parameters, nameof(parameters));
 48062            Check.NotEmpty(expression, nameof(expression));
 63
 46464            var parser = new ExpressionParser(parameters, expression, values, parsingConfig);
 48064            var parser = new ExpressionParser(parameters, expression, values, parsingConfig);
 65
 46366            return Expression.Lambda(parser.Parse(resultType, createParameterCtor), parameters);
 43067        }
 47966            return Expression.Lambda(parser.Parse(resultType, createParameterCtor), parameters);
 44667        }
 68
 69        /// <summary>
 70        /// Parses an expression into a Typed Expression.
 93        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 94        [PublicAPI]
 95        public static LambdaExpression ParseLambda(bool createParameterCtor, [NotNull] Type itType, [CanBeNull] Type res
 1796        {
 1797            Check.NotNull(itType, nameof(itType));
 1798            Check.NotEmpty(expression, nameof(expression));
 1996        {
 1997            Check.NotNull(itType, nameof(itType));
 1998            Check.NotEmpty(expression, nameof(expression));
 99
 17100            return ParseLambda(createParameterCtor, new[] { ParameterExpressionHelper.CreateParameterExpression(itType, 
 16101        }
 19100            return ParseLambda(createParameterCtor, new[] { ParameterExpressionHelper.CreateParameterExpression(itType, 
 18101        }
 102
 103        /// <summary>
 104        /// Parses an expression into a Typed Expression.
 157        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 158        [PublicAPI]
 159        public static LambdaExpression ParseLambda([NotNull] Type itType, [CanBeNull] Type resultType, string expression
 5160        {
 5161            return ParseLambda(true, itType, resultType, expression, values);
 4162        }
 11160        {
 11161            return ParseLambda(true, itType, resultType, expression, values);
 10162        }
 163
 164        /// <summary>
 165        /// Parses an expression into a LambdaExpression. (Also create a constructor for all the parameters. Note that t
 172        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 173        [PublicAPI]
 174        public static LambdaExpression ParseLambda([CanBeNull] ParsingConfig parsingConfig, [NotNull] Type itType, [CanB
 0175        {
 0176            return ParseLambda(true, itType, resultType, expression, parsingConfig, values);
 0177        }
 2175        {
 2176            return ParseLambda(parsingConfig, true, itType, resultType, expression, values);
 2177        }
 178
 179        /// <summary>
 180        /// Parses an expression into a LambdaExpression.
 188        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 189        [PublicAPI]
 190        public static LambdaExpression ParseLambda([CanBeNull] ParsingConfig parsingConfig, bool createParameterCtor, [N
 418191        {
 418192            Check.NotNull(itType, nameof(itType));
 418193            Check.NotEmpty(expression, nameof(expression));
 432191        {
 432192            Check.NotNull(itType, nameof(itType));
 432193            Check.NotEmpty(expression, nameof(expression));
 194
 418195            return ParseLambda(parsingConfig, createParameterCtor, new[] { ParameterExpressionHelper.CreateParameterExpr
 387196        }
 432195            return ParseLambda(parsingConfig, createParameterCtor, new[] { ParameterExpressionHelper.CreateParameterExpr
 401196        }
 197
 198        /// <summary>
 199        /// Parses an expression into a LambdaExpression. (Also create a constructor for all the parameters. Note that t
 235        /// <returns>The generated <see cref="LambdaExpression"/></returns>
 236        [PublicAPI]
 237        public static LambdaExpression ParseLambda(bool createParameterCtor, [NotNull] ParameterExpression[] parameters,
 19238        {
 19239            return ParseLambda(null, createParameterCtor, parameters, resultType, expression, values);
 18240        }
 21238        {
 21239            return ParseLambda(null, createParameterCtor, parameters, resultType, expression, values);
 20240        }
 241    }
 242}
-
+

Methods/Properties

-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.String,System.Object[])
-ParseLambda(System.Boolean,System.Type,System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
-ParseLambda(System.Type,System.String,System.Object[])
-ParseLambda(System.Type,System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
-ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
-ParseLambda(System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Linq.Expressions.ParameterExpression[],System.String,System.Object[])
+ParseLambda(System.Boolean,System.Type,System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
+ParseLambda(System.Type,System.String,System.Object[])
+ParseLambda(System.Type,System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
+ParseLambda(System.Linq.Dynamic.Core.ParsingConfig,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])
+ParseLambda(System.Boolean,System.Linq.Expressions.ParameterExpression[],System.Type,System.String,System.Object[])

diff --git a/report/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm similarity index 55% rename from report/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm index 57200111..111170d9 100644 --- a/report/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicGetMemberBinder - Coverage Report
@@ -15,26 +16,26 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicGetMemberBinder Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicGetMemberBinder.cs -Covered lines:0 -Uncovered lines:11 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicGetMemberBinder.cs +Covered lines:9 +Uncovered lines:2 Coverable lines:11 Total lines:34 -Line coverage:0% -Branch coverage:0% +Line coverage:81.8% +Branch coverage:50%

Metrics

- + - - - + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)1000
FallbackGetMember(...)2200
.cctor()1000
FallbackGetMember(...)007145
.ctor(...)0010
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicGetMemberBinder.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicGetMemberBinder.cs

@@ -52,35 +53,35 @@

- + - - - + + + - - - + + + - - + +
#LineLine coverage
 12    /// <seealso cref="GetMemberBinder" />
 13    internal class DynamicGetMemberBinder : GetMemberBinder
 14    {
 015        private static readonly PropertyInfo Indexer = typeof(IDictionary<string, object>).GetProperty("Item");
 115        private static readonly PropertyInfo Indexer = typeof(IDictionary<string, object>).GetProperty("Item");
 16
 17        public DynamicGetMemberBinder(string name)
 018            : base(name, true)
 019        {
 020        }
 118            : base(name, true)
 119        {
 120        }
 21
 22        public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion)
 023        {
 024            IDictionary<string, object> dictionary = target.Value as IDictionary<string, object>;
 025             if (dictionary == null)
 123        {
 124            IDictionary<string, object> dictionary = target.Value as IDictionary<string, object>;
 125            if (dictionary == null)
 026            {
 027                throw new InvalidOperationException("Target object is not an ExpandoObject");
 28            }
 29
 030            return DynamicMetaObject.Create(dictionary, Expression.MakeIndex(Expression.Constant(dictionary), Indexer, n
 031        }
 130            return DynamicMetaObject.Create(dictionary, Expression.MakeIndex(Expression.Constant(dictionary), Indexer, n
 131        }
 32    }
 33}
 34#endif
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicProperty.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicProperty.htm similarity index 72% rename from report/System.Linq.Dynamic.Core_DynamicProperty.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicProperty.htm index c59f994e..a31c53d2 100644 --- a/report/System.Linq.Dynamic.Core_DynamicProperty.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicProperty.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicProperty - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicProperty Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicProperty.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicProperty.cs Covered lines:7 Uncovered lines:0 Coverable lines:7 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)10100100
.ctor(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicProperty.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicProperty.cs

@@ -47,11 +48,11 @@

- - - - - + + + + + @@ -59,7 +60,7 @@

- + @@ -67,18 +68,18 @@

- +
#LineLine coverage
 10        /// </summary>
 11        /// <param name="name">The name from the property.</param>
 12        /// <param name="type">The type from the property.</param>
 11313        public DynamicProperty(string name, Type type)
 11314        {
 11315            Name = name;
 11316            Type = type;
 11317        }
 12213        public DynamicProperty(string name, Type type)
 12214        {
 12215            Name = name;
 12216            Type = type;
 12217        }
 18
 19        /// <summary>
 20        /// Gets the name from the property.
 22        /// <value>
 23        /// The name from the property.
 24        /// </value>
 20725        public string Name { get; }
 22325        public string Name { get; }
 26
 27        /// <summary>
 28        /// Gets the type from the property.
 30        /// <value>
 31        /// The type from the property.
 32        /// </value>
 18433        public Type Type { get; }
 19833        public Type Type { get; }
 34    }
 35}
-
+
diff --git a/report/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm similarity index 85% rename from report/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm index 0fb5f6a7..835f2e61 100644 --- a/report/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.DynamicQueryableExtensions - Coverage Report
@@ -15,131 +16,131 @@

Summary

Class:System.Linq.Dynamic.Core.DynamicQueryableExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicQueryableExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicQueryableExtensions.cs Covered lines:731 -Uncovered lines:18 -Coverable lines:749 -Total lines:2048 -Line coverage:97.5% -Branch coverage:82.3% +Uncovered lines:20 +Coverable lines:751 +Total lines:2046 +Line coverage:97.3% +Branch coverage:85%

Metrics

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
OptimizeExpression(...)348080
Aggregate(...)22100100
Any(...)10100100
Any(...)10100100
Any(...)10100100
Any(...)10100100
Count(...)10100100
Count(...)10100100
Count(...)10100100
Count(...)10100100
DefaultIfEmpty(...)10100100
DefaultIfEmpty(...)10100100
Distinct(...)10100100
First(...)10100100
First(...)10100100
First(...)10100100
First(...)10100100
FirstOrDefault(...)10100100
FirstOrDefault(...)10100100
FirstOrDefault(...)10100100
FirstOrDefault(...)10100100
GroupBy(...)10100100
GroupBy(...)1000
GroupBy(...)10100100
GroupBy(...)10100100
GroupBy(...)10100100
GroupBy(...)10100100
GroupByMany(...)20100100
GroupByMany(...)10100100
GroupByMany(...)10100100
GroupByManyInternal(...)22100100
GroupJoin(...)10100100
GroupJoin(...)10100100
Join(...)10100100
Join(...)10100100
Join(...)1000
Join(...)1000
Last(...)10100100
Last(...)10100100
Last(...)10100100
Last(...)10100100
LastOrDefault(...)10100100
LastOrDefault(...)10100100
LastOrDefault(...)10100100
LastOrDefault(...)10100100
OrderBy(...)10100100
OrderBy(...)10100100
OrderBy(...)30100100
OrderBy(...)10100100
Page(...)30100100
Page(...)30100100
PageResult(...)30100100
PageResult(...)30100100
Reverse(...)10100100
Select(...)10100100
Select(...)10100100
Select(...)10100100
Select(...)10100100
Select(...)10100100
Select(...)10100100
SelectMany(...)10100100
SelectMany(...)10100100
SelectMany(...)10100100
SelectMany(...)10100100
SelectManyInternal(...)34100100
SelectMany(...)10100100
SelectMany(...)10100100
SelectMany(...)1000
SelectMany(...)10100100
SelectMany(...)10100100
SelectMany(...)10100100
Single(...)10100100
Single(...)10100100
Single(...)10100100
Single(...)10100100
SingleOrDefault(...)10100100
SingleOrDefault(...)10100100
SingleOrDefault(...)10100100
SingleOrDefault(...)10100100
Skip(...)32100100
SkipWhile(...)10100100
SkipWhile(...)10100100
Sum(...)10100100
Take(...)20100100
TakeWhile(...)10100100
TakeWhile(...)10100100
ThenBy(...)10100100
ThenBy(...)10100100
ThenBy(...)30100100
ThenBy(...)1066.67100
Where(...)10100100
Where(...)10100100
Where(...)10100100
Where(...)10100100
Where(...)10100100
CheckOuterAndInnerTypes(...)73210090.91
CreateQuery(...)2210066.67
CreateQuery(...)10100100
CreateQuery(...)20100100
Execute(...)2210066.67
Execute(...)2210066.67
Execute(...)10100100
Execute(...)20100100
Execute(...)10100100
Execute(...)20100100
GetMethod(...)1057.14100
.cctor()10100100
AsEnumerable()40100100
OptimizeExpression(...)0066775
Aggregate(...)0011
Any(...)0010
Any(...)0010
Any(...)0010
Any(...)0010
Count(...)0010
Count(...)0010
Count(...)0010
Count(...)0010
DefaultIfEmpty(...)0010
DefaultIfEmpty(...)0010
Distinct(...)0010
First(...)0010
First(...)0010
First(...)0010
First(...)0010
FirstOrDefault(...)0010
FirstOrDefault(...)0010
FirstOrDefault(...)0010
FirstOrDefault(...)0010
GroupBy(...)0015
GroupBy(...)0000
GroupBy(...)0010
GroupBy(...)0010
GroupBy(...)0011
GroupBy(...)0010
GroupByMany(...)0011
GroupByMany(...)0010
GroupByMany(...)0010
GroupByManyInternal(...)0011
GroupJoin(...)0015
GroupJoin(...)0010
Join(...)0015
Join(...)0010
Join(...)0000
Join(...)0000
Last(...)0010
Last(...)0010
Last(...)0010
Last(...)0010
LastOrDefault(...)0010
LastOrDefault(...)0010
LastOrDefault(...)0010
LastOrDefault(...)0010
OrderBy(...)0010
OrderBy(...)0010
OrderBy(...)0011
OrderBy(...)0010
Page(...)0011
Page(...)0011
PageResult(...)0011
PageResult(...)0011
Reverse(...)0010
Select(...)0015
Select(...)0010
Select(...)0011
Select(...)0010
Select(...)0015
Select(...)0010
SelectMany(...)0010
SelectMany(...)0010
SelectMany(...)0010
SelectMany(...)0010
SelectManyInternal(...)001833
SelectMany(...)0015
SelectMany(...)0010
SelectMany(...)0000
SelectMany(...)0010
SelectMany(...)0015
SelectMany(...)0010
Single(...)0010
Single(...)0010
Single(...)0010
Single(...)0010
SingleOrDefault(...)0010
SingleOrDefault(...)0010
SingleOrDefault(...)0010
SingleOrDefault(...)0010
Skip(...)0011
SkipWhile(...)0010
SkipWhile(...)0010
Sum(...)0010
Take(...)0011
TakeWhile(...)0010
TakeWhile(...)0010
ThenBy(...)0010
ThenBy(...)0010
ThenBy(...)0011
ThenBy(...)006670
Where(...)0010
Where(...)0010
Where(...)0010
Where(...)0010
Where(...)0010
CheckOuterAndInnerTypes(...)001917
CreateQuery(...)0011
CreateQuery(...)0010
CreateQuery(...)0015
Execute(...)0011
Execute(...)0011
Execute(...)0010
Execute(...)0015
Execute(...)0010
Execute(...)0015
GetMethod(...)006250
.cctor()0010
AsEnumerable()0011

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicQueryableExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\DynamicQueryableExtensions.cs

@@ -176,23 +177,23 @@

- - - - + + + + - + - - + + - + - + @@ -215,18 +216,18 @@

- + - + - + @@ -334,8 +335,8 @@

- - + + @@ -357,11 +358,11 @@

- - + + - - + + @@ -490,11 +491,11 @@

- - + + - - + + @@ -645,7 +646,7 @@

- + @@ -715,7 +716,7 @@

- + @@ -731,1580 +732,1578 @@

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 31#endif
 32
 33        private static Expression OptimizeExpression(Expression expression)
 53334        {
 53335             if (ExtensibilityPoint.QueryOptimizer != null)
 53236            {
 53237                var optimized = ExtensibilityPoint.QueryOptimizer(expression);
 54934        {
 54935            if (ExtensibilityPoint.QueryOptimizer != null)
 54836            {
 54837                var optimized = ExtensibilityPoint.QueryOptimizer(expression);
 38
 39#if !(WINDOWS_APP45x || SILVERLIGHT)
 53240                 if (optimized != expression)
 54840                if (optimized != expression)
 041                {
 42                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression before : {0}", expression);
 43                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression after  : {0}", optimized);
 042                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression before : {0}", expression);
 043                    TraceSource.TraceEvent(TraceEventType.Verbose, 0, "Expression after  : {0}", optimized);
 044                }
 45#endif
 53246                return optimized;
 54846                return optimized;
 47            }
 48
 149            return expression;
 53350        }
 54950        }
 51
 52        #region Aggregate
 53        /// <summary>
 70            // We've tried to find an expression of the type Expression<Func<TSource, TAcc>>,
 71            // which is expressed as ( (TSource s) => s.Price );
 72
 229873             var methods = typeof(Queryable).GetMethods().Where(x => x.Name == function && x.IsGenericMethod);
 237073            var methods = typeof(Queryable).GetMethods().Where(x => x.Name == function && x.IsGenericMethod);
 74
 75            // Method
 1276            MethodInfo aggregateMethod = methods.SingleOrDefault(m =>
 8477            {
 8478                ParameterInfo lastParameter = m.GetParameters().LastOrDefault();
 1279
 8480                 return lastParameter != null ? TypeHelper.GetUnderlyingType(lastParameter.ParameterType) == property.Pro
 8480                return lastParameter != null ? TypeHelper.GetUnderlyingType(lastParameter.ParameterType) == property.Pro
 8481            });
 82
 83            // Sum, Average
 1284             if (aggregateMethod != null)
 1284            if (aggregateMethod != null)
 685            {
 686                return source.Provider.Execute(
 687                    Expression.Call(
 189        /// <returns>The input typed as <see cref="IEnumerable{T}"/> of dynamic.</returns>
 190        public static IEnumerable<dynamic> AsEnumerable([NotNull] this IQueryable source)
 191#endif
 5192        {
 419193            foreach (var obj in source)
 5192        {
 419193            foreach (var obj in source)
 202194            {
 202195                yield return obj;
 202196            }
 212        /// </example>
 213        /// <returns>The number of elements in the input sequence.</returns>
 214        public static int Count([NotNull] this IQueryable source)
 33215        {
 33216            Check.NotNull(source, nameof(source));
 36215        {
 36216            Check.NotNull(source, nameof(source));
 217
 33218            return Execute<int>(_count, source);
 33219        }
 36218            return Execute<int>(_count, source);
 36219        }
 220
 1221        private static readonly MethodInfo _countPredicate = GetMethod(nameof(Queryable.Count), 1);
 222
 345#else
 346        public static dynamic First([NotNull] this IQueryable source)
 347#endif
 14348        {
 14349            Check.NotNull(source, nameof(source));
 16348        {
 16349            Check.NotNull(source, nameof(source));
 350
 14351            return Execute(_first, source);
 14352        }
 16351            return Execute(_first, source);
 16352        }
 353
 1354        private static readonly MethodInfo _firstPredicate = GetMethod(nameof(Queryable.First), 1);
 355
 5500            Check.NotEmpty(keySelector, nameof(keySelector));
 5501            Check.NotEmpty(resultSelector, nameof(resultSelector));
 502
 5503            bool createParameterCtor = source.IsLinqToObjects();
 5503            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 5504            LambdaExpression keyLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.Element
 5505            LambdaExpression elementLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.Ele
 506
 18570            Check.NotNull(source, nameof(source));
 17571            Check.NotEmpty(keySelector, nameof(keySelector));
 572
 14573            bool createParameterCtor = source.IsLinqToObjects();
 14573            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 14574            LambdaExpression keyLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.Element
 575
 9576            var optimized = OptimizeExpression(Expression.Call(
 17586        {
 17587            return GroupBy(source, (ParsingConfig)null, keySelector, args);
 8588        }
 589
 590        #endregion GroupBy
 591
 592        #region GroupByMany
 593        /// <summary>
 594        /// Groups the elements of a sequence according to multiple specified key string functions
 595        /// and creates a result value from each group (and subgroups) and its key.
 596        /// </summary>
 597        /// <typeparam name="TElement"></typeparam>
 598        /// <param name="source">A <see cref="IEnumerable{T}"/> whose elements to group.</param>
 599        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 600        /// <param name="keySelectors"><see cref="string"/> expressions to specify the keys for each element.</param>
 601        /// <returns>A <see cref="IEnumerable{T}"/> of type <see cref="GroupResult"/> where each element represents a pr
 602        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, [CanBe
 1603        {
 1604            Check.NotNull(source, nameof(source));
 1605            Check.HasNoNulls(keySelectors, nameof(keySelectors));
 606
 1607            var selectors = new List<Func<TElement, object>>(keySelectors.Length);
 608
 1609            bool createParameterCtor = true;
 7610            foreach (var selector in keySelectors)
 2611            {
 2612                LambdaExpression l = DynamicExpressionParser.ParseLambda(config, createParameterCtor, typeof(TElement), 
 2613                selectors.Add((Func<TElement, object>)l.Compile());
 2614            }
 615
 1616            return GroupByManyInternal(source, selectors.ToArray(), 0);
 1617        }
 618
 619        /// <inheritdoc cref="GroupByMany{TElement}(IEnumerable{TElement}, ParsingConfig, string[])"/>
 620        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, params
 1621        {
 1622            return GroupByMany(source, null, keySelectors);
 1623        }
 624
 625        /// <summary>
 626        /// Groups the elements of a sequence according to multiple specified key functions
 627        /// and creates a result value from each group (and subgroups) and its key.
 628        /// </summary>
 629        /// <typeparam name="TElement"></typeparam>
 630        /// <param name="source">A <see cref="IEnumerable{T}"/> whose elements to group.</param>
 631        /// <param name="keySelectors">Lambda expressions to specify the keys for each element.</param>
 632        /// <returns>A <see cref="IEnumerable{T}"/> of type <see cref="GroupResult"/> where each element represents a pr
 633        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, params
 1634        {
 1635            Check.NotNull(source, nameof(source));
 1636            Check.HasNoNulls(keySelectors, nameof(keySelectors));
 637
 1638            return GroupByManyInternal(source, keySelectors, 0);
 1639        }
 640
 641        static IEnumerable<GroupResult> GroupByManyInternal<TElement>(IEnumerable<TElement> source, Func<TElement, objec
 15642        {
 21643             if (currentSelector >= keySelectors.Length) return null;
 644
 9645            var selector = keySelectors[currentSelector];
 646
 9647            var result = source.GroupBy(selector).Select(
 22648                g => new GroupResult
 22649                {
 22650                    Key = g.Key,
 22651                    Count = g.Count(),
 22652                    Items = g,
 22653                    Subgroups = GroupByManyInternal(g, keySelectors, currentSelector + 1)
 22654                });
 655
 9656            return result;
 15657        }
 658        #endregion GroupByMany
 659
 660        #region GroupJoin
 661        /// <summary>
 662        /// Correlates the elements of two sequences based on equality of keys and groups the results. The default equal
 663        /// </summary>
 664        /// <param name="outer">The first sequence to join.</param>
 665        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 666        /// <param name="inner">The sequence to join to the first sequence.</param>
 667        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 668        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 669        /// <param name="resultSelector">A dynamic function to create a result element from an element from the first se
 670        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 671        /// <returns>An <see cref="IQueryable"/> obtained by performing a grouped join on two sequences.</returns>
 672        public static IQueryable GroupJoin([NotNull] this IQueryable outer, [CanBeNull] ParsingConfig config, [NotNull] 
 6673        {
 6674            Check.NotNull(outer, nameof(outer));
 6675            Check.NotNull(inner, nameof(inner));
 6676            Check.NotEmpty(outerKeySelector, nameof(outerKeySelector));
 6677            Check.NotEmpty(innerKeySelector, nameof(innerKeySelector));
 6678            Check.NotEmpty(resultSelector, nameof(resultSelector));
 679
 6680            Type outerType = outer.ElementType;
 6681            Type innerType = inner.AsQueryable().ElementType;
 682
 6683            bool createParameterCtor = outer.IsLinqToObjects();
 6684            LambdaExpression outerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, oute
 6685            LambdaExpression innerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, inne
 686
 6687            CheckOuterAndInnerTypes(createParameterCtor, outerType, innerType, outerKeySelector, innerKeySelector, ref o
 688
 5689            ParameterExpression[] parameters =
 5690            {
 5691                ParameterExpressionHelper.CreateParameterExpression(outerType, "outer"),
 5692                ParameterExpressionHelper.CreateParameterExpression(typeof(IEnumerable<>).MakeGenericType(innerType), "i
 5693            };
 694
 5695            LambdaExpression resultSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, par
 696
 5697            return outer.Provider.CreateQuery(Expression.Call(
 5698                typeof(Queryable), nameof(Queryable.GroupJoin),
 5699                new[] { outer.ElementType, innerType, outerSelectorLambda.Body.Type, resultSelectorLambda.Body.Type },
 5700                outer.Expression,
 5701                Expression.Constant(inner),
 5702                Expression.Quote(outerSelectorLambda),
 5703                Expression.Quote(innerSelectorLambda),
 5704                Expression.Quote(resultSelectorLambda)));
 5705        }
 706
 707        /// <inheritdoc cref="GroupJoin(IQueryable, IEnumerable, string, string, string, object[])"/>
 708        public static IQueryable GroupJoin([NotNull] this IQueryable outer, [NotNull] IEnumerable inner, [NotNull] strin
 6709        {
 6710            return GroupJoin(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 5711        }
 589        #endregion GroupBy
 590
 591        #region GroupByMany
 592        /// <summary>
 593        /// Groups the elements of a sequence according to multiple specified key string functions
 594        /// and creates a result value from each group (and subgroups) and its key.
 595        /// </summary>
 596        /// <typeparam name="TElement"></typeparam>
 597        /// <param name="source">A <see cref="IEnumerable{T}"/> whose elements to group.</param>
 598        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 599        /// <param name="keySelectors"><see cref="string"/> expressions to specify the keys for each element.</param>
 600        /// <returns>A <see cref="IEnumerable{T}"/> of type <see cref="GroupResult"/> where each element represents a pr
 601        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, [CanBe
 1602        {
 1603            Check.NotNull(source, nameof(source));
 1604            Check.HasNoNulls(keySelectors, nameof(keySelectors));
 605
 1606            var selectors = new List<Func<TElement, object>>(keySelectors.Length);
 607
 1608            bool createParameterCtor = true;
 7609            foreach (var selector in keySelectors)
 2610            {
 2611                LambdaExpression l = DynamicExpressionParser.ParseLambda(config, createParameterCtor, typeof(TElement), 
 2612                selectors.Add((Func<TElement, object>)l.Compile());
 2613            }
 614
 1615            return GroupByManyInternal(source, selectors.ToArray(), 0);
 1616        }
 617
 618        /// <inheritdoc cref="GroupByMany{TElement}(IEnumerable{TElement}, ParsingConfig, string[])"/>
 619        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, params
 1620        {
 1621            return GroupByMany(source, null, keySelectors);
 1622        }
 623
 624        /// <summary>
 625        /// Groups the elements of a sequence according to multiple specified key functions
 626        /// and creates a result value from each group (and subgroups) and its key.
 627        /// </summary>
 628        /// <typeparam name="TElement"></typeparam>
 629        /// <param name="source">A <see cref="IEnumerable{T}"/> whose elements to group.</param>
 630        /// <param name="keySelectors">Lambda expressions to specify the keys for each element.</param>
 631        /// <returns>A <see cref="IEnumerable{T}"/> of type <see cref="GroupResult"/> where each element represents a pr
 632        public static IEnumerable<GroupResult> GroupByMany<TElement>([NotNull] this IEnumerable<TElement> source, params
 1633        {
 1634            Check.NotNull(source, nameof(source));
 1635            Check.HasNoNulls(keySelectors, nameof(keySelectors));
 636
 1637            return GroupByManyInternal(source, keySelectors, 0);
 1638        }
 639
 640        static IEnumerable<GroupResult> GroupByManyInternal<TElement>(IEnumerable<TElement> source, Func<TElement, objec
 15641        {
 21642            if (currentSelector >= keySelectors.Length) return null;
 643
 9644            var selector = keySelectors[currentSelector];
 645
 9646            var result = source.GroupBy(selector).Select(
 22647                g => new GroupResult
 22648                {
 22649                    Key = g.Key,
 22650                    Count = g.Count(),
 22651                    Items = g,
 22652                    Subgroups = GroupByManyInternal(g, keySelectors, currentSelector + 1)
 22653                });
 654
 9655            return result;
 15656        }
 657        #endregion GroupByMany
 658
 659        #region GroupJoin
 660        /// <summary>
 661        /// Correlates the elements of two sequences based on equality of keys and groups the results. The default equal
 662        /// </summary>
 663        /// <param name="outer">The first sequence to join.</param>
 664        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 665        /// <param name="inner">The sequence to join to the first sequence.</param>
 666        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 667        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 668        /// <param name="resultSelector">A dynamic function to create a result element from an element from the first se
 669        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 670        /// <returns>An <see cref="IQueryable"/> obtained by performing a grouped join on two sequences.</returns>
 671        public static IQueryable GroupJoin([NotNull] this IQueryable outer, [CanBeNull] ParsingConfig config, [NotNull] 
 6672        {
 6673            Check.NotNull(outer, nameof(outer));
 6674            Check.NotNull(inner, nameof(inner));
 6675            Check.NotEmpty(outerKeySelector, nameof(outerKeySelector));
 6676            Check.NotEmpty(innerKeySelector, nameof(innerKeySelector));
 6677            Check.NotEmpty(resultSelector, nameof(resultSelector));
 678
 6679            Type outerType = outer.ElementType;
 6680            Type innerType = inner.AsQueryable().ElementType;
 681
 6682            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? outer.IsLinqToObjects();
 6683            LambdaExpression outerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, oute
 6684            LambdaExpression innerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, inne
 685
 6686            CheckOuterAndInnerTypes(config, createParameterCtor, outerType, innerType, outerKeySelector, innerKeySelecto
 687
 5688            ParameterExpression[] parameters =
 5689            {
 5690                ParameterExpressionHelper.CreateParameterExpression(outerType, "outer"),
 5691                ParameterExpressionHelper.CreateParameterExpression(typeof(IEnumerable<>).MakeGenericType(innerType), "i
 5692            };
 693
 5694            LambdaExpression resultSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, par
 695
 5696            return outer.Provider.CreateQuery(Expression.Call(
 5697                typeof(Queryable), nameof(Queryable.GroupJoin),
 5698                new[] { outer.ElementType, innerType, outerSelectorLambda.Body.Type, resultSelectorLambda.Body.Type },
 5699                outer.Expression,
 5700                inner.AsQueryable().Expression,
 5701                Expression.Quote(outerSelectorLambda),
 5702                Expression.Quote(innerSelectorLambda),
 5703                Expression.Quote(resultSelectorLambda)));
 5704        }
 705
 706        /// <inheritdoc cref="GroupJoin(IQueryable, IEnumerable, string, string, string, object[])"/>
 707        public static IQueryable GroupJoin([NotNull] this IQueryable outer, [NotNull] IEnumerable inner, [NotNull] strin
 6708        {
 6709            return GroupJoin(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 5710        }
 711        #endregion
 712
 713        #endregion
 714
 715        #region Join
 716        /// <summary>
 717        /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to co
 718        /// </summary>
 719        /// <param name="outer">The first sequence to join.</param>
 720        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 721        /// <param name="inner">The sequence to join to the first sequence.</param>
 722        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 723        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 724        /// <param name="resultSelector">A dynamic function to create a result element from two matching elements.</para
 725        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 726        /// <returns>An <see cref="IQueryable"/> obtained by performing an inner join on two sequences.</returns>
 727        public static IQueryable Join([NotNull] this IQueryable outer, [CanBeNull] ParsingConfig config, [NotNull] IEnum
 4728        {
 729            //http://stackoverflow.com/questions/389094/how-to-create-a-dynamic-linq-join-extension-method
 730
 4731            Check.NotNull(outer, nameof(outer));
 4732            Check.NotNull(inner, nameof(inner));
 4733            Check.NotEmpty(outerKeySelector, nameof(outerKeySelector));
 4734            Check.NotEmpty(innerKeySelector, nameof(innerKeySelector));
 4735            Check.NotEmpty(resultSelector, nameof(resultSelector));
 736
 4737            Type outerType = outer.ElementType;
 4738            Type innerType = inner.AsQueryable().ElementType;
 739
 4740            bool createParameterCtor = outer.IsLinqToObjects();
 4741            LambdaExpression outerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, oute
 4742            LambdaExpression innerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, inne
 713        #region Join
 714        /// <summary>
 715        /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to co
 716        /// </summary>
 717        /// <param name="outer">The first sequence to join.</param>
 718        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 719        /// <param name="inner">The sequence to join to the first sequence.</param>
 720        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 721        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 722        /// <param name="resultSelector">A dynamic function to create a result element from two matching elements.</para
 723        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 724        /// <returns>An <see cref="IQueryable"/> obtained by performing an inner join on two sequences.</returns>
 725        public static IQueryable Join([NotNull] this IQueryable outer, [CanBeNull] ParsingConfig config, [NotNull] IEnum
 4726        {
 727            //http://stackoverflow.com/questions/389094/how-to-create-a-dynamic-linq-join-extension-method
 728
 4729            Check.NotNull(outer, nameof(outer));
 4730            Check.NotNull(inner, nameof(inner));
 4731            Check.NotEmpty(outerKeySelector, nameof(outerKeySelector));
 4732            Check.NotEmpty(innerKeySelector, nameof(innerKeySelector));
 4733            Check.NotEmpty(resultSelector, nameof(resultSelector));
 734
 4735            Type outerType = outer.ElementType;
 4736            Type innerType = inner.AsQueryable().ElementType;
 737
 4738            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? outer.IsLinqToObjects();
 4739            LambdaExpression outerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, oute
 4740            LambdaExpression innerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, inne
 741
 4742            CheckOuterAndInnerTypes(config, createParameterCtor, outerType, innerType, outerKeySelector, innerKeySelecto
 743
 4744            CheckOuterAndInnerTypes(createParameterCtor, outerType, innerType, outerKeySelector, innerKeySelector, ref o
 745
 3746            ParameterExpression[] parameters =
 3747            {
 3748                ParameterExpressionHelper.CreateParameterExpression(outerType, "outer"),
 3749                ParameterExpressionHelper.CreateParameterExpression(innerType, "inner")
 3750            };
 3744            ParameterExpression[] parameters =
 3745            {
 3746                ParameterExpressionHelper.CreateParameterExpression(outerType, "outer"),
 3747                ParameterExpressionHelper.CreateParameterExpression(innerType, "inner")
 3748            };
 749
 3750            LambdaExpression resultSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, par
 751
 3752            LambdaExpression resultSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, par
 753
 3754            var optimized = OptimizeExpression(Expression.Call(
 3755                typeof(Queryable), "Join",
 3756                new[] { outerType, innerType, outerSelectorLambda.Body.Type, resultSelectorLambda.Body.Type },
 3757                outer.Expression, // outer: The first sequence to join.
 3758                inner.AsQueryable().Expression, // inner: The sequence to join to the first sequence.
 3759                Expression.Quote(outerSelectorLambda), // outerKeySelector: A function to extract the join key from each
 3760                Expression.Quote(innerSelectorLambda), // innerKeySelector: A function to extract the join key from each
 3761                Expression.Quote(resultSelectorLambda) // resultSelector: A function to create a result element from two
 3762            ));
 763
 3764            return outer.Provider.CreateQuery(optimized);
 3765        }
 766
 767        /// <inheritdoc cref="Join(IQueryable, ParsingConfig, IEnumerable, string, string, string, object[])"/>
 768        public static IQueryable Join([NotNull] this IQueryable outer, [NotNull] IEnumerable inner, [NotNull] string out
 4769        {
 4770            return Join(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 3771        }
 772
 773        /// <summary>
 774        /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to co
 775        /// </summary>
 776        /// <typeparam name="TElement">The type of the elements of both sequences, and the result.</typeparam>
 777        /// <param name="outer">The first sequence to join.</param>
 778        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 779        /// <param name="inner">The sequence to join to the first sequence.</param>
 780        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 781        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 782        /// <param name="resultSelector">A dynamic function to create a result element from two matching elements.</para
 783        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 784        /// <remarks>This overload only works on elements where both sequences and the resulting element match.</remarks
 785        /// <returns>An <see cref="IQueryable{T}"/> that has elements of type TResult obtained by performing an inner jo
 786        public static IQueryable<TElement> Join<TElement>([NotNull] this IQueryable<TElement> outer, [CanBeNull] Parsing
 0787        {
 0788            return (IQueryable<TElement>)Join(outer, config, (IEnumerable)inner, outerKeySelector, innerKeySelector, res
 0789        }
 790
 791        /// <inheritdoc cref="Join{TElement}(IQueryable{TElement}, ParsingConfig, IEnumerable{TElement}, string, string,
 792        public static IQueryable<TElement> Join<TElement>([NotNull] this IQueryable<TElement> outer, [NotNull] IEnumerab
 0793        {
 0794            return Join(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 0795        }
 796        #endregion Join
 797
 798        #region Last
 1799        private static readonly MethodInfo _last = GetMethod(nameof(Queryable.Last));
 800        /// <summary>
 801        /// Returns the last element of a sequence.
 802        /// </summary>
 803        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 804        /// <returns>The last element in source.</returns>
 805#if NET35
 806        public static object Last([NotNull] this IQueryable source)
 807#else
 808        public static dynamic Last([NotNull] this IQueryable source)
 809#endif
 5810        {
 5811            Check.NotNull(source, nameof(source));
 812
 5813            return Execute(_last, source);
 5814        }
 3752            var optimized = OptimizeExpression(Expression.Call(
 3753                typeof(Queryable), "Join",
 3754                new[] { outerType, innerType, outerSelectorLambda.Body.Type, resultSelectorLambda.Body.Type },
 3755                outer.Expression, // outer: The first sequence to join.
 3756                inner.AsQueryable().Expression, // inner: The sequence to join to the first sequence.
 3757                Expression.Quote(outerSelectorLambda), // outerKeySelector: A function to extract the join key from each
 3758                Expression.Quote(innerSelectorLambda), // innerKeySelector: A function to extract the join key from each
 3759                Expression.Quote(resultSelectorLambda) // resultSelector: A function to create a result element from two
 3760            ));
 761
 3762            return outer.Provider.CreateQuery(optimized);
 3763        }
 764
 765        /// <inheritdoc cref="Join(IQueryable, ParsingConfig, IEnumerable, string, string, string, object[])"/>
 766        public static IQueryable Join([NotNull] this IQueryable outer, [NotNull] IEnumerable inner, [NotNull] string out
 4767        {
 4768            return Join(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 3769        }
 770
 771        /// <summary>
 772        /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to co
 773        /// </summary>
 774        /// <typeparam name="TElement">The type of the elements of both sequences, and the result.</typeparam>
 775        /// <param name="outer">The first sequence to join.</param>
 776        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 777        /// <param name="inner">The sequence to join to the first sequence.</param>
 778        /// <param name="outerKeySelector">A dynamic function to extract the join key from each element of the first seq
 779        /// <param name="innerKeySelector">A dynamic function to extract the join key from each element of the second se
 780        /// <param name="resultSelector">A dynamic function to create a result element from two matching elements.</para
 781        /// <param name="args">An object array that contains zero or more objects to insert into the predicates as param
 782        /// <remarks>This overload only works on elements where both sequences and the resulting element match.</remarks
 783        /// <returns>An <see cref="IQueryable{T}"/> that has elements of type TResult obtained by performing an inner jo
 784        public static IQueryable<TElement> Join<TElement>([NotNull] this IQueryable<TElement> outer, [CanBeNull] Parsing
 0785        {
 0786            return (IQueryable<TElement>)Join(outer, config, (IEnumerable)inner, outerKeySelector, innerKeySelector, res
 0787        }
 788
 789        /// <inheritdoc cref="Join{TElement}(IQueryable{TElement}, ParsingConfig, IEnumerable{TElement}, string, string,
 790        public static IQueryable<TElement> Join<TElement>([NotNull] this IQueryable<TElement> outer, [NotNull] IEnumerab
 0791        {
 0792            return Join(outer, null, inner, outerKeySelector, innerKeySelector, resultSelector, args);
 0793        }
 794        #endregion Join
 795
 796        #region Last
 1797        private static readonly MethodInfo _last = GetMethod(nameof(Queryable.Last));
 798        /// <summary>
 799        /// Returns the last element of a sequence.
 800        /// </summary>
 801        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 802        /// <returns>The last element in source.</returns>
 803#if NET35
 804        public static object Last([NotNull] this IQueryable source)
 805#else
 806        public static dynamic Last([NotNull] this IQueryable source)
 807#endif
 7808        {
 7809            Check.NotNull(source, nameof(source));
 810
 7811            return Execute(_last, source);
 7812        }
 813
 1814        private static readonly MethodInfo _lastPredicate = GetMethod(nameof(Queryable.Last), 1);
 815
 1816        private static readonly MethodInfo _lastPredicate = GetMethod(nameof(Queryable.Last), 1);
 817
 818        /// <summary>
 819        /// Returns the last element of a sequence that satisfies a specified condition.
 820        /// </summary>
 821        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 822        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 823        /// <param name="predicate">A function to test each element for a condition.</param>
 824        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 825        /// <returns>The first element in source that passes the test in predicate.</returns>
 826#if NET35
 827        public static object Last([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string p
 828#else
 829        public static dynamic Last([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string 
 830#endif
 2831        {
 2832            Check.NotNull(source, nameof(source));
 2833            Check.NotEmpty(predicate, nameof(predicate));
 834
 2835            bool createParameterCtor = source.IsLinqToObjects();
 2836            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 837
 2838            return Execute(_lastPredicate, source, lambda);
 2839        }
 840
 841        /// <inheritdoc cref="Last(IQueryable, ParsingConfig, string, object[])"/>
 842#if NET35
 843        public static object Last([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 844#else
 845        public static dynamic Last([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 846#endif
 1847        {
 1848            return Last(source, null, predicate, args);
 1849        }
 850
 851
 852        /// <summary>
 853        /// Returns the last element of a sequence that satisfies a specified condition.
 854        /// </summary>
 855        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 856        /// <param name="lambda">A cached Lambda Expression.</param>
 857        /// <returns>The first element in source that passes the test in predicate.</returns>
 858#if NET35
 859        public static object Last([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 860#else
 861        public static dynamic Last([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 862#endif
 1863        {
 1864            Check.NotNull(source, nameof(source));
 1865            return Execute(_lastPredicate, source, lambda);
 1866        }
 867        #endregion Last
 868
 869        #region LastOrDefault
 1870        private static readonly MethodInfo _lastDefault = GetMethod(nameof(Queryable.LastOrDefault));
 871        /// <summary>
 872        /// Returns the last element of a sequence, or a default value if the sequence contains no elements.
 873        /// </summary>
 874        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 875        /// <returns>default if source is empty; otherwise, the last element in source.</returns>
 876#if NET35
 877        public static object LastOrDefault([NotNull] this IQueryable source)
 878#else
 879        public static dynamic LastOrDefault([NotNull] this IQueryable source)
 880#endif
 1881        {
 1882            Check.NotNull(source, nameof(source));
 883
 1884            return Execute(_lastDefault, source);
 1885        }
 816        /// <summary>
 817        /// Returns the last element of a sequence that satisfies a specified condition.
 818        /// </summary>
 819        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 820        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 821        /// <param name="predicate">A function to test each element for a condition.</param>
 822        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 823        /// <returns>The first element in source that passes the test in predicate.</returns>
 824#if NET35
 825        public static object Last([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string p
 826#else
 827        public static dynamic Last([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string 
 828#endif
 2829        {
 2830            Check.NotNull(source, nameof(source));
 2831            Check.NotEmpty(predicate, nameof(predicate));
 832
 2833            bool createParameterCtor = source.IsLinqToObjects();
 2834            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 835
 2836            return Execute(_lastPredicate, source, lambda);
 2837        }
 838
 839        /// <inheritdoc cref="Last(IQueryable, ParsingConfig, string, object[])"/>
 840#if NET35
 841        public static object Last([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 842#else
 843        public static dynamic Last([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 844#endif
 1845        {
 1846            return Last(source, null, predicate, args);
 1847        }
 848
 849
 850        /// <summary>
 851        /// Returns the last element of a sequence that satisfies a specified condition.
 852        /// </summary>
 853        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 854        /// <param name="lambda">A cached Lambda Expression.</param>
 855        /// <returns>The first element in source that passes the test in predicate.</returns>
 856#if NET35
 857        public static object Last([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 858#else
 859        public static dynamic Last([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 860#endif
 1861        {
 1862            Check.NotNull(source, nameof(source));
 1863            return Execute(_lastPredicate, source, lambda);
 1864        }
 865        #endregion Last
 866
 867        #region LastOrDefault
 1868        private static readonly MethodInfo _lastDefault = GetMethod(nameof(Queryable.LastOrDefault));
 869        /// <summary>
 870        /// Returns the last element of a sequence, or a default value if the sequence contains no elements.
 871        /// </summary>
 872        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 873        /// <returns>default if source is empty; otherwise, the last element in source.</returns>
 874#if NET35
 875        public static object LastOrDefault([NotNull] this IQueryable source)
 876#else
 877        public static dynamic LastOrDefault([NotNull] this IQueryable source)
 878#endif
 1879        {
 1880            Check.NotNull(source, nameof(source));
 881
 1882            return Execute(_lastDefault, source);
 1883        }
 884
 1885        private static readonly MethodInfo _lastDefaultPredicate = GetMethod(nameof(Queryable.LastOrDefault), 1);
 886
 1887        private static readonly MethodInfo _lastDefaultPredicate = GetMethod(nameof(Queryable.LastOrDefault), 1);
 888
 889        /// <summary>
 890        /// Returns the last element of a sequence that satisfies a specified condition, or a default value if the seque
 891        /// </summary>
 892        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 893        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 894        /// <param name="predicate">A function to test each element for a condition.</param>
 895        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 896        /// <returns>The first element in source that passes the test in predicate.</returns>
 897#if NET35
 898        public static object LastOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 899#else
 900        public static dynamic LastOrDefault([NotNull] this IQueryable source,  [CanBeNull] ParsingConfig config, [NotNul
 901#endif
 2902        {
 2903            Check.NotNull(source, nameof(source));
 2904            Check.NotEmpty(predicate, nameof(predicate));
 905
 2906            bool createParameterCtor = source.IsLinqToObjects();
 2907            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 908
 2909            return Execute(_lastDefaultPredicate, source, lambda);
 2910        }
 911
 912        /// <inheritdoc cref="LastOrDefault(IQueryable, ParsingConfig, string, object[])"/>
 913#if NET35
 914        public static object LastOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object[]
 915#else
 916        public static dynamic LastOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object[
 917#endif
 2918        {
 2919            return LastOrDefault(source, null, predicate, args);
 2920        }
 921
 922        /// <summary>
 923        /// Returns the last element of a sequence that satisfies a specified condition, or a default value if the seque
 924        /// </summary>
 925        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 926        /// <param name="lambda">A cached Lambda Expression.</param>
 927        /// <returns>The first element in source that passes the test in predicate.</returns>
 928#if NET35
 929        public static object LastOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 930#else
 931        public static dynamic LastOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 932#endif
 1933        {
 1934            Check.NotNull(source, nameof(source));
 1935            return Execute(_lastDefaultPredicate, source, lambda);
 1936        }
 937        #endregion LastOrDefault
 938
 939        #region OrderBy
 940        /// <summary>
 941        /// Sorts the elements of a sequence in ascending or descending order according to a key.
 942        /// </summary>
 943        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 944        /// <param name="source">A sequence of values to order.</param>
 945        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 946        /// <param name="ordering">An expression string to indicate values to order by.</param>
 947        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 948        /// <returns>A <see cref="IQueryable{T}"/> whose elements are sorted according to the specified <paramref name="
 949        /// <example>
 950        /// <code>
 951        /// <![CDATA[
 952        /// var resultSingle = queryable.OrderBy<User>("NumberProperty");
 953        /// var resultSingleDescending = queryable.OrderBy<User>("NumberProperty DESC");
 954        /// var resultMultiple = queryable.OrderBy<User>("NumberProperty, StringProperty");
 955        /// ]]>
 956        /// </code>
 957        /// </example>
 958        public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [CanBeNull]
 15959        {
 15960            return (IOrderedQueryable<TSource>)OrderBy((IQueryable)source, config, ordering, args);
 11961        }
 962
 963        /// <inheritdoc cref="OrderBy{TSource}(IQueryable{TSource}, ParsingConfig, string, object[])"/>
 964        public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] s
 15965        {
 15966            return OrderBy(source, null, ordering, args);
 11967        }
 968
 969        /// <summary>
 970        /// Sorts the elements of a sequence in ascending or descending order according to a key.
 971        /// </summary>
 972        /// <param name="source">A sequence of values to order.</param>
 973        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 974        /// <param name="ordering">An expression string to indicate values to order by.</param>
 975        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 976        /// <returns>A <see cref="IQueryable"/> whose elements are sorted according to the specified <paramref name="ord
 977        /// <example>
 978        /// <code>
 979        /// var resultSingle = queryable.OrderBy("NumberProperty");
 980        /// var resultSingleDescending = queryable.OrderBy("NumberProperty DESC");
 981        /// var resultMultiple = queryable.OrderBy("NumberProperty, StringProperty DESC");
 982        /// </code>
 983        /// </example>
 984        public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [Not
 26985        {
 26986            Check.NotNull(source, nameof(source));
 25987            Check.NotEmpty(ordering, nameof(ordering));
 988
 22989            ParameterExpression[] parameters = { ParameterExpressionHelper.CreateParameterExpression(source.ElementType,
 22990            ExpressionParser parser = new ExpressionParser(parameters, ordering, args, config);
 22991            IList<DynamicOrdering> dynamicOrderings = parser.ParseOrdering();
 887        /// <summary>
 888        /// Returns the last element of a sequence that satisfies a specified condition, or a default value if the seque
 889        /// </summary>
 890        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 891        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 892        /// <param name="predicate">A function to test each element for a condition.</param>
 893        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 894        /// <returns>The first element in source that passes the test in predicate.</returns>
 895#if NET35
 896        public static object LastOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 897#else
 898        public static dynamic LastOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 899#endif
 2900        {
 2901            Check.NotNull(source, nameof(source));
 2902            Check.NotEmpty(predicate, nameof(predicate));
 903
 2904            bool createParameterCtor = source.IsLinqToObjects();
 2905            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 906
 2907            return Execute(_lastDefaultPredicate, source, lambda);
 2908        }
 909
 910        /// <inheritdoc cref="LastOrDefault(IQueryable, ParsingConfig, string, object[])"/>
 911#if NET35
 912        public static object LastOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object[]
 913#else
 914        public static dynamic LastOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object[
 915#endif
 2916        {
 2917            return LastOrDefault(source, null, predicate, args);
 2918        }
 919
 920        /// <summary>
 921        /// Returns the last element of a sequence that satisfies a specified condition, or a default value if the seque
 922        /// </summary>
 923        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 924        /// <param name="lambda">A cached Lambda Expression.</param>
 925        /// <returns>The first element in source that passes the test in predicate.</returns>
 926#if NET35
 927        public static object LastOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 928#else
 929        public static dynamic LastOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 930#endif
 1931        {
 1932            Check.NotNull(source, nameof(source));
 1933            return Execute(_lastDefaultPredicate, source, lambda);
 1934        }
 935        #endregion LastOrDefault
 936
 937        #region OrderBy
 938        /// <summary>
 939        /// Sorts the elements of a sequence in ascending or descending order according to a key.
 940        /// </summary>
 941        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 942        /// <param name="source">A sequence of values to order.</param>
 943        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 944        /// <param name="ordering">An expression string to indicate values to order by.</param>
 945        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 946        /// <returns>A <see cref="IQueryable{T}"/> whose elements are sorted according to the specified <paramref name="
 947        /// <example>
 948        /// <code>
 949        /// <![CDATA[
 950        /// var resultSingle = queryable.OrderBy<User>("NumberProperty");
 951        /// var resultSingleDescending = queryable.OrderBy<User>("NumberProperty DESC");
 952        /// var resultMultiple = queryable.OrderBy<User>("NumberProperty, StringProperty");
 953        /// ]]>
 954        /// </code>
 955        /// </example>
 956        public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [CanBeNull]
 15957        {
 15958            return (IOrderedQueryable<TSource>)OrderBy((IQueryable)source, config, ordering, args);
 11959        }
 960
 961        /// <inheritdoc cref="OrderBy{TSource}(IQueryable{TSource}, ParsingConfig, string, object[])"/>
 962        public static IOrderedQueryable<TSource> OrderBy<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] s
 15963        {
 15964            return OrderBy(source, null, ordering, args);
 11965        }
 966
 967        /// <summary>
 968        /// Sorts the elements of a sequence in ascending or descending order according to a key.
 969        /// </summary>
 970        /// <param name="source">A sequence of values to order.</param>
 971        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 972        /// <param name="ordering">An expression string to indicate values to order by.</param>
 973        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 974        /// <returns>A <see cref="IQueryable"/> whose elements are sorted according to the specified <paramref name="ord
 975        /// <example>
 976        /// <code>
 977        /// var resultSingle = queryable.OrderBy("NumberProperty");
 978        /// var resultSingleDescending = queryable.OrderBy("NumberProperty DESC");
 979        /// var resultMultiple = queryable.OrderBy("NumberProperty, StringProperty DESC");
 980        /// </code>
 981        /// </example>
 982        public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [Not
 27983        {
 27984            Check.NotNull(source, nameof(source));
 26985            Check.NotEmpty(ordering, nameof(ordering));
 986
 23987            ParameterExpression[] parameters = { ParameterExpressionHelper.CreateParameterExpression(source.ElementType,
 23988            ExpressionParser parser = new ExpressionParser(parameters, ordering, args, config);
 23989            IList<DynamicOrdering> dynamicOrderings = parser.ParseOrdering();
 990
 22991            Expression queryExpr = source.Expression;
 992
 21993            Expression queryExpr = source.Expression;
 994
 111995            foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
 24996            {
 24997                queryExpr = Expression.Call(
 24998                    typeof(Queryable), dynamicOrdering.MethodName,
 24999                    new[] { source.ElementType, dynamicOrdering.Selector.Type },
 241000                    queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
 241001            }
 1002
 211003            var optimized = OptimizeExpression(queryExpr);
 211004            return (IOrderedQueryable)source.Provider.CreateQuery(optimized);
 211005        }
 1006
 1007        /// <inheritdoc cref="OrderBy(IQueryable, ParsingConfig, string, object[])"/>
 1008        public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [NotNull] string ordering, params obje
 111009        {
 111010            return OrderBy(source, null, ordering, args);
 101011        }
 116993            foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
 25994            {
 25995                queryExpr = Expression.Call(
 25996                    typeof(Queryable), dynamicOrdering.MethodName,
 25997                    new[] { source.ElementType, dynamicOrdering.Selector.Type },
 25998                    queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
 25999            }
 1000
 221001            var optimized = OptimizeExpression(queryExpr);
 221002            return (IOrderedQueryable)source.Provider.CreateQuery(optimized);
 221003        }
 1004
 1005        /// <inheritdoc cref="OrderBy(IQueryable, ParsingConfig, string, object[])"/>
 1006        public static IOrderedQueryable OrderBy([NotNull] this IQueryable source, [NotNull] string ordering, params obje
 121007        {
 121008            return OrderBy(source, null, ordering, args);
 111009        }
 1010
 1011        #endregion OrderBy
 1012
 1013        #endregion OrderBy
 1014
 1015        #region Page/PageResult
 1016        /// <summary>
 1017        /// Returns the elements as paged.
 1018        /// </summary>
 1019        /// <param name="source">The IQueryable to return elements from.</param>
 1020        /// <param name="page">The page to return.</param>
 1021        /// <param name="pageSize">The number of elements per page.</param>
 1022        /// <returns>A <see cref="IQueryable"/> that contains the paged elements.</returns>
 1023        public static IQueryable Page([NotNull] this IQueryable source, int page, int pageSize)
 41024        {
 41025            Check.NotNull(source, nameof(source));
 81026            Check.Condition(page, p => p > 0, nameof(page));
 81027            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1028
 41029            return source.Skip((page - 1) * pageSize).Take(pageSize);
 41030        }
 1031
 1032        /// <summary>
 1033        /// Returns the elements as paged.
 1034        /// </summary>
 1035        /// <typeparam name="TSource">The type of the source.</typeparam>
 1036        /// <param name="source">The IQueryable to return elements from.</param>
 1037        /// <param name="page">The page to return.</param>
 1038        /// <param name="pageSize">The number of elements per page.</param>
 1039        /// <returns>A <see cref="IQueryable{TSource}"/> that contains the paged elements.</returns>
 1040        public static IQueryable<TSource> Page<TSource>([NotNull] this IQueryable<TSource> source, int page, int pageSiz
 41041        {
 41042            Check.NotNull(source, nameof(source));
 81043            Check.Condition(page, p => p > 0, nameof(page));
 81044            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1045
 41046            return Queryable.Take(Queryable.Skip(source, (page - 1) * pageSize), pageSize);
 41047        }
 1048
 1049        /// <summary>
 1050        /// Returns the elements as paged and include the CurrentPage, PageCount, PageSize and RowCount.
 1051        /// </summary>
 1052        /// <param name="source">The IQueryable to return elements from.</param>
 1053        /// <param name="page">The page to return.</param>
 1054        /// <param name="pageSize">The number of elements per page.</param>
 1055        /// <returns>PagedResult</returns>
 1056        public static PagedResult PageResult([NotNull] this IQueryable source, int page, int pageSize)
 21057        {
 21058            Check.NotNull(source, nameof(source));
 41059            Check.Condition(page, p => p > 0, nameof(page));
 41060            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1061
 21062            var result = new PagedResult
 21063            {
 21064                CurrentPage = page,
 21065                PageSize = pageSize,
 21066                RowCount = source.Count()
 21067            };
 1068
 21069            result.PageCount = (int)Math.Ceiling((double)result.RowCount / pageSize);
 21070            result.Queryable = Page(source, page, pageSize);
 1071
 21072            return result;
 21073        }
 1074
 1075        /// <summary>
 1076        /// Returns the elements as paged and include the CurrentPage, PageCount, PageSize and RowCount.
 1077        /// </summary>
 1078        /// <typeparam name="TSource">The type of the source.</typeparam>
 1079        /// <param name="source">The IQueryable to return elements from.</param>
 1080        /// <param name="page">The page to return.</param>
 1081        /// <param name="pageSize">The number of elements per page.</param>
 1082        /// <returns>PagedResult{TSource}</returns>
 1083        public static PagedResult<TSource> PageResult<TSource>([NotNull] this IQueryable<TSource> source, int page, int 
 21084        {
 21085            Check.NotNull(source, nameof(source));
 41086            Check.Condition(page, p => p > 0, nameof(page));
 41087            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1088
 21089            var result = new PagedResult<TSource>
 21090            {
 21091                CurrentPage = page,
 21092                PageSize = pageSize,
 21093                RowCount = Queryable.Count(source)
 21094            };
 1095
 21096            result.PageCount = (int)Math.Ceiling((double)result.RowCount / pageSize);
 21097            result.Queryable = Page(source, page, pageSize);
 1098
 21099            return result;
 21100        }
 1101        #endregion Page/PageResult
 1102
 1103        #region Reverse
 1104        /// <summary>
 1105        /// Inverts the order of the elements in a sequence.
 1106        /// </summary>
 1107        /// <param name="source">A sequence of values to reverse.</param>
 1108        /// <returns>A <see cref="IQueryable"/> whose elements correspond to those of the input sequence in reverse orde
 1109        public static IQueryable Reverse([NotNull] this IQueryable source)
 11110        {
 11111            Check.NotNull(source, nameof(source));
 1112
 11113            return Queryable.Reverse((IQueryable<object>)source);
 11114        }
 1115        #endregion Reverse
 1116
 1117        #region Select
 1118        /// <summary>
 1119        /// Projects each element of a sequence into a new form.
 1120        /// </summary>
 1121        /// <param name="source">A sequence of values to project.</param>
 1122        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1123        /// <param name="selector">A projection string expression to apply to each element.</param>
 1124        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1125        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a projection string on each e
 1126        /// <example>
 1127        /// <code>
 1128        /// var singleField = queryable.Select("StringProperty");
 1129        /// var dynamicObject = queryable.Select("new (StringProperty1, StringProperty2 as OtherStringPropertyName)");
 1130        /// </code>
 1131        /// </example>
 1132        public static IQueryable Select([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] st
 941133        {
 941134            Check.NotNull(source, nameof(source));
 931135            Check.NotEmpty(selector, nameof(selector));
 1136
 901137            bool createParameterCtor = source.IsLinqToObjects();
 901138            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1139
 811140            var optimized = OptimizeExpression(Expression.Call(
 811141                typeof(Queryable), nameof(Queryable.Select),
 811142                new[] { source.ElementType, lambda.Body.Type },
 811143                source.Expression, Expression.Quote(lambda))
 811144            );
 1145
 811146            return source.Provider.CreateQuery(optimized);
 811147        }
 1148
 1149        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, string, object[])"/>
 1150        public static IQueryable Select([NotNull] this IQueryable source, [NotNull] string selector, params object[] arg
 941151        {
 941152            return Select(source, (ParsingConfig)null, selector, args);
 811153        }
 1154
 1155        /// <summary>
 1156        /// Projects each element of a sequence into a new class of type TResult.
 1157        /// Details see <see href="http://solutionizing.net/category/linq/"/>.
 1158        /// </summary>
 1159        /// <typeparam name="TResult">The type of the result.</typeparam>
 1160        /// <param name="source">A sequence of values to project.</param>
 1161        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1162        /// <param name="selector">A projection string expression to apply to each element.</param>
 1163        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1164        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a projection string 
 1165        /// <example>
 1166        /// <code language="cs">
 1167        /// <![CDATA[
 1168        /// var users = queryable.Select<User>("new (Username, Pwd as Password)");
 1169        /// ]]>
 1170        /// </code>
 1171        /// </example>
 1172        public static IQueryable<TResult> Select<TResult>([NotNull] this IQueryable source, [CanBeNull] ParsingConfig co
 271173        {
 271174            Check.NotNull(source, nameof(source));
 271175            Check.NotEmpty(selector, nameof(selector));
 1176
 271177            bool createParameterCtor = source.IsLinqToObjects();
 271178            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1179
 271180            var optimized = OptimizeExpression(Expression.Call(
 271181                typeof(Queryable), nameof(Queryable.Select),
 271182                new[] { source.ElementType, typeof(TResult) },
 271183                source.Expression, Expression.Quote(lambda)));
 1184
 271185            return source.Provider.CreateQuery<TResult>(optimized);
 271186        }
 1187
 1188        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, string, object[])"/>
 1189        public static IQueryable<TResult> Select<TResult>([NotNull] this IQueryable source, [NotNull] string selector, p
 271190        {
 271191            return Select<TResult>(source, null, selector, args);
 271192        }
 1193
 1194        /// <summary>
 1195        /// Projects each element of a sequence into a new class of type TResult.
 1196        /// Details see http://solutionizing.net/category/linq/
 1197        /// </summary>
 1198        /// <param name="source">A sequence of values to project.</param>
 1199        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1200        /// <param name="resultType">The result type.</param>
 1201        /// <param name="selector">A projection string expression to apply to each element.</param>
 1202        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1203        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a projection string 
 1204        /// <example>
 1205        /// <code>
 1206        /// var users = queryable.Select(typeof(User), "new (Username, Pwd as Password)");
 1207        /// </code>
 1208        /// </example>
 1209        public static IQueryable Select([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] Ty
 31210        {
 31211            Check.NotNull(source, nameof(source));
 31212            Check.NotNull(resultType, nameof(resultType));
 31213            Check.NotEmpty(selector, nameof(selector));
 1214
 31215            bool createParameterCtor = source.IsLinqToObjects();
 31216            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1217
 31218            var optimized = OptimizeExpression(Expression.Call(
 31219                typeof(Queryable), nameof(Queryable.Select),
 31220                new[] { source.ElementType, resultType },
 31221                source.Expression, Expression.Quote(lambda)));
 1222
 31223            return source.Provider.CreateQuery(optimized);
 31224        }
 1225
 1226        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, Type, string, object[])"/>
 1227        public static IQueryable Select([NotNull] this IQueryable source, [NotNull] Type resultType, [NotNull] string se
 31228        {
 31229            return Select(source, null, resultType, selector, args);
 31230        }
 1013        #region Page/PageResult
 1014        /// <summary>
 1015        /// Returns the elements as paged.
 1016        /// </summary>
 1017        /// <param name="source">The IQueryable to return elements from.</param>
 1018        /// <param name="page">The page to return.</param>
 1019        /// <param name="pageSize">The number of elements per page.</param>
 1020        /// <returns>A <see cref="IQueryable"/> that contains the paged elements.</returns>
 1021        public static IQueryable Page([NotNull] this IQueryable source, int page, int pageSize)
 41022        {
 41023            Check.NotNull(source, nameof(source));
 81024            Check.Condition(page, p => p > 0, nameof(page));
 81025            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1026
 41027            return source.Skip((page - 1) * pageSize).Take(pageSize);
 41028        }
 1029
 1030        /// <summary>
 1031        /// Returns the elements as paged.
 1032        /// </summary>
 1033        /// <typeparam name="TSource">The type of the source.</typeparam>
 1034        /// <param name="source">The IQueryable to return elements from.</param>
 1035        /// <param name="page">The page to return.</param>
 1036        /// <param name="pageSize">The number of elements per page.</param>
 1037        /// <returns>A <see cref="IQueryable{TSource}"/> that contains the paged elements.</returns>
 1038        public static IQueryable<TSource> Page<TSource>([NotNull] this IQueryable<TSource> source, int page, int pageSiz
 41039        {
 41040            Check.NotNull(source, nameof(source));
 81041            Check.Condition(page, p => p > 0, nameof(page));
 81042            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1043
 41044            return Queryable.Take(Queryable.Skip(source, (page - 1) * pageSize), pageSize);
 41045        }
 1046
 1047        /// <summary>
 1048        /// Returns the elements as paged and include the CurrentPage, PageCount, PageSize and RowCount.
 1049        /// </summary>
 1050        /// <param name="source">The IQueryable to return elements from.</param>
 1051        /// <param name="page">The page to return.</param>
 1052        /// <param name="pageSize">The number of elements per page.</param>
 1053        /// <returns>PagedResult</returns>
 1054        public static PagedResult PageResult([NotNull] this IQueryable source, int page, int pageSize)
 21055        {
 21056            Check.NotNull(source, nameof(source));
 41057            Check.Condition(page, p => p > 0, nameof(page));
 41058            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1059
 21060            var result = new PagedResult
 21061            {
 21062                CurrentPage = page,
 21063                PageSize = pageSize,
 21064                RowCount = source.Count()
 21065            };
 1066
 21067            result.PageCount = (int)Math.Ceiling((double)result.RowCount / pageSize);
 21068            result.Queryable = Page(source, page, pageSize);
 1069
 21070            return result;
 21071        }
 1072
 1073        /// <summary>
 1074        /// Returns the elements as paged and include the CurrentPage, PageCount, PageSize and RowCount.
 1075        /// </summary>
 1076        /// <typeparam name="TSource">The type of the source.</typeparam>
 1077        /// <param name="source">The IQueryable to return elements from.</param>
 1078        /// <param name="page">The page to return.</param>
 1079        /// <param name="pageSize">The number of elements per page.</param>
 1080        /// <returns>PagedResult{TSource}</returns>
 1081        public static PagedResult<TSource> PageResult<TSource>([NotNull] this IQueryable<TSource> source, int page, int 
 21082        {
 21083            Check.NotNull(source, nameof(source));
 41084            Check.Condition(page, p => p > 0, nameof(page));
 41085            Check.Condition(pageSize, ps => ps > 0, nameof(pageSize));
 1086
 21087            var result = new PagedResult<TSource>
 21088            {
 21089                CurrentPage = page,
 21090                PageSize = pageSize,
 21091                RowCount = Queryable.Count(source)
 21092            };
 1093
 21094            result.PageCount = (int)Math.Ceiling((double)result.RowCount / pageSize);
 21095            result.Queryable = Page(source, page, pageSize);
 1096
 21097            return result;
 21098        }
 1099        #endregion Page/PageResult
 1100
 1101        #region Reverse
 1102        /// <summary>
 1103        /// Inverts the order of the elements in a sequence.
 1104        /// </summary>
 1105        /// <param name="source">A sequence of values to reverse.</param>
 1106        /// <returns>A <see cref="IQueryable"/> whose elements correspond to those of the input sequence in reverse orde
 1107        public static IQueryable Reverse([NotNull] this IQueryable source)
 11108        {
 11109            Check.NotNull(source, nameof(source));
 1110
 11111            return Queryable.Reverse((IQueryable<object>)source);
 11112        }
 1113        #endregion Reverse
 1114
 1115        #region Select
 1116        /// <summary>
 1117        /// Projects each element of a sequence into a new form.
 1118        /// </summary>
 1119        /// <param name="source">A sequence of values to project.</param>
 1120        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1121        /// <param name="selector">A projection string expression to apply to each element.</param>
 1122        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1123        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a projection string on each e
 1124        /// <example>
 1125        /// <code>
 1126        /// var singleField = queryable.Select("StringProperty");
 1127        /// var dynamicObject = queryable.Select("new (StringProperty1, StringProperty2 as OtherStringPropertyName)");
 1128        /// </code>
 1129        /// </example>
 1130        public static IQueryable Select([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] st
 1001131        {
 1001132            Check.NotNull(source, nameof(source));
 991133            Check.NotEmpty(selector, nameof(selector));
 1134
 961135            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 961136            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1137
 871138            var optimized = OptimizeExpression(Expression.Call(
 871139                typeof(Queryable), nameof(Queryable.Select),
 871140                new[] { source.ElementType, lambda.Body.Type },
 871141                source.Expression, Expression.Quote(lambda))
 871142            );
 1143
 871144            return source.Provider.CreateQuery(optimized);
 871145        }
 1146
 1147        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, string, object[])"/>
 1148        public static IQueryable Select([NotNull] this IQueryable source, [NotNull] string selector, params object[] arg
 1001149        {
 1001150            return Select(source, (ParsingConfig)null, selector, args);
 871151        }
 1152
 1153        /// <summary>
 1154        /// Projects each element of a sequence into a new class of type TResult.
 1155        /// Details see <see href="http://solutionizing.net/category/linq/"/>.
 1156        /// </summary>
 1157        /// <typeparam name="TResult">The type of the result.</typeparam>
 1158        /// <param name="source">A sequence of values to project.</param>
 1159        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1160        /// <param name="selector">A projection string expression to apply to each element.</param>
 1161        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1162        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a projection string 
 1163        /// <example>
 1164        /// <code language="cs">
 1165        /// <![CDATA[
 1166        /// var users = queryable.Select<User>("new (Username, Pwd as Password)");
 1167        /// ]]>
 1168        /// </code>
 1169        /// </example>
 1170        public static IQueryable<TResult> Select<TResult>([NotNull] this IQueryable source, [CanBeNull] ParsingConfig co
 291171        {
 291172            Check.NotNull(source, nameof(source));
 291173            Check.NotEmpty(selector, nameof(selector));
 1174
 291175            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 291176            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1177
 291178            var optimized = OptimizeExpression(Expression.Call(
 291179                typeof(Queryable), nameof(Queryable.Select),
 291180                new[] { source.ElementType, typeof(TResult) },
 291181                source.Expression, Expression.Quote(lambda)));
 1182
 291183            return source.Provider.CreateQuery<TResult>(optimized);
 291184        }
 1185
 1186        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, string, object[])"/>
 1187        public static IQueryable<TResult> Select<TResult>([NotNull] this IQueryable source, [NotNull] string selector, p
 271188        {
 271189            return Select<TResult>(source, null, selector, args);
 271190        }
 1191
 1192        /// <summary>
 1193        /// Projects each element of a sequence into a new class of type TResult.
 1194        /// Details see http://solutionizing.net/category/linq/
 1195        /// </summary>
 1196        /// <param name="source">A sequence of values to project.</param>
 1197        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1198        /// <param name="resultType">The result type.</param>
 1199        /// <param name="selector">A projection string expression to apply to each element.</param>
 1200        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1201        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a projection string 
 1202        /// <example>
 1203        /// <code>
 1204        /// var users = queryable.Select(typeof(User), "new (Username, Pwd as Password)");
 1205        /// </code>
 1206        /// </example>
 1207        public static IQueryable Select([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] Ty
 31208        {
 31209            Check.NotNull(source, nameof(source));
 31210            Check.NotNull(resultType, nameof(resultType));
 31211            Check.NotEmpty(selector, nameof(selector));
 1212
 31213            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 31214            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1215
 31216            var optimized = OptimizeExpression(Expression.Call(
 31217                typeof(Queryable), nameof(Queryable.Select),
 31218                new[] { source.ElementType, resultType },
 31219                source.Expression, Expression.Quote(lambda)));
 1220
 31221            return source.Provider.CreateQuery(optimized);
 31222        }
 1223
 1224        /// <inheritdoc cref="Select(IQueryable, ParsingConfig, Type, string, object[])"/>
 1225        public static IQueryable Select([NotNull] this IQueryable source, [NotNull] Type resultType, [NotNull] string se
 31226        {
 31227            return Select(source, null, resultType, selector, args);
 31228        }
 1229
 1230        #endregion Select
 1231
 1232        #endregion Select
 1233
 1234        #region SelectMany
 1235        /// <summary>
 1236        /// Projects each element of a sequence to an <see cref="IQueryable"/> and combines the resulting sequences into
 1237        /// </summary>
 1238        /// <param name="source">A sequence of values to project.</param>
 1239        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1240        /// <param name="selector">A projection string expression to apply to each element.</param>
 1241        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1242        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a one-to-many projection func
 1243        /// <example>
 1244        /// <code>
 1245        /// var roles = users.SelectMany("Roles");
 1246        /// </code>
 1247        /// </example>
 1248        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 131249        {
 131250            Check.NotNull(source, nameof(source));
 131251            Check.NotEmpty(selector, nameof(selector));
 1252
 131253            return SelectManyInternal(source, config, null, selector, args);
 111254        }
 1255
 1256        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1257        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string selector, params object[]
 131258        {
 131259            return SelectMany(source, (ParsingConfig)null, selector, args);
 111260        }
 1261
 1262        /// <summary>
 1263        /// Projects each element of a sequence to an <see cref="IQueryable"/> and combines the resulting sequences into
 1264        /// </summary>
 1265        /// <param name="source">A sequence of values to project.</param>
 1266        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1267        /// <param name="selector">A projection string expression to apply to each element.</param>
 1268        /// <param name="resultType">The result type.</param>
 1269        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1270        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a one-to-many projection func
 1271        /// <example>
 1272        /// <code>
 1273        /// var permissions = users.SelectMany(typeof(Permission), "Roles.SelectMany(Permissions)");
 1274        /// </code>
 1275        /// </example>
 1276        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 21277        {
 21278            Check.NotNull(source, nameof(source));
 21279            Check.NotNull(resultType, nameof(resultType));
 21280            Check.NotEmpty(selector, nameof(selector));
 1281
 21282            return SelectManyInternal(source, config, resultType, selector, args);
 21283        }
 1284
 1285        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, Type, string, object[])"/>
 1286        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] Type resultType, [NotNull] strin
 21287        {
 21288            return SelectMany(source, null, resultType, selector, args);
 21289        }
 1290
 1291        private static IQueryable SelectManyInternal(IQueryable source, ParsingConfig config, Type resultType, string se
 151292        {
 151293            bool createParameterCtor = source.IsLinqToObjects();
 151294            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1295
 1296            //Extra help to get SelectMany to work from StackOverflow Answer
 1297            //http://stackoverflow.com/a/3001674/2465182
 1298
 1299            // if resultType is not specified, create one based on the lambda.Body.Type
 131300             if (resultType == null)
 111301            {
 1302                // SelectMany assumes that lambda.Body.Type is a generic type and throws an exception on
 1303                // lambda.Body.Type.GetGenericArguments()[0] when used over an array as GetGenericArguments() returns an
 111304                 if (lambda.Body.Type.IsArray)
 61305                {
 61306                    resultType = lambda.Body.Type.GetElementType();
 61307                }
 1308                else
 51309                {
 51310                    resultType = lambda.Body.Type.GetGenericArguments()[0];
 51311                }
 111312            }
 1313
 1314            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 131315            Type enumerableType = typeof(IEnumerable<>).MakeGenericType(resultType);
 131316            Type inputType = source.Expression.Type.GetTypeInfo().GetGenericTypeArguments()[0];
 131317            Type delegateType = typeof(Func<,>).MakeGenericType(inputType, enumerableType);
 131318            lambda = Expression.Lambda(delegateType, lambda.Body, lambda.Parameters);
 1319
 131320            var optimized = OptimizeExpression(Expression.Call(
 131321                typeof(Queryable), nameof(Queryable.SelectMany),
 131322                new[] { source.ElementType, resultType },
 131323                source.Expression, Expression.Quote(lambda))
 131324            );
 1325
 131326            return source.Provider.CreateQuery(optimized);
 131327        }
 1328
 1329        /// <summary>
 1330        /// Projects each element of a sequence to an <see cref="IQueryable{TResult}"/> and combines the resulting seque
 1331        /// </summary>
 1332        /// <typeparam name="TResult">The type of the result.</typeparam>
 1333        /// <param name="source">A sequence of values to project.</param>
 1334        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1335        /// <param name="selector">A projection string expression to apply to each element.</param>
 1336        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1337        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a one-to-many projec
 1338        /// <example>
 1339        /// <code>
 1340        /// <![CDATA[
 1341        /// var permissions = users.SelectMany<Permission>("Roles.SelectMany(Permissions)");
 1342        /// ]]>
 1343        /// </code>
 1344        /// </example>
 1345        public static IQueryable<TResult> SelectMany<TResult>([NotNull] this IQueryable source, [CanBeNull] ParsingConfi
 21346        {
 21347            Check.NotNull(source, nameof(source));
 21348            Check.NotEmpty(selector, nameof(selector));
 1349
 21350            bool createParameterCtor = source.IsLinqToObjects();
 21351            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(createParameterCtor, source.ElementType, null,
 1352
 1353            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 21354            Type inputType = source.Expression.Type.GetTypeInfo().GetGenericTypeArguments()[0];
 21355            Type enumerableType = typeof(IEnumerable<>).MakeGenericType(typeof(TResult));
 21356            Type delegateType = typeof(Func<,>).MakeGenericType(inputType, enumerableType);
 21357            lambda = Expression.Lambda(delegateType, lambda.Body, lambda.Parameters);
 1358
 21359            var optimized = OptimizeExpression(Expression.Call(
 21360                typeof(Queryable), nameof(Queryable.SelectMany),
 21361                new[] { source.ElementType, typeof(TResult) },
 21362                source.Expression, Expression.Quote(lambda))
 21363            );
 1364
 21365            return source.Provider.CreateQuery<TResult>(optimized);
 21366        }
 1367
 1368        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1369        public static IQueryable<TResult> SelectMany<TResult>([NotNull] this IQueryable source, [NotNull] string selecto
 21370        {
 21371            return SelectMany<TResult>(source, null, selector, args);
 21372        }
 1373
 1374        /// <summary>
 1375        /// Projects each element of a sequence to an <see cref="IQueryable"/>
 1376        /// and invokes a result selector function on each element therein. The resulting
 1377        /// values from each intermediate sequence are combined into a single, one-dimensional
 1378        /// sequence and returned.
 1379        /// </summary>
 1380        /// <param name="source">A sequence of values to project.</param>
 1381        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1382        /// <param name="collectionSelector">A projection function to apply to each element of the input sequence.</para
 1383        /// <param name="resultSelector">A projection function to apply to each element of each intermediate sequence. S
 1384        /// <param name="collectionSelectorArgs">An object array that contains zero or more objects to insert into the p
 1385        /// <param name="resultSelectorArgs">An object array that contains zero or more objects to insert into the predi
 1386        /// <returns>
 1387        /// An <see cref="IQueryable"/> whose elements are the result of invoking the one-to-many
 1388        /// projection function <paramref name="collectionSelector"/> on each element of source and then mapping
 1389        /// each of those sequence elements and their corresponding source element to a result element.
 1390        /// </returns>
 1391        /// <example>
 1392        /// <code>
 1393        /// <![CDATA[
 1394        /// // TODO
 1395        /// ]]>
 1396        /// </code>
 1397        /// </example>
 1398        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 01399        {
 01400            return SelectMany(source, collectionSelector, resultSelector, "x", "y", collectionSelectorArgs, resultSelect
 01401        }
 1402
 1403        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1404        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string collectionSelector, [NotN
 11405        {
 11406            return SelectMany(source, null, collectionSelector, resultSelector, "x", "y", collectionSelectorArgs, result
 11407        }
 1408
 1409        /// <summary>
 1410        /// Projects each element of a sequence to an <see cref="IQueryable"/>
 1411        /// and invokes a result selector function on each element therein. The resulting
 1412        /// values from each intermediate sequence are combined into a single, one-dimensional
 1413        /// sequence and returned.
 1414        /// </summary>
 1415        /// <param name="source">A sequence of values to project.</param>
 1416        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1417        /// <param name="collectionSelector">A projection function to apply to each element of the input sequence.</para
 1418        /// <param name="collectionParameterName">The name from collectionParameter to use. Default is x.</param>
 1419        /// <param name="resultSelector">A projection function to apply to each element of each intermediate sequence.</
 1420        /// <param name="resultParameterName">The name from resultParameterName to use. Default is y.</param>
 1421        /// <param name="collectionSelectorArgs">An object array that contains zero or more objects to insert into the p
 1422        /// <param name="resultSelectorArgs">An object array that contains zero or more objects to insert into the predi
 1423        /// <returns>
 1424        /// An <see cref="IQueryable"/> whose elements are the result of invoking the one-to-many
 1425        /// projection function <paramref name="collectionSelector"/> on each element of source and then mapping
 1426        /// each of those sequence elements and their corresponding source element to a result element.
 1427        /// </returns>
 1428        /// <example>
 1429        /// <code>
 1430        /// <![CDATA[
 1431        /// // TODO
 1432        /// ]]>
 1433        /// </code>
 1434        /// </example>
 1435        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 21436        {
 21437            Check.NotNull(source, nameof(source));
 21438            Check.NotEmpty(collectionSelector, nameof(collectionSelector));
 21439            Check.NotEmpty(collectionParameterName, nameof(collectionParameterName));
 21440            Check.NotEmpty(resultSelector, nameof(resultSelector));
 21441            Check.NotEmpty(resultParameterName, nameof(resultParameterName));
 1442
 21443            bool createParameterCtor = source.IsLinqToObjects();
 21444            LambdaExpression sourceSelectLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, sourc
 1445
 1446            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 21447            Type sourceLambdaInputType = source.Expression.Type.GetGenericArguments()[0];
 21448            Type sourceLambdaResultType = sourceSelectLambda.Body.Type.GetGenericArguments()[0];
 21449            Type sourceLambdaEnumerableType = typeof(IEnumerable<>).MakeGenericType(sourceLambdaResultType);
 21450            Type sourceLambdaDelegateType = typeof(Func<,>).MakeGenericType(sourceLambdaInputType, sourceLambdaEnumerabl
 1232        #region SelectMany
 1233        /// <summary>
 1234        /// Projects each element of a sequence to an <see cref="IQueryable"/> and combines the resulting sequences into
 1235        /// </summary>
 1236        /// <param name="source">A sequence of values to project.</param>
 1237        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1238        /// <param name="selector">A projection string expression to apply to each element.</param>
 1239        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1240        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a one-to-many projection func
 1241        /// <example>
 1242        /// <code>
 1243        /// var roles = users.SelectMany("Roles");
 1244        /// </code>
 1245        /// </example>
 1246        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 131247        {
 131248            Check.NotNull(source, nameof(source));
 131249            Check.NotEmpty(selector, nameof(selector));
 1250
 131251            return SelectManyInternal(source, config, null, selector, args);
 111252        }
 1253
 1254        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1255        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string selector, params object[]
 131256        {
 131257            return SelectMany(source, (ParsingConfig)null, selector, args);
 111258        }
 1259
 1260        /// <summary>
 1261        /// Projects each element of a sequence to an <see cref="IQueryable"/> and combines the resulting sequences into
 1262        /// </summary>
 1263        /// <param name="source">A sequence of values to project.</param>
 1264        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1265        /// <param name="selector">A projection string expression to apply to each element.</param>
 1266        /// <param name="resultType">The result type.</param>
 1267        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1268        /// <returns>An <see cref="IQueryable"/> whose elements are the result of invoking a one-to-many projection func
 1269        /// <example>
 1270        /// <code>
 1271        /// var permissions = users.SelectMany(typeof(Permission), "Roles.SelectMany(Permissions)");
 1272        /// </code>
 1273        /// </example>
 1274        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 21275        {
 21276            Check.NotNull(source, nameof(source));
 21277            Check.NotNull(resultType, nameof(resultType));
 21278            Check.NotEmpty(selector, nameof(selector));
 1279
 21280            return SelectManyInternal(source, config, resultType, selector, args);
 21281        }
 1282
 1283        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, Type, string, object[])"/>
 1284        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] Type resultType, [NotNull] strin
 21285        {
 21286            return SelectMany(source, null, resultType, selector, args);
 21287        }
 1288
 1289        private static IQueryable SelectManyInternal(IQueryable source, ParsingConfig config, Type resultType, string se
 151290        {
 151291            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 151292            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1293
 1294            //Extra help to get SelectMany to work from StackOverflow Answer
 1295            //http://stackoverflow.com/a/3001674/2465182
 1296
 1297            // if resultType is not specified, create one based on the lambda.Body.Type
 131298            if (resultType == null)
 111299            {
 1300                // SelectMany assumes that lambda.Body.Type is a generic type and throws an exception on
 1301                // lambda.Body.Type.GetGenericArguments()[0] when used over an array as GetGenericArguments() returns an
 111302                if (lambda.Body.Type.IsArray)
 61303                {
 61304                    resultType = lambda.Body.Type.GetElementType();
 61305                }
 1306                else
 51307                {
 51308                    resultType = lambda.Body.Type.GetGenericArguments()[0];
 51309                }
 111310            }
 1311
 1312            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 131313            Type enumerableType = typeof(IEnumerable<>).MakeGenericType(resultType);
 131314            Type inputType = source.Expression.Type.GetTypeInfo().GetGenericTypeArguments()[0];
 131315            Type delegateType = typeof(Func<,>).MakeGenericType(inputType, enumerableType);
 131316            lambda = Expression.Lambda(delegateType, lambda.Body, lambda.Parameters);
 1317
 131318            var optimized = OptimizeExpression(Expression.Call(
 131319                typeof(Queryable), nameof(Queryable.SelectMany),
 131320                new[] { source.ElementType, resultType },
 131321                source.Expression, Expression.Quote(lambda))
 131322            );
 1323
 131324            return source.Provider.CreateQuery(optimized);
 131325        }
 1326
 1327        /// <summary>
 1328        /// Projects each element of a sequence to an <see cref="IQueryable{TResult}"/> and combines the resulting seque
 1329        /// </summary>
 1330        /// <typeparam name="TResult">The type of the result.</typeparam>
 1331        /// <param name="source">A sequence of values to project.</param>
 1332        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1333        /// <param name="selector">A projection string expression to apply to each element.</param>
 1334        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1335        /// <returns>An <see cref="IQueryable{TResult}"/> whose elements are the result of invoking a one-to-many projec
 1336        /// <example>
 1337        /// <code>
 1338        /// <![CDATA[
 1339        /// var permissions = users.SelectMany<Permission>("Roles.SelectMany(Permissions)");
 1340        /// ]]>
 1341        /// </code>
 1342        /// </example>
 1343        public static IQueryable<TResult> SelectMany<TResult>([NotNull] this IQueryable source, [CanBeNull] ParsingConfi
 21344        {
 21345            Check.NotNull(source, nameof(source));
 21346            Check.NotEmpty(selector, nameof(selector));
 1347
 21348            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 21349            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(createParameterCtor, source.ElementType, null,
 1350
 1351            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 21352            Type inputType = source.Expression.Type.GetTypeInfo().GetGenericTypeArguments()[0];
 21353            Type enumerableType = typeof(IEnumerable<>).MakeGenericType(typeof(TResult));
 21354            Type delegateType = typeof(Func<,>).MakeGenericType(inputType, enumerableType);
 21355            lambda = Expression.Lambda(delegateType, lambda.Body, lambda.Parameters);
 1356
 21357            var optimized = OptimizeExpression(Expression.Call(
 21358                typeof(Queryable), nameof(Queryable.SelectMany),
 21359                new[] { source.ElementType, typeof(TResult) },
 21360                source.Expression, Expression.Quote(lambda))
 21361            );
 1362
 21363            return source.Provider.CreateQuery<TResult>(optimized);
 21364        }
 1365
 1366        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1367        public static IQueryable<TResult> SelectMany<TResult>([NotNull] this IQueryable source, [NotNull] string selecto
 21368        {
 21369            return SelectMany<TResult>(source, null, selector, args);
 21370        }
 1371
 1372        /// <summary>
 1373        /// Projects each element of a sequence to an <see cref="IQueryable"/>
 1374        /// and invokes a result selector function on each element therein. The resulting
 1375        /// values from each intermediate sequence are combined into a single, one-dimensional
 1376        /// sequence and returned.
 1377        /// </summary>
 1378        /// <param name="source">A sequence of values to project.</param>
 1379        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1380        /// <param name="collectionSelector">A projection function to apply to each element of the input sequence.</para
 1381        /// <param name="resultSelector">A projection function to apply to each element of each intermediate sequence. S
 1382        /// <param name="collectionSelectorArgs">An object array that contains zero or more objects to insert into the p
 1383        /// <param name="resultSelectorArgs">An object array that contains zero or more objects to insert into the predi
 1384        /// <returns>
 1385        /// An <see cref="IQueryable"/> whose elements are the result of invoking the one-to-many
 1386        /// projection function <paramref name="collectionSelector"/> on each element of source and then mapping
 1387        /// each of those sequence elements and their corresponding source element to a result element.
 1388        /// </returns>
 1389        /// <example>
 1390        /// <code>
 1391        /// <![CDATA[
 1392        /// // TODO
 1393        /// ]]>
 1394        /// </code>
 1395        /// </example>
 1396        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 01397        {
 01398            return SelectMany(source, collectionSelector, resultSelector, "x", "y", collectionSelectorArgs, resultSelect
 01399        }
 1400
 1401        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, object[])"/>
 1402        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string collectionSelector, [NotN
 11403        {
 11404            return SelectMany(source, null, collectionSelector, resultSelector, "x", "y", collectionSelectorArgs, result
 11405        }
 1406
 1407        /// <summary>
 1408        /// Projects each element of a sequence to an <see cref="IQueryable"/>
 1409        /// and invokes a result selector function on each element therein. The resulting
 1410        /// values from each intermediate sequence are combined into a single, one-dimensional
 1411        /// sequence and returned.
 1412        /// </summary>
 1413        /// <param name="source">A sequence of values to project.</param>
 1414        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1415        /// <param name="collectionSelector">A projection function to apply to each element of the input sequence.</para
 1416        /// <param name="collectionParameterName">The name from collectionParameter to use. Default is x.</param>
 1417        /// <param name="resultSelector">A projection function to apply to each element of each intermediate sequence.</
 1418        /// <param name="resultParameterName">The name from resultParameterName to use. Default is y.</param>
 1419        /// <param name="collectionSelectorArgs">An object array that contains zero or more objects to insert into the p
 1420        /// <param name="resultSelectorArgs">An object array that contains zero or more objects to insert into the predi
 1421        /// <returns>
 1422        /// An <see cref="IQueryable"/> whose elements are the result of invoking the one-to-many
 1423        /// projection function <paramref name="collectionSelector"/> on each element of source and then mapping
 1424        /// each of those sequence elements and their corresponding source element to a result element.
 1425        /// </returns>
 1426        /// <example>
 1427        /// <code>
 1428        /// <![CDATA[
 1429        /// // TODO
 1430        /// ]]>
 1431        /// </code>
 1432        /// </example>
 1433        public static IQueryable SelectMany([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull
 21434        {
 21435            Check.NotNull(source, nameof(source));
 21436            Check.NotEmpty(collectionSelector, nameof(collectionSelector));
 21437            Check.NotEmpty(collectionParameterName, nameof(collectionParameterName));
 21438            Check.NotEmpty(resultSelector, nameof(resultSelector));
 21439            Check.NotEmpty(resultParameterName, nameof(resultParameterName));
 1440
 21441            bool createParameterCtor = config?.EvaluateGroupByAtDatabase ?? source.IsLinqToObjects();
 21442            LambdaExpression sourceSelectLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, sourc
 1443
 1444            //we have to adjust to lambda to return an IEnumerable<T> instead of whatever the actual property is.
 21445            Type sourceLambdaInputType = source.Expression.Type.GetGenericArguments()[0];
 21446            Type sourceLambdaResultType = sourceSelectLambda.Body.Type.GetGenericArguments()[0];
 21447            Type sourceLambdaEnumerableType = typeof(IEnumerable<>).MakeGenericType(sourceLambdaResultType);
 21448            Type sourceLambdaDelegateType = typeof(Func<,>).MakeGenericType(sourceLambdaInputType, sourceLambdaEnumerabl
 1449
 21450            sourceSelectLambda = Expression.Lambda(sourceLambdaDelegateType, sourceSelectLambda.Body, sourceSelectLambda
 1451
 21452            sourceSelectLambda = Expression.Lambda(sourceLambdaDelegateType, sourceSelectLambda.Body, sourceSelectLambda
 1453
 1454            //we have to create additional lambda for result selection
 21455            ParameterExpression xParameter = ParameterExpressionHelper.CreateParameterExpression(source.ElementType, col
 21456            ParameterExpression yParameter = ParameterExpressionHelper.CreateParameterExpression(sourceLambdaResultType,
 1457
 21458            LambdaExpression resultSelectLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, new[]
 21459            Type resultLambdaResultType = resultSelectLambda.Body.Type;
 1460
 21461            var optimized = OptimizeExpression(Expression.Call(
 21462                typeof(Queryable), nameof(Queryable.SelectMany),
 21463                new[] { source.ElementType, sourceLambdaResultType, resultLambdaResultType },
 21464                source.Expression, Expression.Quote(sourceSelectLambda), Expression.Quote(resultSelectLambda))
 21465            );
 1466
 21467            return source.Provider.CreateQuery(optimized);
 21468        }
 1469
 1470        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, string, string, string, object[], object[])"
 1471        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string collectionSelector, [NotN
 11472        {
 11473            return SelectMany(source, null, collectionSelector, resultSelector, collectionParameterName, resultParameter
 11474        }
 1452            //we have to create additional lambda for result selection
 21453            ParameterExpression xParameter = ParameterExpressionHelper.CreateParameterExpression(source.ElementType, col
 21454            ParameterExpression yParameter = ParameterExpressionHelper.CreateParameterExpression(sourceLambdaResultType,
 1455
 21456            LambdaExpression resultSelectLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, new[]
 21457            Type resultLambdaResultType = resultSelectLambda.Body.Type;
 1458
 21459            var optimized = OptimizeExpression(Expression.Call(
 21460                typeof(Queryable), nameof(Queryable.SelectMany),
 21461                new[] { source.ElementType, sourceLambdaResultType, resultLambdaResultType },
 21462                source.Expression, Expression.Quote(sourceSelectLambda), Expression.Quote(resultSelectLambda))
 21463            );
 1464
 21465            return source.Provider.CreateQuery(optimized);
 21466        }
 1467
 1468        /// <inheritdoc cref="SelectMany(IQueryable, ParsingConfig, string, string, string, string, object[], object[])"
 1469        public static IQueryable SelectMany([NotNull] this IQueryable source, [NotNull] string collectionSelector, [NotN
 11470        {
 11471            return SelectMany(source, null, collectionSelector, resultSelector, collectionParameterName, resultParameter
 11472        }
 1473
 1474        #endregion SelectMany
 1475
 1476        #endregion SelectMany
 1477
 1478        #region Single/SingleOrDefault
 1479        /// <summary>
 1480        /// Returns the only element of a sequence, and throws an exception if there
 1481        /// is not exactly one element in the sequence.
 1482        /// </summary>
 1483        /// <param name="source">A <see cref="IQueryable"/> to return the single element of.</param>
 1484        /// <returns>The single element of the input sequence.</returns>
 1485#if NET35
 1486        public static object Single([NotNull] this IQueryable source)
 1487#else
 1488        public static dynamic Single([NotNull] this IQueryable source)
 1489#endif
 581490        {
 581491            Check.NotNull(source, nameof(source));
 1492
 581493            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Single), new[] { sour
 581494            return source.Provider.Execute(optimized);
 581495        }
 1476        #region Single/SingleOrDefault
 1477        /// <summary>
 1478        /// Returns the only element of a sequence, and throws an exception if there
 1479        /// is not exactly one element in the sequence.
 1480        /// </summary>
 1481        /// <param name="source">A <see cref="IQueryable"/> to return the single element of.</param>
 1482        /// <returns>The single element of the input sequence.</returns>
 1483#if NET35
 1484        public static object Single([NotNull] this IQueryable source)
 1485#else
 1486        public static dynamic Single([NotNull] this IQueryable source)
 1487#endif
 581488        {
 581489            Check.NotNull(source, nameof(source));
 1490
 581491            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Single), new[] { sour
 581492            return source.Provider.Execute(optimized);
 581493        }
 1494
 11495        private static readonly MethodInfo _singlePredicate = GetMethod(nameof(Queryable.Single), 1);
 1496
 11497        private static readonly MethodInfo _singlePredicate = GetMethod(nameof(Queryable.Single), 1);
 1498
 1499        /// <summary>
 1500        /// Returns the only element of a sequence that satisfies a specified condition, and throws an exception if ther
 1501        /// is not exactly one element in the sequence.
 1502        /// </summary>
 1503        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1504        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1505        /// <param name="predicate">A function to test each element for a condition.</param>
 1506        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1507        /// <returns>The first element in source that passes the test in predicate.</returns>
 1508#if NET35
 1509        public static object Single([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string
 1510#else
 1511        public static dynamic Single([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] strin
 1512#endif
 21513        {
 21514            Check.NotNull(source, nameof(source));
 21515            Check.NotEmpty(predicate, nameof(predicate));
 1516
 21517            bool createParameterCtor = source.IsLinqToObjects();
 21518            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1519
 21520            return Execute(_singlePredicate, source, lambda);
 21521        }
 1522
 1523        /// <inheritdoc cref="Single(IQueryable, ParsingConfig, string, object[])"/>
 1524#if NET35
 1525        public static object Single([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 1526#else
 1527        public static dynamic Single([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 1528#endif
 11529        {
 11530            return Single(source, null, predicate, args);
 11531        }
 1532
 1533        /// <summary>
 1534        /// Returns the only element of a sequence that satisfies a specified condition, and throws an exception if ther
 1535        /// is not exactly one element in the sequence.
 1536        /// </summary>
 1537        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1538        /// <param name="lambda">A cached Lambda Expression.</param>
 1539        /// <returns>The first element in source that passes the test in predicate.</returns>
 1540#if NET35
 1541        public static object Single([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1542#else
 1543        public static dynamic Single([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1544#endif
 11545        {
 11546            Check.NotNull(source, nameof(source));
 11547            return Execute(_singlePredicate, source, lambda);
 11548        }
 1549
 1550        /// <summary>
 1551        /// Returns the only element of a sequence, or a default value if the sequence
 1552        /// is empty; this method throws an exception if there is more than one element
 1553        /// in the sequence.
 1554        /// </summary>
 1555        /// <param name="source">A <see cref="IQueryable"/> to return the single element of.</param>
 1556        /// <returns>The single element of the input sequence, or default if the sequence contains no elements.</returns
 1557#if NET35
 1558        public static object SingleOrDefault([NotNull] this IQueryable source)
 1559#else
 1560        public static dynamic SingleOrDefault([NotNull] this IQueryable source)
 1561#endif
 21562        {
 21563            Check.NotNull(source, nameof(source));
 1564
 21565            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.SingleOrDefault), new
 21566            return source.Provider.Execute(optimized);
 21567        }
 1497        /// <summary>
 1498        /// Returns the only element of a sequence that satisfies a specified condition, and throws an exception if ther
 1499        /// is not exactly one element in the sequence.
 1500        /// </summary>
 1501        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1502        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1503        /// <param name="predicate">A function to test each element for a condition.</param>
 1504        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1505        /// <returns>The first element in source that passes the test in predicate.</returns>
 1506#if NET35
 1507        public static object Single([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] string
 1508#else
 1509        public static dynamic Single([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] strin
 1510#endif
 21511        {
 21512            Check.NotNull(source, nameof(source));
 21513            Check.NotEmpty(predicate, nameof(predicate));
 1514
 21515            bool createParameterCtor = source.IsLinqToObjects();
 21516            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1517
 21518            return Execute(_singlePredicate, source, lambda);
 21519        }
 1520
 1521        /// <inheritdoc cref="Single(IQueryable, ParsingConfig, string, object[])"/>
 1522#if NET35
 1523        public static object Single([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 1524#else
 1525        public static dynamic Single([NotNull] this IQueryable source, [NotNull] string predicate, params object[] args)
 1526#endif
 11527        {
 11528            return Single(source, null, predicate, args);
 11529        }
 1530
 1531        /// <summary>
 1532        /// Returns the only element of a sequence that satisfies a specified condition, and throws an exception if ther
 1533        /// is not exactly one element in the sequence.
 1534        /// </summary>
 1535        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1536        /// <param name="lambda">A cached Lambda Expression.</param>
 1537        /// <returns>The first element in source that passes the test in predicate.</returns>
 1538#if NET35
 1539        public static object Single([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1540#else
 1541        public static dynamic Single([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1542#endif
 11543        {
 11544            Check.NotNull(source, nameof(source));
 11545            return Execute(_singlePredicate, source, lambda);
 11546        }
 1547
 1548        /// <summary>
 1549        /// Returns the only element of a sequence, or a default value if the sequence
 1550        /// is empty; this method throws an exception if there is more than one element
 1551        /// in the sequence.
 1552        /// </summary>
 1553        /// <param name="source">A <see cref="IQueryable"/> to return the single element of.</param>
 1554        /// <returns>The single element of the input sequence, or default if the sequence contains no elements.</returns
 1555#if NET35
 1556        public static object SingleOrDefault([NotNull] this IQueryable source)
 1557#else
 1558        public static dynamic SingleOrDefault([NotNull] this IQueryable source)
 1559#endif
 21560        {
 21561            Check.NotNull(source, nameof(source));
 1562
 21563            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.SingleOrDefault), new
 21564            return source.Provider.Execute(optimized);
 21565        }
 1566
 11567        private static readonly MethodInfo _singleDefaultPredicate = GetMethod(nameof(Queryable.SingleOrDefault), 1);
 1568
 11569        private static readonly MethodInfo _singleDefaultPredicate = GetMethod(nameof(Queryable.SingleOrDefault), 1);
 1570
 1571        /// <summary>
 1572        /// Returns the only element of a sequence that satisfies a specified condition or a default value if the sequen
 1573        /// is empty; and throws an exception if there is not exactly one element in the sequence.
 1574        /// </summary>
 1575        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1576        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1577        /// <param name="predicate">A function to test each element for a condition.</param>
 1578        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1579        /// <returns>The first element in source that passes the test in predicate.</returns>
 1580#if NET35
 1581        public static object SingleOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNul
 1582#else
 1583        public static dynamic SingleOrDefault([NotNull] this IQueryable source,  [CanBeNull] ParsingConfig config, [NotN
 1584#endif
 21585        {
 21586            Check.NotNull(source, nameof(source));
 21587            Check.NotEmpty(predicate, nameof(predicate));
 1588
 21589            bool createParameterCtor = source.IsLinqToObjects();
 21590            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1591
 21592            return Execute(_singleDefaultPredicate, source, lambda);
 21593        }
 1594
 1595        /// <inheritdoc cref="SingleOrDefault(IQueryable, ParsingConfig, string, object[])"/>
 1596#if NET35
 1597        public static object SingleOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object
 1598#else
 1599        public static dynamic SingleOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params objec
 1600#endif
 11601        {
 11602            return SingleOrDefault(source, null, predicate, args);
 11603        }
 1604
 1605        /// <summary>
 1606        /// Returns the only element of a sequence that satisfies a specified condition or a default value if the sequen
 1607        /// is empty; and throws an exception if there is not exactly one element in the sequence.
 1608        /// </summary>
 1609        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1610        /// <param name="lambda">A cached Lambda Expression.</param>
 1611        /// <returns>The first element in source that passes the test in predicate.</returns>
 1612#if NET35
 1613        public static object SingleOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1614#else
 1615        public static dynamic SingleOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1616#endif
 11617        {
 11618            Check.NotNull(source, nameof(source));
 11619            return Execute(_singleDefaultPredicate, source, lambda);
 11620        }
 1621        #endregion Single/SingleOrDefault
 1622
 1623        #region Skip
 11624        private static readonly MethodInfo _skip = GetMethod(nameof(Queryable.Skip), 1);
 1625
 1626        /// <summary>
 1627        /// Bypasses a specified number of elements in a sequence and then returns the remaining elements.
 1628        /// </summary>
 1629        /// <param name="source">A <see cref="IQueryable"/> to return elements from.</param>
 1630        /// <param name="count">The number of elements to skip before returning the remaining elements.</param>
 1631        /// <returns>A <see cref="IQueryable"/> that contains elements that occur after the specified index in the input
 1632        public static IQueryable Skip([NotNull] this IQueryable source, int count)
 101633        {
 101634            Check.NotNull(source, nameof(source));
 201635            Check.Condition(count, x => x >= 0, nameof(count));
 1636
 1637            //no need to skip if count is zero
 101638             if (count == 0)
 11639                return source;
 1640
 91641            return CreateQuery(_skip, source, Expression.Constant(count));
 101642        }
 1643        #endregion Skip
 1569        /// <summary>
 1570        /// Returns the only element of a sequence that satisfies a specified condition or a default value if the sequen
 1571        /// is empty; and throws an exception if there is not exactly one element in the sequence.
 1572        /// </summary>
 1573        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1574        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1575        /// <param name="predicate">A function to test each element for a condition.</param>
 1576        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1577        /// <returns>The first element in source that passes the test in predicate.</returns>
 1578#if NET35
 1579        public static object SingleOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNul
 1580#else
 1581        public static dynamic SingleOrDefault([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNu
 1582#endif
 21583        {
 21584            Check.NotNull(source, nameof(source));
 21585            Check.NotEmpty(predicate, nameof(predicate));
 1586
 21587            bool createParameterCtor = source.IsLinqToObjects();
 21588            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1589
 21590            return Execute(_singleDefaultPredicate, source, lambda);
 21591        }
 1592
 1593        /// <inheritdoc cref="SingleOrDefault(IQueryable, ParsingConfig, string, object[])"/>
 1594#if NET35
 1595        public static object SingleOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params object
 1596#else
 1597        public static dynamic SingleOrDefault([NotNull] this IQueryable source, [NotNull] string predicate, params objec
 1598#endif
 11599        {
 11600            return SingleOrDefault(source, null, predicate, args);
 11601        }
 1602
 1603        /// <summary>
 1604        /// Returns the only element of a sequence that satisfies a specified condition or a default value if the sequen
 1605        /// is empty; and throws an exception if there is not exactly one element in the sequence.
 1606        /// </summary>
 1607        /// <param name="source">The <see cref="IQueryable"/> to return the last element of.</param>
 1608        /// <param name="lambda">A cached Lambda Expression.</param>
 1609        /// <returns>The first element in source that passes the test in predicate.</returns>
 1610#if NET35
 1611        public static object SingleOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1612#else
 1613        public static dynamic SingleOrDefault([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 1614#endif
 11615        {
 11616            Check.NotNull(source, nameof(source));
 11617            return Execute(_singleDefaultPredicate, source, lambda);
 11618        }
 1619        #endregion Single/SingleOrDefault
 1620
 1621        #region Skip
 11622        private static readonly MethodInfo _skip = GetMethod(nameof(Queryable.Skip), 1);
 1623
 1624        /// <summary>
 1625        /// Bypasses a specified number of elements in a sequence and then returns the remaining elements.
 1626        /// </summary>
 1627        /// <param name="source">A <see cref="IQueryable"/> to return elements from.</param>
 1628        /// <param name="count">The number of elements to skip before returning the remaining elements.</param>
 1629        /// <returns>A <see cref="IQueryable"/> that contains elements that occur after the specified index in the input
 1630        public static IQueryable Skip([NotNull] this IQueryable source, int count)
 101631        {
 101632            Check.NotNull(source, nameof(source));
 201633            Check.Condition(count, x => x >= 0, nameof(count));
 1634
 1635            //no need to skip if count is zero
 101636            if (count == 0)
 11637                return source;
 1638
 91639            return CreateQuery(_skip, source, Expression.Constant(count));
 101640        }
 1641        #endregion Skip
 1642
 1643        #region SkipWhile
 1644
 1645        #region SkipWhile
 1646
 11647        private static readonly MethodInfo _skipWhilePredicate = GetMethod(nameof(Queryable.SkipWhile), 1, mi =>
 31648        {
 31649            return mi.GetParameters().Length == 2 &&
 31650                   mi.GetParameters()[1].ParameterType.GetTypeInfo().IsGenericType &&
 31651                   mi.GetParameters()[1].ParameterType.GetGenericTypeDefinition() == typeof(Expression<>) &&
 31652                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetTypeInfo().IsGenericType &&
 31653                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetGenericTypeDefinition() == typeof(Fun
 31654        });
 1655
 1656        /// <summary>
 1657        /// Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elem
 1658        /// </summary>
 1659        /// <param name="source">A sequence to check for being empty.</param>
 1660        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1661        /// <param name="predicate">A function to test each element for a condition.</param>
 1662        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1663        /// <example>
 1664        /// <code language="cs">
 1665        /// IQueryable queryable = employees.AsQueryable();
 1666        /// var result1 = queryable.SkipWhile("Income > 50");
 1667        /// var result2 = queryable.SkipWhile("Income > @0", 50);
 1668        /// </code>
 1669        /// </example>
 1670        /// <returns>An <see cref="IQueryable"/> that contains elements from source starting at the first element in the
 1671        public static IQueryable SkipWhile([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 31672        {
 31673            Check.NotNull(source, nameof(source));
 31674            Check.NotNull(predicate, nameof(predicate));
 1675
 31676            bool createParameterCtor = source.IsLinqToObjects();
 31677            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1678
 31679            return CreateQuery(_skipWhilePredicate, source, lambda);
 31680        }
 1681
 1682        /// <inheritdoc cref="SkipWhile(IQueryable, ParsingConfig, string, object[])"/>
 1683        public static IQueryable SkipWhile([NotNull] this IQueryable source, [NotNull] string predicate, [CanBeNull] par
 21684        {
 21685            return SkipWhile(source, null, predicate, args);
 21686        }
 11645        private static readonly MethodInfo _skipWhilePredicate = GetMethod(nameof(Queryable.SkipWhile), 1, mi =>
 31646        {
 31647            return mi.GetParameters().Length == 2 &&
 31648                   mi.GetParameters()[1].ParameterType.GetTypeInfo().IsGenericType &&
 31649                   mi.GetParameters()[1].ParameterType.GetGenericTypeDefinition() == typeof(Expression<>) &&
 31650                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetTypeInfo().IsGenericType &&
 31651                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetGenericTypeDefinition() == typeof(Fun
 31652        });
 1653
 1654        /// <summary>
 1655        /// Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elem
 1656        /// </summary>
 1657        /// <param name="source">A sequence to check for being empty.</param>
 1658        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1659        /// <param name="predicate">A function to test each element for a condition.</param>
 1660        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1661        /// <example>
 1662        /// <code language="cs">
 1663        /// IQueryable queryable = employees.AsQueryable();
 1664        /// var result1 = queryable.SkipWhile("Income > 50");
 1665        /// var result2 = queryable.SkipWhile("Income > @0", 50);
 1666        /// </code>
 1667        /// </example>
 1668        /// <returns>An <see cref="IQueryable"/> that contains elements from source starting at the first element in the
 1669        public static IQueryable SkipWhile([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 31670        {
 31671            Check.NotNull(source, nameof(source));
 31672            Check.NotNull(predicate, nameof(predicate));
 1673
 31674            bool createParameterCtor = source.IsLinqToObjects();
 31675            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1676
 31677            return CreateQuery(_skipWhilePredicate, source, lambda);
 31678        }
 1679
 1680        /// <inheritdoc cref="SkipWhile(IQueryable, ParsingConfig, string, object[])"/>
 1681        public static IQueryable SkipWhile([NotNull] this IQueryable source, [NotNull] string predicate, [CanBeNull] par
 21682        {
 21683            return SkipWhile(source, null, predicate, args);
 21684        }
 1685
 1686        #endregion SkipWhile
 1687
 1688        #endregion SkipWhile
 1689
 1690        #region Sum
 1691        /// <summary>
 1692        /// Computes the sum of a sequence of numeric values.
 1693        /// </summary>
 1694        /// <param name="source">A sequence of numeric values to calculate the sum of.</param>
 1695        /// <returns>The sum of the values in the sequence.</returns>
 1696        public static object Sum([NotNull] this IQueryable source)
 21697        {
 21698            Check.NotNull(source, nameof(source));
 1699
 21700            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Sum), null, source.Ex
 21701            return source.Provider.Execute(optimized);
 21702        }
 1703        #endregion Sum
 1704
 1705        #region Take
 11706        private static readonly MethodInfo _take = GetMethod(nameof(Queryable.Take), 1);
 1707        /// <summary>
 1708        /// Returns a specified number of contiguous elements from the start of a sequence.
 1709        /// </summary>
 1710        /// <param name="source">The sequence to return elements from.</param>
 1711        /// <param name="count">The number of elements to return.</param>
 1712        /// <returns>A <see cref="IQueryable"/> that contains the specified number of elements from the start of source.
 1713        public static IQueryable Take([NotNull] this IQueryable source, int count)
 141714        {
 141715            Check.NotNull(source, nameof(source));
 281716            Check.Condition(count, x => x >= 0, nameof(count));
 1717
 141718            return CreateQuery(_take, source, Expression.Constant(count));
 141719        }
 1720        #endregion Take
 1688        #region Sum
 1689        /// <summary>
 1690        /// Computes the sum of a sequence of numeric values.
 1691        /// </summary>
 1692        /// <param name="source">A sequence of numeric values to calculate the sum of.</param>
 1693        /// <returns>The sum of the values in the sequence.</returns>
 1694        public static object Sum([NotNull] this IQueryable source)
 21695        {
 21696            Check.NotNull(source, nameof(source));
 1697
 21698            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Sum), null, source.Ex
 21699            return source.Provider.Execute(optimized);
 21700        }
 1701        #endregion Sum
 1702
 1703        #region Take
 11704        private static readonly MethodInfo _take = GetMethod(nameof(Queryable.Take), 1);
 1705        /// <summary>
 1706        /// Returns a specified number of contiguous elements from the start of a sequence.
 1707        /// </summary>
 1708        /// <param name="source">The sequence to return elements from.</param>
 1709        /// <param name="count">The number of elements to return.</param>
 1710        /// <returns>A <see cref="IQueryable"/> that contains the specified number of elements from the start of source.
 1711        public static IQueryable Take([NotNull] this IQueryable source, int count)
 141712        {
 141713            Check.NotNull(source, nameof(source));
 281714            Check.Condition(count, x => x >= 0, nameof(count));
 1715
 141716            return CreateQuery(_take, source, Expression.Constant(count));
 141717        }
 1718        #endregion Take
 1719
 1720        #region TakeWhile
 1721
 1722        #region TakeWhile
 1723
 11724        private static readonly MethodInfo _takeWhilePredicate = GetMethod(nameof(Queryable.TakeWhile), 1, mi =>
 31725        {
 31726            return mi.GetParameters().Length == 2 &&
 31727                   mi.GetParameters()[1].ParameterType.GetTypeInfo().IsGenericType &&
 31728                   mi.GetParameters()[1].ParameterType.GetGenericTypeDefinition() == typeof(Expression<>) &&
 31729                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetTypeInfo().IsGenericType &&
 31730                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetGenericTypeDefinition() == typeof(Fun
 31731        });
 1732
 1733        /// <summary>
 1734        /// Returns elements from a sequence as long as a specified condition is true.
 1735        /// </summary>
 1736        /// <param name="source">A sequence to check for being empty.</param>
 1737        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1738        /// <param name="predicate">A function to test each element for a condition.</param>
 1739        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1740        /// <example>
 1741        /// <code language="cs">
 1742        /// IQueryable queryable = employees.AsQueryable();
 1743        /// var result1 = queryable.TakeWhile("Income > 50");
 1744        /// var result2 = queryable.TakeWhile("Income > @0", 50);
 1745        /// </code>
 1746        /// </example>
 1747        /// <returns>An <see cref="IQueryable"/> that contains elements from the input sequence occurring before the ele
 1748        public static IQueryable TakeWhile([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 31749        {
 31750            Check.NotNull(source, nameof(source));
 31751            Check.NotNull(predicate, nameof(predicate));
 1752
 31753            bool createParameterCtor = source.IsLinqToObjects();
 31754            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1755
 31756            return CreateQuery(_takeWhilePredicate, source, lambda);
 31757        }
 1758
 1759        /// <inheritdoc cref="TakeWhile(IQueryable, ParsingConfig, string, object[])"/>
 1760        public static IQueryable TakeWhile([NotNull] this IQueryable source, [NotNull] string predicate, [CanBeNull] par
 21761        {
 21762            return TakeWhile(source, null, predicate, args);
 21763        }
 11722        private static readonly MethodInfo _takeWhilePredicate = GetMethod(nameof(Queryable.TakeWhile), 1, mi =>
 31723        {
 31724            return mi.GetParameters().Length == 2 &&
 31725                   mi.GetParameters()[1].ParameterType.GetTypeInfo().IsGenericType &&
 31726                   mi.GetParameters()[1].ParameterType.GetGenericTypeDefinition() == typeof(Expression<>) &&
 31727                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetTypeInfo().IsGenericType &&
 31728                   mi.GetParameters()[1].ParameterType.GetGenericArguments()[0].GetGenericTypeDefinition() == typeof(Fun
 31729        });
 1730
 1731        /// <summary>
 1732        /// Returns elements from a sequence as long as a specified condition is true.
 1733        /// </summary>
 1734        /// <param name="source">A sequence to check for being empty.</param>
 1735        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1736        /// <param name="predicate">A function to test each element for a condition.</param>
 1737        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1738        /// <example>
 1739        /// <code language="cs">
 1740        /// IQueryable queryable = employees.AsQueryable();
 1741        /// var result1 = queryable.TakeWhile("Income > 50");
 1742        /// var result2 = queryable.TakeWhile("Income > @0", 50);
 1743        /// </code>
 1744        /// </example>
 1745        /// <returns>An <see cref="IQueryable"/> that contains elements from the input sequence occurring before the ele
 1746        public static IQueryable TakeWhile([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull]
 31747        {
 31748            Check.NotNull(source, nameof(source));
 31749            Check.NotNull(predicate, nameof(predicate));
 1750
 31751            bool createParameterCtor = source.IsLinqToObjects();
 31752            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1753
 31754            return CreateQuery(_takeWhilePredicate, source, lambda);
 31755        }
 1756
 1757        /// <inheritdoc cref="TakeWhile(IQueryable, ParsingConfig, string, object[])"/>
 1758        public static IQueryable TakeWhile([NotNull] this IQueryable source, [NotNull] string predicate, [CanBeNull] par
 21759        {
 21760            return TakeWhile(source, null, predicate, args);
 21761        }
 1762
 1763        #endregion TakeWhile
 1764
 1765        #endregion TakeWhile
 1766
 1767        #region ThenBy
 1768        /// <summary>
 1769        /// Performs a subsequent ordering of the elements in a sequence in ascending order according to a key.
 1770        /// </summary>
 1771        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 1772        /// <param name="source">A sequence of values to order.</param>
 1773        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1774        /// <param name="ordering">An expression string to indicate values to order by.</param>
 1775        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1776        /// <returns>A <see cref="IOrderedQueryable{T}"/> whose elements are sorted according to the specified <paramref
 1777        /// <example>
 1778        /// <code>
 1779        /// <![CDATA[
 1780        /// var result = queryable.OrderBy<User>("LastName");
 1781        /// var resultSingle = result.ThenBy<User>("NumberProperty");
 1782        /// var resultSingleDescending = result.ThenBy<User>("NumberProperty DESC");
 1783        /// var resultMultiple = result.ThenBy<User>("NumberProperty, StringProperty");
 1784        /// ]]>
 1785        /// </code>
 1786        /// </example>
 1787        public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [CanB
 61788        {
 61789            return (IOrderedQueryable<TSource>)ThenBy((IOrderedQueryable)source, config, ordering, args);
 21790        }
 1791
 1792        /// <inheritdoc cref="ThenBy{TSource}(IOrderedQueryable{TSource}, ParsingConfig, string, object[])"/>
 1793        public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [NotN
 61794        {
 61795            return ThenBy(source, null, ordering, args);
 21796        }
 1797        /// <summary>
 1798        /// Performs a subsequent ordering of the elements in a sequence in ascending order according to a key.
 1799        /// </summary>
 1800        /// <param name="source">A sequence of values to order.</param>
 1801        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1802        /// <param name="ordering">An expression string to indicate values to order by.</param>
 1803        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1804        /// <returns>A <see cref="IQueryable"/> whose elements are sorted according to the specified <paramref name="ord
 1805        /// <example>
 1806        /// <code>
 1807        /// var result = queryable.OrderBy("LastName");
 1808        /// var resultSingle = result.OrderBy("NumberProperty");
 1809        /// var resultSingleDescending = result.OrderBy("NumberProperty DESC");
 1810        /// var resultMultiple = result.OrderBy("NumberProperty, StringProperty DESC");
 1811        /// </code>
 1812        /// </example>
 1813        public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source, [CanBeNull] ParsingConfig config
 71814        {
 71815            Check.NotNull(source, nameof(source));
 61816            Check.NotEmpty(ordering, nameof(ordering));
 1817
 31818            ParameterExpression[] parameters = { ParameterExpressionHelper.CreateParameterExpression(source.ElementType,
 31819            ExpressionParser parser = new ExpressionParser(parameters, ordering, args, config);
 31820            IList<DynamicOrdering> dynamicOrderings = parser.ParseOrdering(forceThenBy: true);
 1765        #region ThenBy
 1766        /// <summary>
 1767        /// Performs a subsequent ordering of the elements in a sequence in ascending order according to a key.
 1768        /// </summary>
 1769        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 1770        /// <param name="source">A sequence of values to order.</param>
 1771        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1772        /// <param name="ordering">An expression string to indicate values to order by.</param>
 1773        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1774        /// <returns>A <see cref="IOrderedQueryable{T}"/> whose elements are sorted according to the specified <paramref
 1775        /// <example>
 1776        /// <code>
 1777        /// <![CDATA[
 1778        /// var result = queryable.OrderBy<User>("LastName");
 1779        /// var resultSingle = result.ThenBy<User>("NumberProperty");
 1780        /// var resultSingleDescending = result.ThenBy<User>("NumberProperty DESC");
 1781        /// var resultMultiple = result.ThenBy<User>("NumberProperty, StringProperty");
 1782        /// ]]>
 1783        /// </code>
 1784        /// </example>
 1785        public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [CanB
 61786        {
 61787            return (IOrderedQueryable<TSource>)ThenBy((IOrderedQueryable)source, config, ordering, args);
 21788        }
 1789
 1790        /// <inheritdoc cref="ThenBy{TSource}(IOrderedQueryable{TSource}, ParsingConfig, string, object[])"/>
 1791        public static IOrderedQueryable<TSource> ThenBy<TSource>([NotNull] this IOrderedQueryable<TSource> source, [NotN
 61792        {
 61793            return ThenBy(source, null, ordering, args);
 21794        }
 1795        /// <summary>
 1796        /// Performs a subsequent ordering of the elements in a sequence in ascending order according to a key.
 1797        /// </summary>
 1798        /// <param name="source">A sequence of values to order.</param>
 1799        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1800        /// <param name="ordering">An expression string to indicate values to order by.</param>
 1801        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1802        /// <returns>A <see cref="IQueryable"/> whose elements are sorted according to the specified <paramref name="ord
 1803        /// <example>
 1804        /// <code>
 1805        /// var result = queryable.OrderBy("LastName");
 1806        /// var resultSingle = result.OrderBy("NumberProperty");
 1807        /// var resultSingleDescending = result.OrderBy("NumberProperty DESC");
 1808        /// var resultMultiple = result.OrderBy("NumberProperty, StringProperty DESC");
 1809        /// </code>
 1810        /// </example>
 1811        public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source, [CanBeNull] ParsingConfig config
 71812        {
 71813            Check.NotNull(source, nameof(source));
 61814            Check.NotEmpty(ordering, nameof(ordering));
 1815
 31816            ParameterExpression[] parameters = { ParameterExpressionHelper.CreateParameterExpression(source.ElementType,
 31817            ExpressionParser parser = new ExpressionParser(parameters, ordering, args, config);
 31818            IList<DynamicOrdering> dynamicOrderings = parser.ParseOrdering(forceThenBy: true);
 1819
 21820            Expression queryExpr = source.Expression;
 1821
 21822            Expression queryExpr = source.Expression;
 1823
 121824            foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
 31825            {
 31826                queryExpr = Expression.Call(
 31827                    typeof(Queryable), dynamicOrdering.MethodName,
 31828                    new[] { source.ElementType, dynamicOrdering.Selector.Type },
 31829                    queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
 31830            }
 1831
 21832            var optimized = OptimizeExpression(queryExpr);
 21833            return (IOrderedQueryable)source.Provider.CreateQuery(optimized);
 21834        }
 1835
 1836        /// <inheritdoc cref="ThenBy(IOrderedQueryable, ParsingConfig, string, object[])"/>
 1837        public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source, [NotNull] string ordering, param
 11838        {
 11839            return ThenBy(source, null, ordering, args);
 01840        }
 121822            foreach (DynamicOrdering dynamicOrdering in dynamicOrderings)
 31823            {
 31824                queryExpr = Expression.Call(
 31825                    typeof(Queryable), dynamicOrdering.MethodName,
 31826                    new[] { source.ElementType, dynamicOrdering.Selector.Type },
 31827                    queryExpr, Expression.Quote(Expression.Lambda(dynamicOrdering.Selector, parameters)));
 31828            }
 1829
 21830            var optimized = OptimizeExpression(queryExpr);
 21831            return (IOrderedQueryable)source.Provider.CreateQuery(optimized);
 21832        }
 1833
 1834        /// <inheritdoc cref="ThenBy(IOrderedQueryable, ParsingConfig, string, object[])"/>
 1835        public static IOrderedQueryable ThenBy([NotNull] this IOrderedQueryable source, [NotNull] string ordering, param
 11836        {
 11837            return ThenBy(source, null, ordering, args);
 01838        }
 1839
 1840        #endregion OrderBy
 1841
 1842        #endregion OrderBy
 1843
 1844        #region Where
 1845        /// <summary>
 1846        /// Filters a sequence of values based on a predicate.
 1847        /// </summary>
 1848        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 1849        /// <param name="source">A <see cref="IQueryable{TSource}"/> to filter.</param>
 1850        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1851        /// <param name="predicate">An expression string to test each element for a condition.</param>
 1852        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1853        /// <returns>A <see cref="IQueryable{TSource}"/> that contains elements from the input sequence that satisfy the
 1854        /// <example>
 1855        /// <code language="cs">
 1856        /// var result1 = queryable.Where("NumberProperty = 1");
 1857        /// var result2 = queryable.Where("NumberProperty = @0", 1);
 1858        /// var result3 = queryable.Where("StringProperty = null");
 1859        /// var result4 = queryable.Where("StringProperty = \"abc\"");
 1860        /// var result5 = queryable.Where("StringProperty = @0", "abc");
 1861        /// </code>
 1862        /// </example>
 1863        public static IQueryable<TSource> Where<TSource>([NotNull] this IQueryable<TSource> source, [CanBeNull] ParsingC
 1691864        {
 1691865            Check.NotNull(source, nameof(source));
 1691866            Check.NotEmpty(predicate, nameof(predicate));
 1867
 1661868            return (IQueryable<TSource>)Where((IQueryable)source, config, predicate, args);
 1501869        }
 1870
 1871        /// <inheritdoc cref="DynamicQueryableExtensions.Where{TSource}(IQueryable{TSource}, ParsingConfig, string, obje
 1872        public static IQueryable<TSource> Where<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] string pre
 1431873        {
 1431874            return Where(source, null, predicate, args);
 1241875        }
 1876
 1877        /// <summary>
 1878        /// Filters a sequence of values based on a predicate.
 1879        /// </summary>
 1880        /// <param name="source">A <see cref="IQueryable"/> to filter.</param>
 1881        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1882        /// <param name="predicate">An expression string to test each element for a condition.</param>
 1883        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1884        /// <returns>A <see cref="IQueryable"/> that contains elements from the input sequence that satisfy the conditio
 1885        /// <example>
 1886        /// <code>
 1887        /// var result1 = queryable.Where("NumberProperty = 1");
 1888        /// var result2 = queryable.Where("NumberProperty = @0", 1);
 1889        /// var result3 = queryable.Where("StringProperty = null");
 1890        /// var result4 = queryable.Where("StringProperty = \"abc\"");
 1891        /// var result5 = queryable.Where("StringProperty = @0", "abc");
 1892        /// </code>
 1893        /// </example>
 1894        public static IQueryable Where([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] str
 1701895        {
 1701896            Check.NotNull(source, nameof(source));
 1691897            Check.NotEmpty(predicate, nameof(predicate));
 1898
 1691899            bool createParameterCtor = source.IsLinqToObjects();
 1691900            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1901
 1541902            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Where), new[] { sourc
 1531903            return source.Provider.CreateQuery(optimized);
 1531904        }
 1905
 1906        /// <inheritdoc cref="DynamicQueryableExtensions.Where(IQueryable, ParsingConfig, string, object[])"/>
 1907        public static IQueryable Where([NotNull] this IQueryable source, [NotNull] string predicate, params object[] arg
 41908        {
 41909            return Where(source, null, predicate, args);
 31910        }
 1911
 1912        /// <summary>
 1913        /// Filters a sequence of values based on a predicate.
 1914        /// </summary>
 1915        /// <param name="source">A <see cref="IQueryable"/> to filter.</param>
 1916        /// <param name="lambda">A cached Lambda Expression.</param>
 1917        public static IQueryable Where([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 11918        {
 11919            Check.NotNull(source, nameof(source));
 11920            Check.NotNull(lambda, nameof(lambda));
 1921
 11922            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Where), new[] { sourc
 11923            return source.Provider.CreateQuery(optimized);
 11924        }
 1925        #endregion
 1926
 1927        #region Private Helpers
 1928        private static void CheckOuterAndInnerTypes(bool createParameterCtor, Type outerType, Type innerType, string out
 101929        {
 101930            Type outerSelectorReturnType = outerSelectorLambda.Body.Type;
 101931            Type innerSelectorReturnType = innerSelectorLambda.Body.Type;
 1932
 1933            // If types are not the same, try to convert to Nullable and generate new LambdaExpression
 101934             if (outerSelectorReturnType != innerSelectorReturnType)
 61935            {
 1936                //var outerSelectorReturnTypeInfo = outerSelectorReturnType.GetTypeInfo();
 1937                //var innerSelectorReturnTypeInfo = innerSelectorReturnType.GetTypeInfo();
 1938                //if (outerSelectorReturnTypeInfo.BaseType == typeof(DynamicClass) && innerSelectorReturnTypeInfo.BaseTy
 1939                //{
 1842        #region Where
 1843        /// <summary>
 1844        /// Filters a sequence of values based on a predicate.
 1845        /// </summary>
 1846        /// <typeparam name="TSource">The type of the elements of source.</typeparam>
 1847        /// <param name="source">A <see cref="IQueryable{TSource}"/> to filter.</param>
 1848        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1849        /// <param name="predicate">An expression string to test each element for a condition.</param>
 1850        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1851        /// <returns>A <see cref="IQueryable{TSource}"/> that contains elements from the input sequence that satisfy the
 1852        /// <example>
 1853        /// <code language="cs">
 1854        /// var result1 = queryable.Where("NumberProperty = 1");
 1855        /// var result2 = queryable.Where("NumberProperty = @0", 1);
 1856        /// var result3 = queryable.Where("StringProperty = null");
 1857        /// var result4 = queryable.Where("StringProperty = \"abc\"");
 1858        /// var result5 = queryable.Where("StringProperty = @0", "abc");
 1859        /// </code>
 1860        /// </example>
 1861        public static IQueryable<TSource> Where<TSource>([NotNull] this IQueryable<TSource> source, [CanBeNull] ParsingC
 1691862        {
 1691863            Check.NotNull(source, nameof(source));
 1691864            Check.NotEmpty(predicate, nameof(predicate));
 1865
 1661866            return (IQueryable<TSource>)Where((IQueryable)source, config, predicate, args);
 1501867        }
 1868
 1869        /// <inheritdoc cref="DynamicQueryableExtensions.Where{TSource}(IQueryable{TSource}, ParsingConfig, string, obje
 1870        public static IQueryable<TSource> Where<TSource>([NotNull] this IQueryable<TSource> source, [NotNull] string pre
 1431871        {
 1431872            return Where(source, null, predicate, args);
 1241873        }
 1874
 1875        /// <summary>
 1876        /// Filters a sequence of values based on a predicate.
 1877        /// </summary>
 1878        /// <param name="source">A <see cref="IQueryable"/> to filter.</param>
 1879        /// <param name="config">The <see cref="ParsingConfig"/>.</param>
 1880        /// <param name="predicate">An expression string to test each element for a condition.</param>
 1881        /// <param name="args">An object array that contains zero or more objects to insert into the predicate as parame
 1882        /// <returns>A <see cref="IQueryable"/> that contains elements from the input sequence that satisfy the conditio
 1883        /// <example>
 1884        /// <code>
 1885        /// var result1 = queryable.Where("NumberProperty = 1");
 1886        /// var result2 = queryable.Where("NumberProperty = @0", 1);
 1887        /// var result3 = queryable.Where("StringProperty = null");
 1888        /// var result4 = queryable.Where("StringProperty = \"abc\"");
 1889        /// var result5 = queryable.Where("StringProperty = @0", "abc");
 1890        /// </code>
 1891        /// </example>
 1892        public static IQueryable Where([NotNull] this IQueryable source, [CanBeNull] ParsingConfig config, [NotNull] str
 1701893        {
 1701894            Check.NotNull(source, nameof(source));
 1691895            Check.NotEmpty(predicate, nameof(predicate));
 1896
 1691897            bool createParameterCtor = source.IsLinqToObjects();
 1691898            LambdaExpression lambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, source.ElementTyp
 1899
 1541900            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Where), new[] { sourc
 1531901            return source.Provider.CreateQuery(optimized);
 1531902        }
 1903
 1904        /// <inheritdoc cref="DynamicQueryableExtensions.Where(IQueryable, ParsingConfig, string, object[])"/>
 1905        public static IQueryable Where([NotNull] this IQueryable source, [NotNull] string predicate, params object[] arg
 41906        {
 41907            return Where(source, null, predicate, args);
 31908        }
 1909
 1910        /// <summary>
 1911        /// Filters a sequence of values based on a predicate.
 1912        /// </summary>
 1913        /// <param name="source">A <see cref="IQueryable"/> to filter.</param>
 1914        /// <param name="lambda">A cached Lambda Expression.</param>
 1915        public static IQueryable Where([NotNull] this IQueryable source, [NotNull] LambdaExpression lambda)
 11916        {
 11917            Check.NotNull(source, nameof(source));
 11918            Check.NotNull(lambda, nameof(lambda));
 1919
 11920            var optimized = OptimizeExpression(Expression.Call(typeof(Queryable), nameof(Queryable.Where), new[] { sourc
 11921            return source.Provider.CreateQuery(optimized);
 11922        }
 1923        #endregion
 1924
 1925        #region Private Helpers
 1926        private static void CheckOuterAndInnerTypes(ParsingConfig config, bool createParameterCtor, Type outerType, Type
 101927        {
 101928            Type outerSelectorReturnType = outerSelectorLambda.Body.Type;
 101929            Type innerSelectorReturnType = innerSelectorLambda.Body.Type;
 1930
 1931            // If types are not the same, try to convert to Nullable and generate new LambdaExpression
 101932            if (outerSelectorReturnType != innerSelectorReturnType)
 61933            {
 1934                //var outerSelectorReturnTypeInfo = outerSelectorReturnType.GetTypeInfo();
 1935                //var innerSelectorReturnTypeInfo = innerSelectorReturnType.GetTypeInfo();
 1936                //if (outerSelectorReturnTypeInfo.BaseType == typeof(DynamicClass) && innerSelectorReturnTypeInfo.BaseTy
 1937                //{
 1938
 1939                //}
 1940
 1941                //}
 1942
 61943                 if (TypeHelper.IsNullableType(outerSelectorReturnType) && !TypeHelper.IsNullableType(innerSelectorReturn
 21944                {
 21945                    innerSelectorReturnType = ExpressionParser.ToNullableType(innerSelectorReturnType);
 21946                    innerSelectorLambda = DynamicExpressionParser.ParseLambda(createParameterCtor, innerType, innerSelec
 21947                }
 41948                 else if (!TypeHelper.IsNullableType(outerSelectorReturnType) && TypeHelper.IsNullableType(innerSelectorR
 21949                {
 21950                    outerSelectorReturnType = ExpressionParser.ToNullableType(outerSelectorReturnType);
 21951                    outerSelectorLambda = DynamicExpressionParser.ParseLambda(createParameterCtor, outerType, outerSelec
 21952                }
 1953
 1954                // If types are still not the same, throw an Exception
 61955                 if (outerSelectorReturnType != innerSelectorReturnType)
 21956                {
 21957                    throw new ParseException(string.Format(CultureInfo.CurrentCulture, Res.IncompatibleTypes, outerSelec
 1958                }
 41959            }
 81960        }
 1961
 1962        // Code below is based on https://github.com/aspnet/EntityFramework/blob/9186d0b78a3176587eeb0f557c331f635760fe9
 1963        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source)
 61964        {
 61965             if (operatorMethodInfo.IsGenericMethod)
 61966            {
 61967                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 61968            }
 1969
 61970            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 61971            return source.Provider.CreateQuery(optimized);
 61972        }
 1973
 1974        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression express
 61975            => CreateQuery(operatorMethodInfo, source, Expression.Quote(expression));
 1976
 1977        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 331978        {
 331979            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 331980                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(object))
 331981                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 1982
 331983            return source.Provider.CreateQuery(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 331984        }
 1985
 1986        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source)
 321987        {
 321988             if (operatorMethodInfo.IsGenericMethod)
 321989            {
 321990                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 321991            }
 1992
 321993            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 321994            return source.Provider.Execute(optimized);
 321995        }
 1996
 1997        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source)
 431998        {
 431999             if (operatorMethodInfo.IsGenericMethod)
 432000            {
 432001                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 432002            }
 2003
 432004            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 432005            return source.Provider.Execute<TResult>(optimized);
 432006        }
 2007
 2008        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression expression)
 582009            => Execute(operatorMethodInfo, source, Expression.Quote(expression));
 2010
 2011        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 582012        {
 582013            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 582014                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(object))
 582015                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 2016
 582017            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 582018            return source.Provider.Execute(optimized);
 582019        }
 2020
 2021        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression expre
 102022            => Execute<TResult>(operatorMethodInfo, source, Expression.Quote(expression));
 2023
 2024        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 102025        {
 102026            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 102027                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(TResult))
 102028                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 2029
 102030            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 102031            return source.Provider.Execute<TResult>(optimized);
 102032        }
 2033
 2034        private static MethodInfo GetMethod(string name, int parameterCount = 0, Func<MethodInfo, bool> predicate = null
 212035        {
 2036            try
 212037            {
 212038                return typeof(Queryable).GetTypeInfo().GetDeclaredMethods(name).Single(mi =>
 612039                    mi.GetParameters().Length == parameterCount + 1 && (predicate == null || predicate(mi)));
 2040            }
 02041            catch (Exception ex)
 02042            {
 02043                throw new Exception("Method not found: " + name, ex);
 2044            }
 212045        }
 2046        #endregion Private Helpers
 2047    }
 2048}
 61941                if (TypeHelper.IsNullableType(outerSelectorReturnType) && !TypeHelper.IsNullableType(innerSelectorReturn
 21942                {
 21943                    innerSelectorReturnType = ExpressionParser.ToNullableType(innerSelectorReturnType);
 21944                    innerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, innerType, in
 21945                }
 41946                else if (!TypeHelper.IsNullableType(outerSelectorReturnType) && TypeHelper.IsNullableType(innerSelectorR
 21947                {
 21948                    outerSelectorReturnType = ExpressionParser.ToNullableType(outerSelectorReturnType);
 21949                    outerSelectorLambda = DynamicExpressionParser.ParseLambda(config, createParameterCtor, outerType, ou
 21950                }
 1951
 1952                // If types are still not the same, throw an Exception
 61953                if (outerSelectorReturnType != innerSelectorReturnType)
 21954                {
 21955                    throw new ParseException(string.Format(CultureInfo.CurrentCulture, Res.IncompatibleTypes, outerSelec
 1956                }
 41957            }
 81958        }
 1959
 1960        // Code below is based on https://github.com/aspnet/EntityFramework/blob/9186d0b78a3176587eeb0f557c331f635760fe9
 1961        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source)
 61962        {
 61963            if (operatorMethodInfo.IsGenericMethod)
 61964            {
 61965                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 61966            }
 1967
 61968            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 61969            return source.Provider.CreateQuery(optimized);
 61970        }
 1971
 1972        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression express
 61973            => CreateQuery(operatorMethodInfo, source, Expression.Quote(expression));
 1974
 1975        private static IQueryable CreateQuery(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 331976        {
 331977            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 331978                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(object))
 331979                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 1980
 331981            return source.Provider.CreateQuery(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 331982        }
 1983
 1984        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source)
 361985        {
 361986            if (operatorMethodInfo.IsGenericMethod)
 361987            {
 361988                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 361989            }
 1990
 361991            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 361992            return source.Provider.Execute(optimized);
 361993        }
 1994
 1995        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source)
 461996        {
 461997            if (operatorMethodInfo.IsGenericMethod)
 461998            {
 461999                operatorMethodInfo = operatorMethodInfo.MakeGenericMethod(source.ElementType);
 462000            }
 2001
 462002            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression));
 462003            return source.Provider.Execute<TResult>(optimized);
 462004        }
 2005
 2006        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression expression)
 582007            => Execute(operatorMethodInfo, source, Expression.Quote(expression));
 2008
 2009        private static object Execute(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 582010        {
 582011            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 582012                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(object))
 582013                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 2014
 582015            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 582016            return source.Provider.Execute(optimized);
 582017        }
 2018
 2019        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source, LambdaExpression expre
 102020            => Execute<TResult>(operatorMethodInfo, source, Expression.Quote(expression));
 2021
 2022        private static TResult Execute<TResult>(MethodInfo operatorMethodInfo, IQueryable source, Expression expression)
 102023        {
 102024            operatorMethodInfo = operatorMethodInfo.GetGenericArguments().Length == 2
 102025                    ? operatorMethodInfo.MakeGenericMethod(source.ElementType, typeof(TResult))
 102026                    : operatorMethodInfo.MakeGenericMethod(source.ElementType);
 2027
 102028            var optimized = OptimizeExpression(Expression.Call(null, operatorMethodInfo, source.Expression, expression))
 102029            return source.Provider.Execute<TResult>(optimized);
 102030        }
 2031
 2032        private static MethodInfo GetMethod(string name, int parameterCount = 0, Func<MethodInfo, bool> predicate = null
 212033        {
 2034            try
 212035            {
 212036                return typeof(Queryable).GetTypeInfo().GetDeclaredMethods(name).Single(mi =>
 612037                    mi.GetParameters().Length == parameterCount + 1 && (predicate == null || predicate(mi)));
 2038            }
 02039            catch (Exception ex)
 02040            {
 02041                throw new Exception("Method not found: " + name, ex);
 2042            }
 212043        }
 2044        #endregion Private Helpers
 2045    }
 2046}
-
+

Methods/Properties

-.cctor()
-OptimizeExpression(System.Linq.Expressions.Expression)
-Aggregate(System.Linq.IQueryable,System.String,System.String)
-Any(System.Linq.IQueryable)
-Any(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Any(System.Linq.IQueryable,System.String,System.Object[])
-Any(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-AsEnumerable()
-Count(System.Linq.IQueryable)
-Count(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Count(System.Linq.IQueryable,System.String,System.Object[])
-Count(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-DefaultIfEmpty(System.Linq.IQueryable)
-DefaultIfEmpty(System.Linq.IQueryable,System.Object)
-Distinct(System.Linq.IQueryable)
-First(System.Linq.IQueryable)
-First(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-First(System.Linq.IQueryable,System.String,System.Object[])
-First(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-FirstOrDefault(System.Linq.IQueryable)
-FirstOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-FirstOrDefault(System.Linq.IQueryable,System.String,System.Object[])
-FirstOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[])
-GroupBy(System.Linq.IQueryable,System.String,System.String,System.Object[])
-GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String)
-GroupBy(System.Linq.IQueryable,System.String,System.String)
-GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-GroupBy(System.Linq.IQueryable,System.String,System.Object[])
-GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.String[])
-GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.String[])
-GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[])
-GroupByManyInternal(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[],System.Int32)
-GroupJoin(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
-GroupJoin(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
-Join(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
-Join(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
-Join(System.Linq.IQueryable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[])
-Join(System.Linq.IQueryable`1<TElement>,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[])
-Last(System.Linq.IQueryable)
-Last(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Last(System.Linq.IQueryable,System.String,System.Object[])
-Last(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-LastOrDefault(System.Linq.IQueryable)
-LastOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-LastOrDefault(System.Linq.IQueryable,System.String,System.Object[])
-LastOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-OrderBy(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-OrderBy(System.Linq.IQueryable`1<TSource>,System.String,System.Object[])
-OrderBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-OrderBy(System.Linq.IQueryable,System.String,System.Object[])
-Page(System.Linq.IQueryable,System.Int32,System.Int32)
-Page(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32)
-PageResult(System.Linq.IQueryable,System.Int32,System.Int32)
-PageResult(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32)
-Reverse(System.Linq.IQueryable)
-Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Select(System.Linq.IQueryable,System.String,System.Object[])
-Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Select(System.Linq.IQueryable,System.String,System.Object[])
-Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
-Select(System.Linq.IQueryable,System.Type,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.Type,System.String,System.Object[])
-SelectManyInternal(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.String,System.Object[])
-SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[],System.Object[])
-SelectMany(System.Linq.IQueryable,System.String,System.String,System.Object[],System.Object[])
-SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.String,System.String,System.Object[],System.Object[])
-SelectMany(System.Linq.IQueryable,System.String,System.String,System.String,System.String,System.Object[],System.Object[])
-Single(System.Linq.IQueryable)
-Single(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Single(System.Linq.IQueryable,System.String,System.Object[])
-Single(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-SingleOrDefault(System.Linq.IQueryable)
-SingleOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-SingleOrDefault(System.Linq.IQueryable,System.String,System.Object[])
-SingleOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-Skip(System.Linq.IQueryable,System.Int32)
-SkipWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-SkipWhile(System.Linq.IQueryable,System.String,System.Object[])
-Sum(System.Linq.IQueryable)
-Take(System.Linq.IQueryable,System.Int32)
-TakeWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-TakeWhile(System.Linq.IQueryable,System.String,System.Object[])
-ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.String,System.Object[])
-ThenBy(System.Linq.IOrderedQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-ThenBy(System.Linq.IOrderedQueryable,System.String,System.Object[])
-Where(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Where(System.Linq.IQueryable`1<TSource>,System.String,System.Object[])
-Where(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
-Where(System.Linq.IQueryable,System.String,System.Object[])
-Where(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-CheckOuterAndInnerTypes(System.Boolean,System.Type,System.Type,System.String,System.String,System.Linq.Expressions.LambdaExpression&,System.Linq.Expressions.LambdaExpression&,System.Object[])
-CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable)
-CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
-Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
-GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>)
+.cctor()
+OptimizeExpression(System.Linq.Expressions.Expression)
+Aggregate(System.Linq.IQueryable,System.String,System.String)
+Any(System.Linq.IQueryable)
+Any(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Any(System.Linq.IQueryable,System.String,System.Object[])
+Any(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+AsEnumerable()
+Count(System.Linq.IQueryable)
+Count(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Count(System.Linq.IQueryable,System.String,System.Object[])
+Count(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+DefaultIfEmpty(System.Linq.IQueryable)
+DefaultIfEmpty(System.Linq.IQueryable,System.Object)
+Distinct(System.Linq.IQueryable)
+First(System.Linq.IQueryable)
+First(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+First(System.Linq.IQueryable,System.String,System.Object[])
+First(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+FirstOrDefault(System.Linq.IQueryable)
+FirstOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+FirstOrDefault(System.Linq.IQueryable,System.String,System.Object[])
+FirstOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[])
+GroupBy(System.Linq.IQueryable,System.String,System.String,System.Object[])
+GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String)
+GroupBy(System.Linq.IQueryable,System.String,System.String)
+GroupBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+GroupBy(System.Linq.IQueryable,System.String,System.Object[])
+GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.String[])
+GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.String[])
+GroupByMany(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[])
+GroupByManyInternal(System.Collections.Generic.IEnumerable`1<TElement>,System.Func`2<TElement,System.Object>[],System.Int32)
+GroupJoin(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
+GroupJoin(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
+Join(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
+Join(System.Linq.IQueryable,System.Collections.IEnumerable,System.String,System.String,System.String,System.Object[])
+Join(System.Linq.IQueryable`1<TElement>,System.Linq.Dynamic.Core.ParsingConfig,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[])
+Join(System.Linq.IQueryable`1<TElement>,System.Collections.Generic.IEnumerable`1<TElement>,System.String,System.String,System.String,System.Object[])
+Last(System.Linq.IQueryable)
+Last(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Last(System.Linq.IQueryable,System.String,System.Object[])
+Last(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+LastOrDefault(System.Linq.IQueryable)
+LastOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+LastOrDefault(System.Linq.IQueryable,System.String,System.Object[])
+LastOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+OrderBy(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+OrderBy(System.Linq.IQueryable`1<TSource>,System.String,System.Object[])
+OrderBy(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+OrderBy(System.Linq.IQueryable,System.String,System.Object[])
+Page(System.Linq.IQueryable,System.Int32,System.Int32)
+Page(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32)
+PageResult(System.Linq.IQueryable,System.Int32,System.Int32)
+PageResult(System.Linq.IQueryable`1<TSource>,System.Int32,System.Int32)
+Reverse(System.Linq.IQueryable)
+Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Select(System.Linq.IQueryable,System.String,System.Object[])
+Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Select(System.Linq.IQueryable,System.String,System.Object[])
+Select(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
+Select(System.Linq.IQueryable,System.Type,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.Type,System.String,System.Object[])
+SelectManyInternal(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.Type,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.String,System.Object[])
+SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.Object[],System.Object[])
+SelectMany(System.Linq.IQueryable,System.String,System.String,System.Object[],System.Object[])
+SelectMany(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.String,System.String,System.String,System.Object[],System.Object[])
+SelectMany(System.Linq.IQueryable,System.String,System.String,System.String,System.String,System.Object[],System.Object[])
+Single(System.Linq.IQueryable)
+Single(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Single(System.Linq.IQueryable,System.String,System.Object[])
+Single(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+SingleOrDefault(System.Linq.IQueryable)
+SingleOrDefault(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+SingleOrDefault(System.Linq.IQueryable,System.String,System.Object[])
+SingleOrDefault(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+Skip(System.Linq.IQueryable,System.Int32)
+SkipWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+SkipWhile(System.Linq.IQueryable,System.String,System.Object[])
+Sum(System.Linq.IQueryable)
+Take(System.Linq.IQueryable,System.Int32)
+TakeWhile(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+TakeWhile(System.Linq.IQueryable,System.String,System.Object[])
+ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+ThenBy(System.Linq.IOrderedQueryable`1<TSource>,System.String,System.Object[])
+ThenBy(System.Linq.IOrderedQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+ThenBy(System.Linq.IOrderedQueryable,System.String,System.Object[])
+Where(System.Linq.IQueryable`1<TSource>,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Where(System.Linq.IQueryable`1<TSource>,System.String,System.Object[])
+Where(System.Linq.IQueryable,System.Linq.Dynamic.Core.ParsingConfig,System.String,System.Object[])
+Where(System.Linq.IQueryable,System.String,System.Object[])
+Where(System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+CheckOuterAndInnerTypes(System.Linq.Dynamic.Core.ParsingConfig,System.Boolean,System.Type,System.Type,System.String,System.String,System.Linq.Expressions.LambdaExpression&,System.Linq.Expressions.LambdaExpression&,System.Object[])
+CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable)
+CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+CreateQuery(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.LambdaExpression)
+Execute(System.Reflection.MethodInfo,System.Linq.IQueryable,System.Linq.Expressions.Expression)
+GetMethod(System.String,System.Int32,System.Func`2<System.Reflection.MethodInfo,System.Boolean>)

diff --git a/report/System.Linq.Dynamic.Core_ExpressionHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_ExpressionHelper.htm similarity index 67% rename from report/System.Linq.Dynamic.Core_ExpressionHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_ExpressionHelper.htm index 34c88029..693b9de3 100644 --- a/report/System.Linq.Dynamic.Core_ExpressionHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ExpressionHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.ExpressionHelper - Coverage Report
@@ -15,37 +16,37 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.ExpressionHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionHelper.cs -Covered lines:120 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionHelper.cs +Covered lines:125 Uncovered lines:5 -Coverable lines:125 -Total lines:199 -Line coverage:96% -Branch coverage:70.4% +Coverable lines:130 +Total lines:205 +Line coverage:96.1% +Branch coverage:74.1%

Metrics

- + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(...)44419430410071.11
GenerateAdd(...)10100100
GenerateStringConcat(...)10100100
GenerateSubtract(...)10100100
GenerateEqual(...)10100100
GenerateNotEqual(...)10100100
GenerateGreaterThan(...)81610077.78
GenerateGreaterThanEqual(...)81610077.78
GenerateLessThan(...)81610077.78
GenerateLessThanEqual(...)81610077.78
OptimizeForEqualityIfPossible(...)7167555.56
OptimizeStringForEqualityIfPossible(...)5477.7880
GetStaticMethod(...)10100100
GenerateStaticMethodCall(...)10100100
ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(...)00169
GenerateAdd(...)0010
GenerateStringConcat(...)0010
GenerateSubtract(...)0010
GenerateEqual(...)0010
GenerateNotEqual(...)0010
GenerateGreaterThan(...)0018
GenerateGreaterThanEqual(...)0018
GenerateLessThan(...)0018
GenerateLessThanEqual(...)0018
OptimizeForEqualityIfPossible(...)007575
OptimizeStringForEqualityIfPossible(...)0077875
GetStaticMethod(...)0011
GenerateStaticMethodCall(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionHelper.cs

@@ -59,45 +60,45 @@

- + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + @@ -107,9 +108,9 @@

- - - + + + @@ -117,10 +118,10 @@

- - - - + + + + @@ -129,33 +130,33 @@

- - + + - + - - + + - - + + - + - + - - + + @@ -163,15 +164,15 @@

- + - + - - + + @@ -179,48 +180,48 @@

- + - + - - + + - + - - + + - + - + - + - + - + - + - + @@ -238,36 +239,42 @@

- - - - - - - - - - + + + + + + + + + + + + + + + +
#LineLine coverage
 8    {
 9        public static void ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(ref Expression left, ref Expression ri
 3710        {
 3711             if (left.Type == right.Type)
 3711            if (left.Type == right.Type)
 912            {
 913                return;
 14            }
 15
 2816             if (left.Type == typeof(UInt64) || right.Type == typeof(UInt64))
 2816            if (left.Type == typeof(UInt64) || right.Type == typeof(UInt64))
 417            {
 418                 right = right.Type != typeof(UInt64) ? Expression.Convert(right, typeof(UInt64)) : right;
 419                 left = left.Type != typeof(UInt64) ? Expression.Convert(left, typeof(UInt64)) : left;
 418                right = right.Type != typeof(UInt64) ? Expression.Convert(right, typeof(UInt64)) : right;
 419                left = left.Type != typeof(UInt64) ? Expression.Convert(left, typeof(UInt64)) : left;
 420            }
 2421             else if (left.Type == typeof(Int64) || right.Type == typeof(Int64))
 2421            else if (left.Type == typeof(Int64) || right.Type == typeof(Int64))
 422            {
 423                 right = right.Type != typeof(Int64) ? Expression.Convert(right, typeof(Int64)) : right;
 424                 left = left.Type != typeof(Int64) ? Expression.Convert(left, typeof(Int64)) : left;
 423                right = right.Type != typeof(Int64) ? Expression.Convert(right, typeof(Int64)) : right;
 424                left = left.Type != typeof(Int64) ? Expression.Convert(left, typeof(Int64)) : left;
 425            }
 2026             else if (left.Type == typeof(UInt32) || right.Type == typeof(UInt32))
 2026            else if (left.Type == typeof(UInt32) || right.Type == typeof(UInt32))
 427            {
 428                 right = right.Type != typeof(UInt32) ? Expression.Convert(right, typeof(UInt32)) : right;
 429                 left = left.Type != typeof(UInt32) ? Expression.Convert(left, typeof(UInt32)) : left;
 428                right = right.Type != typeof(UInt32) ? Expression.Convert(right, typeof(UInt32)) : right;
 429                left = left.Type != typeof(UInt32) ? Expression.Convert(left, typeof(UInt32)) : left;
 430            }
 1631             else if (left.Type == typeof(Int32) || right.Type == typeof(Int32))
 1631            else if (left.Type == typeof(Int32) || right.Type == typeof(Int32))
 1032            {
 1033                 right = right.Type != typeof(Int32) ? Expression.Convert(right, typeof(Int32)) : right;
 1034                 left = left.Type != typeof(Int32) ? Expression.Convert(left, typeof(Int32)) : left;
 1033                right = right.Type != typeof(Int32) ? Expression.Convert(right, typeof(Int32)) : right;
 1034                left = left.Type != typeof(Int32) ? Expression.Convert(left, typeof(Int32)) : left;
 1035            }
 636             else if (left.Type == typeof(UInt16) || right.Type == typeof(UInt16))
 636            else if (left.Type == typeof(UInt16) || right.Type == typeof(UInt16))
 237            {
 238                 right = right.Type != typeof(UInt16) ? Expression.Convert(right, typeof(UInt16)) : right;
 239                 left = left.Type != typeof(UInt16) ? Expression.Convert(left, typeof(UInt16)) : left;
 238                right = right.Type != typeof(UInt16) ? Expression.Convert(right, typeof(UInt16)) : right;
 239                left = left.Type != typeof(UInt16) ? Expression.Convert(left, typeof(UInt16)) : left;
 240            }
 441             else if (left.Type == typeof(Int16) || right.Type == typeof(Int16))
 441            else if (left.Type == typeof(Int16) || right.Type == typeof(Int16))
 242            {
 243                 right = right.Type != typeof(Int16) ? Expression.Convert(right, typeof(Int16)) : right;
 244                 left = left.Type != typeof(Int16) ? Expression.Convert(left, typeof(Int16)) : left;
 243                right = right.Type != typeof(Int16) ? Expression.Convert(right, typeof(Int16)) : right;
 244                left = left.Type != typeof(Int16) ? Expression.Convert(left, typeof(Int16)) : left;
 245            }
 246             else if (left.Type == typeof(Byte) || right.Type == typeof(Byte))
 246            else if (left.Type == typeof(Byte) || right.Type == typeof(Byte))
 247            {
 248                 right = right.Type != typeof(Byte) ? Expression.Convert(right, typeof(Byte)) : right;
 249                 left = left.Type != typeof(Byte) ? Expression.Convert(left, typeof(Byte)) : left;
 248                right = right.Type != typeof(Byte) ? Expression.Convert(right, typeof(Byte)) : right;
 249                left = left.Type != typeof(Byte) ? Expression.Convert(left, typeof(Byte)) : left;
 250            }
 3751        }
 52
 1456        }
 57
 58        public static Expression GenerateStringConcat(Expression left, Expression right)
 1459        {
 1460            return GenerateStaticMethodCall("Concat", left, right);
 1461        }
 2059        {
 2060            return GenerateStaticMethodCall("Concat", left, right);
 2061        }
 62
 63        public static Expression GenerateSubtract(Expression left, Expression right)
 164        {
 166        }
 67
 68        public static Expression GenerateEqual(Expression left, Expression right)
 20169        {
 20170            OptimizeForEqualityIfPossible(ref left, ref right);
 20171            return Expression.Equal(left, right);
 20172        }
 20969        {
 20970            OptimizeForEqualityIfPossible(ref left, ref right);
 20971            return Expression.Equal(left, right);
 20972        }
 73
 74        public static Expression GenerateNotEqual(Expression left, Expression right)
 775        {
 778        }
 79
 80        public static Expression GenerateGreaterThan(Expression left, Expression right)
 4281        {
 4282             if (left.Type == typeof(string))
 4381        {
 4382            if (left.Type == typeof(string))
 183            {
 184                return Expression.GreaterThan(GenerateStaticMethodCall("Compare", left, right), Expression.Constant(0));
 85            }
 86
 4187             if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 4287            if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 288            {
 289                 var leftPart = left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnderlyingType(left.Typ
 290                 var rightPart = right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right
 289                var leftPart = left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnderlyingType(left.Typ
 290                var rightPart = right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right
 291                return Expression.GreaterThan(leftPart, rightPart);
 92            }
 93
 3994            return Expression.GreaterThan(left, right);
 4295        }
 4094            return Expression.GreaterThan(left, right);
 4395        }
 96
 97        public static Expression GenerateGreaterThanEqual(Expression left, Expression right)
 398        {
 399             if (left.Type == typeof(string))
 399            if (left.Type == typeof(string))
 1100            {
 1101                return Expression.GreaterThanOrEqual(GenerateStaticMethodCall("Compare", left, right), Expression.Consta
 102            }
 103
 2104             if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 2104            if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 1105            {
 1106                 return Expression.GreaterThanOrEqual(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetU
 1107                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 1106                return Expression.GreaterThanOrEqual(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetU
 1107                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 108            }
 109
 1110            return Expression.GreaterThanOrEqual(left, right);
 112
 113        public static Expression GenerateLessThan(Expression left, Expression right)
 8114        {
 8115             if (left.Type == typeof(string))
 8115            if (left.Type == typeof(string))
 1116            {
 1117                return Expression.LessThan(GenerateStaticMethodCall("Compare", left, right), Expression.Constant(0));
 118            }
 119
 7120             if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 7120            if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 4121            {
 4122                 return Expression.LessThan(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnderlyingT
 4123                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 4122                return Expression.LessThan(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnderlyingT
 4123                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 124            }
 125
 3126            return Expression.LessThan(left, right);
 128
 129        public static Expression GenerateLessThanEqual(Expression left, Expression right)
 4130        {
 4131             if (left.Type == typeof(string))
 4131            if (left.Type == typeof(string))
 1132            {
 1133                return Expression.LessThanOrEqual(GenerateStaticMethodCall("Compare", left, right), Expression.Constant(
 134            }
 135
 3136             if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 3136            if (left.Type.GetTypeInfo().IsEnum || right.Type.GetTypeInfo().IsEnum)
 1137            {
 1138                 return Expression.LessThanOrEqual(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnde
 1139                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 1138                return Expression.LessThanOrEqual(left.Type.GetTypeInfo().IsEnum ? Expression.Convert(left, Enum.GetUnde
 1139                    right.Type.GetTypeInfo().IsEnum ? Expression.Convert(right, Enum.GetUnderlyingType(right.Type)) : ri
 140            }
 141
 2142            return Expression.LessThanOrEqual(left, right);
 4143        }
 144
 145        public static void OptimizeForEqualityIfPossible(ref Expression left, ref Expression right)
 208146        {
 216146        {
 147            // The goal here is to provide the way to convert some types from the string form in a way that is compatibl
 148            //
 149            // The Expression.Call(typeof(Guid).GetMethod("Parse"), right); does the job only for Linq to Object but Lin
 150            //
 208151            Type leftType = left.Type;
 208152            Type rightType = right.Type;
 216151            Type leftType = left.Type;
 216152            Type rightType = right.Type;
 153
 208154             if (rightType == typeof(string) && right.NodeType == ExpressionType.Constant)
 216154            if (rightType == typeof(string) && right.NodeType == ExpressionType.Constant)
 26155            {
 26156                 right = OptimizeStringForEqualityIfPossible((string)((ConstantExpression)right).Value, leftType) ?? righ
 26156                right = OptimizeStringForEqualityIfPossible((string)((ConstantExpression)right).Value, leftType) ?? righ
 26157            }
 158
 208159             if (leftType == typeof(string) && left.NodeType == ExpressionType.Constant)
 216159            if (leftType == typeof(string) && left.NodeType == ExpressionType.Constant)
 0160            {
 0161                 left = OptimizeStringForEqualityIfPossible((string)((ConstantExpression)left).Value, rightType) ?? left;
 0161                left = OptimizeStringForEqualityIfPossible((string)((ConstantExpression)left).Value, rightType) ?? left;
 0162            }
 208163        }
 216163        }
 164
 165        public static Expression OptimizeStringForEqualityIfPossible(string text, Type type)
 28166        {
 28167             if (type == typeof(DateTime) && DateTime.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.None, o
 28167            if (type == typeof(DateTime) && DateTime.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.None, o
 0168            {
 0169                return Expression.Constant(dateTime, typeof(DateTime));
 170            }
 171#if !NET35
 28172             if (type == typeof(Guid) && Guid.TryParse(text, out Guid guid))
 28172            if (type == typeof(Guid) && Guid.TryParse(text, out Guid guid))
 1173            {
 1174                return Expression.Constant(guid, typeof(Guid));
 175            }
 28187        }
 188
 189        static MethodInfo GetStaticMethod(string methodName, Expression left, Expression right)
 18190        {
 18191            return left.Type.GetMethod(methodName, new[] { left.Type, right.Type });
 18192        }
 193
 194        static Expression GenerateStaticMethodCall(string methodName, Expression left, Expression right)
 18195        {
 18196            return Expression.Call(null, GetStaticMethod(methodName, left, right), new[] { left, right });
 18197        }
 198    }
 199}
 24190        {
 24191            var methodInfo = left.Type.GetMethod(methodName, new[] {left.Type, right.Type});
 24192            if (methodInfo == null)
 1193            {
 1194                methodInfo = right.Type.GetMethod(methodName, new[] {left.Type, right.Type});
 1195            }
 196
 24197            return methodInfo;
 24198        }
 199
 200        static Expression GenerateStaticMethodCall(string methodName, Expression left, Expression right)
 24201        {
 24202            return Expression.Call(null, GetStaticMethod(methodName, left, right), new[] { left, right });
 24203        }
 204    }
 205}
-
+

Methods/Properties

-ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&)
-GenerateAdd(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateStringConcat(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateSubtract(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateNotEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateGreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateGreaterThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateLessThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateLessThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-OptimizeForEqualityIfPossible(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&)
-OptimizeStringForEqualityIfPossible(System.String,System.Type)
-GetStaticMethod(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
-GenerateStaticMethodCall(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+ConvertNumericTypeToBiggestCommonTypeForBinaryOperator(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&)
+GenerateAdd(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateStringConcat(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateSubtract(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateNotEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateGreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateGreaterThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateLessThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateLessThanEqual(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+OptimizeForEqualityIfPossible(System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&)
+OptimizeStringForEqualityIfPossible(System.String,System.Type)
+GetStaticMethod(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
+GenerateStaticMethodCall(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)

diff --git a/report/System.Linq.Dynamic.Core_ExpressionParser.htm b/report/coverlet/System.Linq.Dynamic.Core_ExpressionParser.htm similarity index 69% rename from report/System.Linq.Dynamic.Core_ExpressionParser.htm rename to report/coverlet/System.Linq.Dynamic.Core_ExpressionParser.htm index 88bdac55..c31df6db 100644 --- a/report/System.Linq.Dynamic.Core_ExpressionParser.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ExpressionParser.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.ExpressionParser - Coverage Report
@@ -15,84 +16,84 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.ExpressionParser Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs -Covered lines:996 -Uncovered lines:194 -Coverable lines:1190 -Total lines:1824 -Line coverage:83.6% -Branch coverage:75.4% +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs +Covered lines:1021 +Uncovered lines:189 +Coverable lines:1210 +Total lines:1856 +Line coverage:84.3% +Branch coverage:82.9%

Metrics

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)4810085.71
ProcessParameters(...)6410080
ProcessValues(...)44100100
AddSymbol(...)22100100
Parse(...)3485.7180
ParseOrdering(...)1264100100
ParseConditionalOperator()22100100
ParseNullCoalescingOperator()22100100
ParseLambdaOperator()5438.4640
ParseIsNull()22100100
ParseOrOperator()32100100
ParseAndOperator()32100100
ParseIn()12102484.9180.95
ParseLogicalAndOrOperator()1725692.3188.24
ParseComparisonOperator()5873400328677.36
HasImplicitConversion(...)10100100
ParseEnumToConstantExpression(...)10100100
ParseConstantExpressionToEnum(...)2270100
ParseShiftOperator()5810085.71
ParseAdditive()71610088.89
ParseMultiplicative()103210072.73
ParseUnary()9852.1757.14
ParsePrimary()48100100
ParsePrimaryStart()7910080
ParseStringLiteral()3457.1440
ParseIntegerLiteral()34838860886.1182.98
ParseRealLiteral()10100100
TryParseAsFloat(...)44100100
TryParseAsDecimal(...)44100100
TryParseAsDouble(...)5891.6785.71
ParseParenExpression()10100100
ParseIdentifier()193276891.6790.32
ParseIt()2271.4366.67
ParseParent()2271.4366.67
ParseRoot()2271.4366.67
ParseIif()2277.7866.67
GenerateConditional(...)1651253.8542.11
ParseNew()231638491.8989.66
CreateArrayInitializerExpression(...)51610077.78
CreateNewExpression(...)1325670.3782.35
ParseLambdaInvocation(...)2200
ParseTypeAccess(...)13102487.8871.43
GenerateConversion(...)21409641.9444
ParseMemberAccess(...)201638481.8279.31
FindType(...)1412861.5466.67
ParseAggregate(...)1451296.9294.74
ParseArgumentList()22100100
ParseArguments()22100100
ParseElementAccess(...)7325036.36
ToNullableType(...)3471.4360
TryGetMemberName(...)4461.5460
CheckAndPromoteOperand(...)2200
CheckAndPromoteOperands(...)22100100
IncompatibleOperandError(...)1000
IncompatibleOperandsError(...)10100100
FindPropertyOrField(...)7488.2480
TokenIdentifierIs(...)20100100
GetIdentifier()3266.6766.67
ParseError(...)32100100
ParseError(...)10100100
.cctor()10100100
ProcessParameters(...)0011
ProcessValues(...)0011
AddSymbol(...)0011
Parse(...)0085775
ParseOrdering(...)0011
ParseConditionalOperator()0011
ParseNullCoalescingOperator()0011
ParseLambdaOperator()0038525
ParseIsNull()0011
ParseOrOperator()0011
ParseAndOperator()0011
ParseIn()00849818
ParseLogicalAndOrOperator()00923969
ParseComparisonOperator()00864938
HasImplicitConversion(...)0010
ParseEnumToConstantExpression(...)0010
ParseConstantExpressionToEnum(...)0071
ParseShiftOperator()0011
ParseAdditive()0011
ParseMultiplicative()0011
ParseUnary()00522714
ParsePrimary()0011
ParsePrimaryStart()0011
ParseStringLiteral()007786
ParseIntegerLiteral()00882867
ParseRealLiteral()0010
TryParseAsFloat(...)0011
TryParseAsDecimal(...)0011
TryParseAsDouble(...)00917875
ParseParenExpression()0010
ParseIdentifier()00927917
ParseIt()007145
ParseParent()007145
ParseRoot()007145
ParseIif()007785
GenerateConditional(...)00538409
ParseNew()00924909
CreateArrayInitializerExpression(...)001875
CreateNewExpression(...)00708833
ParseLambdaInvocation(...)0000
ParseTypeAccess(...)00879792
GenerateConversion(...)00514548
ParseMemberAccess(...)00891861
FindType(...)00655633
ParseAggregate(...)00969962
ParseArgumentList()0011
ParseArguments()0011
ParseElementAccess(...)0047825
ToNullableType(...)007145
TryGetMemberName(...)006155
CheckAndPromoteOperand(...)0000
CheckAndPromoteOperands(...)0011
IncompatibleOperandError(...)0000
IncompatibleOperandsError(...)0010
FindPropertyOrField(...)008579
TokenIdentifierIs(...)0011
GetIdentifier()0066775
ParseError(...)0011
ParseError(...)0010
.ctor(...)0011
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs

@@ -141,76 +142,76 @@

- - - + + + - - + + - - - - + + + + - - - - + + + + - + - - - + + + - - + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - + - - - - - + + + + + - - + + - - + + @@ -219,75 +220,75 @@

- - - + + + - - + + - - - + + + - + - + - - + + - - - - - - - + + + + + + + - + - + - + - - - + + + - + - - - + + + - - - + + + - - - - + + + + @@ -296,8 +297,8 @@

- - + + @@ -318,33 +319,33 @@

- - - + + + - - + + - - - + + + - + - - + + @@ -352,7 +353,7 @@

- + @@ -362,9 +363,9 @@

- - - + + + @@ -372,14 +373,14 @@

- - + + - - - + + + @@ -387,25 +388,25 @@

- - + + - - - + + + - + - + - + @@ -413,18 +414,18 @@

- + - + - + @@ -433,24 +434,24 @@

- + - + - + - + @@ -469,45 +470,45 @@

- - + + - - - + + + - + - + - + - + - + - + @@ -524,35 +525,35 @@

- - + + - - - - - - - + + + + + + + - - - - + + + + - - + + - + - + - + @@ -561,25 +562,25 @@

- - + + - + - + - + - + - + @@ -589,61 +590,61 @@

- - - - - + + + + + - - - - - - + + + + + + - + - - - - + + + + - - - + + + - + - - - - - + + + + + - + - - + + - - + + @@ -654,16 +655,16 @@

- + - - + + - + @@ -675,7 +676,7 @@

- + @@ -690,14 +691,14 @@

- - - + + + - + @@ -709,52 +710,52 @@

- - + + - - - - - - - - + + + + + + + + - - - - + + + + - + - - - + + + - - - - + + + + - + @@ -768,17 +769,17 @@

- - + + - - + + - + @@ -786,7 +787,7 @@

- + @@ -800,45 +801,45 @@

- - + + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - + + - - - + + + - - + + - + - + - + @@ -846,1147 +847,1179 @@

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 43        /// <param name="expression">The expression.</param>
 44        /// <param name="values">The values.</param>
 45        /// <param name="parsingConfig">The parsing configuration.</param>
 49346        public ExpressionParser([CanBeNull] ParameterExpression[] parameters, [NotNull] string expression, [CanBeNull] o
 49347        {
 49348            Check.NotEmpty(expression, nameof(expression));
 51046        public ExpressionParser([CanBeNull] ParameterExpression[] parameters, [NotNull] string expression, [CanBeNull] o
 51047        {
 51048            Check.NotEmpty(expression, nameof(expression));
 49
 49350            _symbols = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
 49351            _internals = new Dictionary<string, object>();
 51050            _symbols = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
 51051            _internals = new Dictionary<string, object>();
 52
 49353             if (parameters != null)
 49354            {
 49355                ProcessParameters(parameters);
 49256            }
 51053            if (parameters != null)
 51054            {
 51055                ProcessParameters(parameters);
 50956            }
 57
 49258             if (values != null)
 48259            {
 48260                ProcessValues(values);
 48261            }
 50958            if (values != null)
 49959            {
 49960                ProcessValues(values);
 49961            }
 62
 49263             _parsingConfig = parsingConfig ?? ParsingConfig.Default;
 50963            _parsingConfig = parsingConfig ?? ParsingConfig.Default;
 64
 49265            _keywordsHelper = new KeywordsHelper(_parsingConfig);
 49266            _textParser = new TextParser(expression);
 49267        }
 50965            _keywordsHelper = new KeywordsHelper(_parsingConfig);
 50966            _textParser = new TextParser(expression);
 50967        }
 68
 69        void ProcessParameters(ParameterExpression[] parameters)
 49370        {
 203971            foreach (ParameterExpression pe in parameters.Where(p => !string.IsNullOrEmpty(p.Name)))
 51070        {
 210771            foreach (ParameterExpression pe in parameters.Where(p => !string.IsNullOrEmpty(p.Name)))
 3372            {
 3373                AddSymbol(pe.Name, pe);
 3274            }
 75
 76            // If there is only 1 ParameterExpression, do also allow access using 'it'
 49277             if (parameters.Length == 1)
 47378            {
 47379                _parent = _it;
 47380                _it = parameters[0];
 50977            if (parameters.Length == 1)
 49078            {
 49079                _parent = _it;
 49080                _it = parameters[0];
 81
 47382                 if (_root == null)
 47383                {
 47384                    _root = _it;
 47385                }
 47386            }
 49287        }
 49082                if (_root == null)
 49083                {
 49084                    _root = _it;
 49085                }
 49086            }
 50987        }
 88
 89        void ProcessValues(object[] values)
 48290        {
 124891             for (int i = 0; i < values.Length; i++)
 14292            {
 14293                object value = values[i];
 49990        {
 129491            for (int i = 0; i < values.Length; i++)
 14892            {
 14893                object value = values[i];
 94                IDictionary<string, object> externals;
 95
 14296                 if (i == values.Length - 1 && (externals = value as IDictionary<string, object>) != null)
 14896                if (i == values.Length - 1 && (externals = value as IDictionary<string, object>) != null)
 497                {
 498                    _externals = externals;
 499                }
 100                else
 138101                {
 138102                    AddSymbol("@" + i.ToString(CultureInfo.InvariantCulture), value);
 138103                }
 142104            }
 482105        }
 144101                {
 144102                    AddSymbol("@" + i.ToString(CultureInfo.InvariantCulture), value);
 144103                }
 148104            }
 499105        }
 106
 107        private void AddSymbol(string name, object value)
 171108        {
 171109             if (_symbols.ContainsKey(name))
 177108        {
 177109            if (_symbols.ContainsKey(name))
 1110            {
 1111                throw ParseError(Res.DuplicateIdentifier, name);
 112            }
 113
 170114            _symbols.Add(name, value);
 170115        }
 176114            _symbols.Add(name, value);
 176115        }
 116
 117        /// <summary>
 118        /// Uses the TextParser to parse the string into the specified result type.
 121        /// <param name="createParameterCtor">if set to <c>true</c> [create parameter ctor].</param>
 122        /// <returns>Expression</returns>
 123        public Expression Parse([CanBeNull] Type resultType, bool createParameterCtor = true)
 467124        {
 467125            _resultType = resultType;
 467126            _createParameterCtor = createParameterCtor;
 483124        {
 482125            _resultType = resultType;
 483126            _createParameterCtor = createParameterCtor;
 127
 467128            int exprPos = _textParser.CurrentToken.Pos;
 467129            Expression expr = ParseConditionalOperator();
 482128            int exprPos = _textParser.CurrentToken.Pos;
 482129            Expression expr = ParseConditionalOperator();
 130
 438131             if (resultType != null)
 53132            {
 53133                 if ((expr = ExpressionPromoter.Promote(expr, resultType, true, false)) == null)
 454131            if (resultType != null)
 55132            {
 55133                if ((expr = ExpressionPromoter.Promote(expr, resultType, true, false)) == null)
 0134                {
 0135                    throw ParseError(exprPos, Res.ExpressionTypeMismatch, TypeHelper.GetTypeName(resultType));
 136                }
 53137            }
 55137            }
 138
 438139            _textParser.ValidateToken(TokenId.End, Res.SyntaxError);
 454139            _textParser.ValidateToken(TokenId.End, Res.SyntaxError);
 140
 434141            return expr;
 434142        }
 450141            return expr;
 450142        }
 143
 144#pragma warning disable 0219
 145        internal IList<DynamicOrdering> ParseOrdering(bool forceThenBy = false)
 25146        {
 25147            var orderings = new List<DynamicOrdering>();
 29148            while (true)
 29149            {
 29150                Expression expr = ParseConditionalOperator();
 27151                bool ascending = true;
 27152                 if (TokenIdentifierIs("asc") || TokenIdentifierIs("ascending"))
 26146        {
 26147            var orderings = new List<DynamicOrdering>();
 30148            while (true)
 30149            {
 30150                Expression expr = ParseConditionalOperator();
 28151                bool ascending = true;
 28152                if (TokenIdentifierIs("asc") || TokenIdentifierIs("ascending"))
 1153                {
 1154                    _textParser.NextToken();
 1155                }
 26156                 else if (TokenIdentifierIs("desc") || TokenIdentifierIs("descending"))
 27156                else if (TokenIdentifierIs("desc") || TokenIdentifierIs("descending"))
 4157                {
 4158                    _textParser.NextToken();
 4159                    ascending = false;
 4160                }
 161
 162                string methodName;
 27163                 if (forceThenBy || orderings.Count > 0)
 28163                if (forceThenBy || orderings.Count > 0)
 6164                {
 6165                     methodName = ascending ? methodThenBy : methodThenByDescending;
 6165                    methodName = ascending ? methodThenBy : methodThenByDescending;
 6166                }
 167                else
 21168                {
 21169                     methodName = ascending ? methodOrderBy : methodOrderByDescending;
 21170                }
 22168                {
 22169                    methodName = ascending ? methodOrderBy : methodOrderByDescending;
 22170                }
 171
 27172                orderings.Add(new DynamicOrdering { Selector = expr, Ascending = ascending, MethodName = methodName });
 28172                orderings.Add(new DynamicOrdering { Selector = expr, Ascending = ascending, MethodName = methodName });
 173
 27174                 if (_textParser.CurrentToken.Id != TokenId.Comma)
 23175                {
 23176                    break;
 28174                if (_textParser.CurrentToken.Id != TokenId.Comma)
 24175                {
 24176                    break;
 177                }
 178
 4179                _textParser.NextToken();
 4180            }
 181
 23182            _textParser.ValidateToken(TokenId.End, Res.SyntaxError);
 23183            return orderings;
 23184        }
 24182            _textParser.ValidateToken(TokenId.End, Res.SyntaxError);
 24183            return orderings;
 24184        }
 185#pragma warning restore 0219
 186
 187        // ?: operator
 188        Expression ParseConditionalOperator()
 789189        {
 789190            int errorPos = _textParser.CurrentToken.Pos;
 789191            Expression expr = ParseNullCoalescingOperator();
 756192             if (_textParser.CurrentToken.Id == TokenId.Question)
 847189        {
 846190            int errorPos = _textParser.CurrentToken.Pos;
 847191            Expression expr = ParseNullCoalescingOperator();
 814192            if (_textParser.CurrentToken.Id == TokenId.Question)
 1193            {
 1194                _textParser.NextToken();
 1195                Expression expr1 = ParseConditionalOperator();
 1198                Expression expr2 = ParseConditionalOperator();
 1199                expr = GenerateConditional(expr, expr1, expr2, errorPos);
 1200            }
 756201            return expr;
 756202        }
 814201            return expr;
 814202        }
 203
 204        // ?. (null-propagating) operator
 205        //Expression ParseNullPropagatingOperator()
 220
 221        // ?? (null-coalescing) operator
 222        Expression ParseNullCoalescingOperator()
 789223        {
 789224            Expression expr = ParseLambdaOperator();
 756225             if (_textParser.CurrentToken.Id == TokenId.NullCoalescing)
 846223        {
 847224            Expression expr = ParseLambdaOperator();
 814225            if (_textParser.CurrentToken.Id == TokenId.NullCoalescing)
 6226            {
 6227                _textParser.NextToken();
 6228                Expression right = ParseConditionalOperator();
 6229                expr = Expression.Coalesce(expr, right);
 6230            }
 756231            return expr;
 756232        }
 814231            return expr;
 814232        }
 233
 234        // => operator - Added Support for projection operator
 235        Expression ParseLambdaOperator()
 789236        {
 789237            Expression expr = ParseOrOperator();
 756238             if (_textParser.CurrentToken.Id == TokenId.Lambda && _it.Type == expr.Type)
 847236        {
 847237            Expression expr = ParseOrOperator();
 814238            if (_textParser.CurrentToken.Id == TokenId.Lambda && _it.Type == expr.Type)
 0239            {
 0240                _textParser.NextToken();
 0241                 if (_textParser.CurrentToken.Id == TokenId.Identifier || _textParser.CurrentToken.Id == TokenId.OpenPare
 0241                if (_textParser.CurrentToken.Id == TokenId.Identifier || _textParser.CurrentToken.Id == TokenId.OpenPare
 0242                {
 0243                    var right = ParseConditionalOperator();
 0244                    return Expression.Lambda(right, new[] { (ParameterExpression)expr });
 245                }
 0246                _textParser.ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
 0247            }
 756248            return expr;
 756249        }
 814248            return expr;
 814249        }
 250
 251        // isnull(a,b) operator
 252        Expression ParseIsNull()
 6254            int errorPos = _textParser.CurrentToken.Pos;
 6255            _textParser.NextToken();
 6256            Expression[] args = ParseArgumentList();
 6257             if (args.Length != 2)
 6257            if (args.Length != 2)
 1258            {
 1259                throw ParseError(errorPos, Res.IsNullRequiresTwoArgs);
 260            }
 264
 265        // ||, or operator
 266        Expression ParseOrOperator()
 789267        {
 789268            Expression left = ParseAndOperator();
 773269             while (_textParser.CurrentToken.Id == TokenId.DoubleBar || TokenIdentifierIs("or"))
 847267        {
 847268            Expression left = ParseAndOperator();
 831269            while (_textParser.CurrentToken.Id == TokenId.DoubleBar || TokenIdentifierIs("or"))
 17270            {
 17271                Token op = _textParser.CurrentToken;
 17272                _textParser.NextToken();
 17274                CheckAndPromoteOperands(typeof(ILogicalSignatures), op.Text, ref left, ref right, op.Pos);
 17275                left = Expression.OrElse(left, right);
 17276            }
 756277            return left;
 756278        }
 814277            return left;
 814278        }
 279
 280        // &&, and operator
 281        Expression ParseAndOperator()
 806282        {
 806283            Expression left = ParseIn();
 779284             while (_textParser.CurrentToken.Id == TokenId.DoubleAmphersand || TokenIdentifierIs("and"))
 863282        {
 863283            Expression left = ParseIn();
 837284            while (_textParser.CurrentToken.Id == TokenId.DoubleAmphersand || TokenIdentifierIs("and"))
 6285            {
 6286                Token op = _textParser.CurrentToken;
 6287                _textParser.NextToken();
 6289                CheckAndPromoteOperands(typeof(ILogicalSignatures), op.Text, ref left, ref right, op.Pos);
 6290                left = Expression.AndAlso(left, right);
 6291            }
 773292            return left;
 773293        }
 831292            return left;
 831293        }
 294
 295        // in operator for literals - example: "x in (1,2,3,4)"
 296        // in operator to mimic contains - example: "x in @0", compare to @0.Contains(x)
 297        // Adapted from ticket submitted by github user mlewis9548
 298        Expression ParseIn()
 806299        {
 806300            Expression left = ParseLogicalAndOrOperator();
 777301            Expression accumulate = left;
 864299        {
 864300            Expression left = ParseLogicalAndOrOperator();
 835301            Expression accumulate = left;
 302
 791303             while (TokenIdentifierIs("in"))
 848303            while (TokenIdentifierIs("in"))
 18304            {
 18305                var op = _textParser.CurrentToken;
 306
 18307                _textParser.NextToken();
 18308                 if (_textParser.CurrentToken.Id == TokenId.OpenParen) // literals (or other inline list)
 18308                if (_textParser.CurrentToken.Id == TokenId.OpenParen) // literals (or other inline list)
 15309                {
 44310                     while (_textParser.CurrentToken.Id != TokenId.CloseParen)
 44310                    while (_textParser.CurrentToken.Id != TokenId.CloseParen)
 33311                    {
 33312                        _textParser.NextToken();
 313
 30315                        Expression right = ParseUnary();
 316
 317                        // if the identifier is an Enum, try to convert the right-side also to an Enum.
 29318                         if (left.Type.GetTypeInfo().IsEnum && right is ConstantExpression)
 29318                        if (left.Type.GetTypeInfo().IsEnum && right is ConstantExpression)
 4319                        {
 4320                            right = ParseEnumToConstantExpression(op.Pos, left.Type, right as ConstantExpression);
 4321                        }
 322
 323                        // else, check for direct type match
 25324                         else if (left.Type != right.Type)
 25324                        else if (left.Type != right.Type)
 2325                        {
 2326                            CheckAndPromoteOperands(typeof(IEqualitySignatures), "==", ref left, ref right, op.Pos);
 2327                        }
 328
 29329                         if (accumulate.Type != typeof(bool))
 29329                        if (accumulate.Type != typeof(bool))
 12330                        {
 12331                            accumulate = ExpressionHelper.GenerateEqual(left, right);
 12332                        }
 17335                            accumulate = Expression.OrElse(accumulate, ExpressionHelper.GenerateEqual(left, right));
 17336                        }
 337
 29338                         if (_textParser.CurrentToken.Id == TokenId.End)
 29338                        if (_textParser.CurrentToken.Id == TokenId.End)
 0339                        {
 0340                            throw ParseError(op.Pos, Res.CloseParenOrCommaExpected);
 341                        }
 29342                    }
 11343                }
 3344                 else if (_textParser.CurrentToken.Id == TokenId.Identifier) // a single argument
 3344                else if (_textParser.CurrentToken.Id == TokenId.Identifier) // a single argument
 3345                {
 3346                    Expression right = ParsePrimary();
 347
 3348                     if (!typeof(IEnumerable).IsAssignableFrom(right.Type))
 3348                    if (!typeof(IEnumerable).IsAssignableFrom(right.Type))
 0349                    {
 0350                        throw ParseError(_textParser.CurrentToken.Pos, Res.IdentifierImplementingInterfaceExpected, type
 351                    }
 352
 3353                    var args = new[] { left };
 354
 3355                     if (MethodFinder.FindMethod(typeof(IEnumerableSignatures), nameof(IEnumerableSignatures.Contains), f
 3355                    if (MethodFinder.FindMethod(typeof(IEnumerableSignatures), nameof(IEnumerableSignatures.Contains), f
 0356                    {
 0357                        throw ParseError(op.Pos, Res.NoApplicableAggregate, nameof(IEnumerableSignatures.Contains));
 358                    }
 14371                _textParser.NextToken();
 14372            }
 373
 773374            return accumulate;
 773375        }
 831374            return accumulate;
 831375        }
 376
 377        // &, | bitwise operators
 378        Expression ParseLogicalAndOrOperator()
 806379        {
 806380            Expression left = ParseComparisonOperator();
 819381             while (_textParser.CurrentToken.Id == TokenId.Amphersand || _textParser.CurrentToken.Id == TokenId.Bar)
 863379        {
 863380            Expression left = ParseComparisonOperator();
 876381            while (_textParser.CurrentToken.Id == TokenId.Amphersand || _textParser.CurrentToken.Id == TokenId.Bar)
 42382            {
 42383                Token op = _textParser.CurrentToken;
 42384                _textParser.NextToken();
 42385                Expression right = ParseComparisonOperator();
 386
 42387                 if (left.Type.GetTypeInfo().IsEnum)
 42387                if (left.Type.GetTypeInfo().IsEnum)
 32388                {
 32389                    left = Expression.Convert(left, Enum.GetUnderlyingType(left.Type));
 32390                }
 391
 42392                 if (right.Type.GetTypeInfo().IsEnum)
 42392                if (right.Type.GetTypeInfo().IsEnum)
 0393                {
 0394                    right = Expression.Convert(right, Enum.GetUnderlyingType(right.Type));
 0395                }
 396
 42397                 switch (op.Id)
 42397                switch (op.Id)
 398                {
 399                    case TokenId.Amphersand:
 400                        int parseValue;
 26401                         if (left.Type == typeof(string) && left.NodeType == ExpressionType.Constant && int.TryParse((str
 26401                        if (left.Type == typeof(string) && left.NodeType == ExpressionType.Constant && int.TryParse((str
 1402                        {
 1403                            left = Expression.Constant(parseValue);
 1404                        }
 25405                         else if (right.Type == typeof(string) && right.NodeType == ExpressionType.Constant && int.TryPar
 25405                        else if (right.Type == typeof(string) && right.NodeType == ExpressionType.Constant && int.TryPar
 2406                        {
 2407                            right = Expression.Constant(parseValue);
 2408                        }
 409
 410                        // When at least one side of the operator is a string, consider it's a VB-style concatenation op
 411                        // Doesn't break any other function since logical AND with a string is invalid anyway.
 26412                         if (left.Type == typeof(string) || right.Type == typeof(string))
 26412                        if (left.Type == typeof(string) || right.Type == typeof(string))
 5413                        {
 5414                            left = ExpressionHelper.GenerateStringConcat(left, right);
 5415                        }
 16426                        break;
 427                }
 42428            }
 777429            return left;
 777430        }
 835429            return left;
 835430        }
 431
 432        // =, ==, !=, <>, >, >=, <, <= operators
 433        Expression ParseComparisonOperator()
 854434        {
 854435            Expression left = ParseShiftOperator();
 1070436             while (_textParser.CurrentToken.Id == TokenId.Equal || _textParser.CurrentToken.Id == TokenId.DoubleEqual ||
 1070437                   _textParser.CurrentToken.Id == TokenId.ExclamationEqual || _textParser.CurrentToken.Id == TokenId.Les
 1070438                   _textParser.CurrentToken.Id == TokenId.GreaterThan || _textParser.CurrentToken.Id == TokenId.GreaterT
 1070439                   _textParser.CurrentToken.Id == TokenId.LessThan || _textParser.CurrentToken.Id == TokenId.LessThanEqu
 245440            {
 911434        {
 911435            Expression left = ParseShiftOperator();
 1136436            while (_textParser.CurrentToken.Id == TokenId.Equal || _textParser.CurrentToken.Id == TokenId.DoubleEqual ||
 1136437                   _textParser.CurrentToken.Id == TokenId.ExclamationEqual || _textParser.CurrentToken.Id == TokenId.Les
 1136438                   _textParser.CurrentToken.Id == TokenId.GreaterThan || _textParser.CurrentToken.Id == TokenId.GreaterT
 1136439                   _textParser.CurrentToken.Id == TokenId.LessThan || _textParser.CurrentToken.Id == TokenId.LessThanEqu
 254440            {
 441                ConstantExpression constantExpr;
 442                TypeConverter typeConverter;
 245443                Token op = _textParser.CurrentToken;
 245444                _textParser.NextToken();
 243445                Expression right = ParseShiftOperator();
 239446                bool isEquality = op.Id == TokenId.Equal || op.Id == TokenId.DoubleEqual || op.Id == TokenId.Exclamation
 254443                Token op = _textParser.CurrentToken;
 254444                _textParser.NextToken();
 252445                Expression right = ParseShiftOperator();
 248446                bool isEquality = op.Id == TokenId.Equal || op.Id == TokenId.DoubleEqual || op.Id == TokenId.Exclamation
 447
 239448                 if (isEquality && (!left.Type.GetTypeInfo().IsValueType && !right.Type.GetTypeInfo().IsValueType || left
 33449                {
 248448                if (isEquality && (!left.Type.GetTypeInfo().IsValueType && !right.Type.GetTypeInfo().IsValueType || left
 37449                {
 450                    // If left or right is NullLiteral, just continue. Else check if the types differ.
 33451                     if (!(left == Constants.NullLiteral || right == Constants.NullLiteral) && left.Type != right.Type)
 37451                    if (!(left == Constants.NullLiteral || right == Constants.NullLiteral) && left.Type != right.Type)
 0452                    {
 0453                         if (left.Type.IsAssignableFrom(right.Type))
 0453                        if (left.Type.IsAssignableFrom(right.Type))
 0454                        {
 0455                            right = Expression.Convert(right, left.Type);
 0456                        }
 0457                         else if (right.Type.IsAssignableFrom(left.Type))
 0457                        else if (right.Type.IsAssignableFrom(left.Type))
 0458                        {
 0459                            left = Expression.Convert(left, right.Type);
 0460                        }
 0463                            throw IncompatibleOperandsError(op.Text, left, right, op.Pos);
 464                        }
 0465                    }
 33466                }
 206467                 else if (TypeHelper.IsEnumType(left.Type) || TypeHelper.IsEnumType(right.Type))
 37466                }
 211467                else if (TypeHelper.IsEnumType(left.Type) || TypeHelper.IsEnumType(right.Type))
 33468                {
 33469                     if (left.Type != right.Type)
 33469                    if (left.Type != right.Type)
 17470                    {
 471                        Expression e;
 17472                         if ((e = ExpressionPromoter.Promote(right, left.Type, true, false)) != null)
 17472                        if ((e = ExpressionPromoter.Promote(right, left.Type, true, false)) != null)
 2473                        {
 2474                            right = e;
 2475                        }
 15476                         else if ((e = ExpressionPromoter.Promote(left, right.Type, true, false)) != null)
 15476                        else if ((e = ExpressionPromoter.Promote(left, right.Type, true, false)) != null)
 2477                        {
 2478                            left = e;
 2479                        }
 13480                         else if (TypeHelper.IsEnumType(left.Type) && (constantExpr = right as ConstantExpression) != nul
 13480                        else if (TypeHelper.IsEnumType(left.Type) && (constantExpr = right as ConstantExpression) != nul
 6481                        {
 6482                            right = ParseEnumToConstantExpression(op.Pos, left.Type, constantExpr);
 6483                        }
 7484                         else if (TypeHelper.IsEnumType(right.Type) && (constantExpr = left as ConstantExpression) != nul
 7484                        else if (TypeHelper.IsEnumType(right.Type) && (constantExpr = left as ConstantExpression) != nul
 7485                        {
 7486                            left = ParseEnumToConstantExpression(op.Pos, right.Type, constantExpr);
 7487                        }
 491                        }
 17492                    }
 33493                }
 173494                 else if ((constantExpr = right as ConstantExpression) != null && constantExpr.Value is string && (typeCo
 7495                {
 7496                    right = Expression.Constant(typeConverter.ConvertFromInvariantString((string)constantExpr.Value), le
 7497                }
 166498                 else if ((constantExpr = left as ConstantExpression) != null && constantExpr.Value is string && (typeCon
 178494                else if ((constantExpr = right as ConstantExpression) != null && constantExpr.Value is string && (typeCo
 8495                {
 8496                    right = Expression.Constant(typeConverter.ConvertFromInvariantString((string)constantExpr.Value), le
 8497                }
 170498                else if ((constantExpr = left as ConstantExpression) != null && constantExpr.Value is string && (typeCon
 3499                {
 3500                    left = Expression.Constant(typeConverter.ConvertFromInvariantString((string)constantExpr.Value), rig
 3501                }
 502                else
 163503                {
 163504                    bool typesAreSameAndImplementCorrectInterface = false;
 163505                     if (left.Type == right.Type)
 104506                    {
 572507                        var interfaces = left.Type.GetInterfaces().Where(x => x.GetTypeInfo().IsGenericType);
 104508                         if (isEquality)
 167503                {
 167504                    bool typesAreSameAndImplementCorrectInterface = false;
 167505                    if (left.Type == right.Type)
 105506                    {
 577507                        var interfaces = left.Type.GetInterfaces().Where(x => x.GetTypeInfo().IsGenericType);
 105508                        if (isEquality)
 61509                        {
 183510                            typesAreSameAndImplementCorrectInterface = interfaces.Any(x => x.GetGenericTypeDefinition() 
 183510                            typesAreSameAndImplementCorrectInterface = interfaces.Any(x => x.GetGenericTypeDefinition() 
 61511                        }
 512                        else
 43513                        {
 86514                            typesAreSameAndImplementCorrectInterface = interfaces.Any(x => x.GetGenericTypeDefinition() 
 43515                        }
 104516                    }
 44513                        {
 88514                            typesAreSameAndImplementCorrectInterface = interfaces.Any(x => x.GetGenericTypeDefinition() 
 44515                        }
 105516                    }
 517
 518
 163519                     if (!typesAreSameAndImplementCorrectInterface)
 59520                    {
 59521                         if (left.Type.GetTypeInfo().IsClass && right is ConstantExpression && HasImplicitConversion(left
 167519                    if (!typesAreSameAndImplementCorrectInterface)
 62520                    {
 62521                        if (left.Type.GetTypeInfo().IsClass && right is ConstantExpression && HasImplicitConversion(left
 1522                        {
 1523                            left = Expression.Convert(left, right.Type);
 1524                        }
 58525                         else if (right.Type.GetTypeInfo().IsClass && left is ConstantExpression && HasImplicitConversion
 61525                        else if (right.Type.GetTypeInfo().IsClass && left is ConstantExpression && HasImplicitConversion
 1526                        {
 1527                            right = Expression.Convert(right, left.Type);
 1528                        }
 529                        else
 57530                        {
 57531                             CheckAndPromoteOperands(isEquality ? typeof(IEqualitySignatures) : typeof(IRelationalSignatu
 54532                        }
 56533                    }
 160534                }
 60530                        {
 60531                            CheckAndPromoteOperands(isEquality ? typeof(IEqualitySignatures) : typeof(IRelationalSignatu
 57532                        }
 59533                    }
 164534                }
 535
 236536                 switch (op.Id)
 245536                switch (op.Id)
 537                {
 538                    case TokenId.Equal:
 539                    case TokenId.DoubleEqual:
 172540                        left = ExpressionHelper.GenerateEqual(left, right);
 172541                        break;
 180540                        left = ExpressionHelper.GenerateEqual(left, right);
 180541                        break;
 542                    case TokenId.ExclamationEqual:
 543                    case TokenId.LessGreater:
 7544                        left = ExpressionHelper.GenerateNotEqual(left, right);
 7545                        break;
 546                    case TokenId.GreaterThan:
 42547                        left = ExpressionHelper.GenerateGreaterThan(left, right);
 42548                        break;
 43547                        left = ExpressionHelper.GenerateGreaterThan(left, right);
 43548                        break;
 549                    case TokenId.GreaterThanEqual:
 3550                        left = ExpressionHelper.GenerateGreaterThanEqual(left, right);
 3551                        break;
 4556                        left = ExpressionHelper.GenerateLessThanEqual(left, right);
 4557                        break;
 558                }
 236559            }
 245559            }
 560
 825561            return left;
 825562        }
 883561            return left;
 883562        }
 563
 564        private bool HasImplicitConversion(Type baseType, Type targetType)
 2565        {
 2566            return baseType.GetMethods(BindingFlags.Public | BindingFlags.Static)
 4567                .Where(mi => mi.Name == "op_Implicit" && mi.ReturnType == targetType)
 4568                 .Any(mi => mi.GetParameters().FirstOrDefault()?.ParameterType == baseType);
 4568                .Any(mi => mi.GetParameters().FirstOrDefault()?.ParameterType == baseType);
 2569        }
 570
 571        private ConstantExpression ParseEnumToConstantExpression(int pos, Type leftType, ConstantExpression constantExpr
 17577        {
 578            try
 17579            {
 17580                 if (constantExpr.Value is string)
 17580                if (constantExpr.Value is string)
 12581                {
 12582                    return Enum.Parse(TypeHelper.GetNonNullableType(leftType), (string)constantExpr.Value, true);
 583                }
 592
 593        // <<, >> operators
 594        Expression ParseShiftOperator()
 1097595        {
 1097596            Expression left = ParseAdditive();
 1106597             while (_textParser.CurrentToken.Id == TokenId.DoubleLessThan || _textParser.CurrentToken.Id == TokenId.Doubl
 1163595        {
 1163596            Expression left = ParseAdditive();
 1172597            while (_textParser.CurrentToken.Id == TokenId.DoubleLessThan || _textParser.CurrentToken.Id == TokenId.Doubl
 33598            {
 33599                Token op = _textParser.CurrentToken;
 33600                _textParser.NextToken();
 33601                Expression right = ParseAdditive();
 32602                 switch (op.Id)
 32602                switch (op.Id)
 603                {
 604                    case TokenId.DoubleLessThan:
 24605                        CheckAndPromoteOperands(typeof(IShiftSignatures), op.Text, ref left, ref right, op.Pos);
 8611                        break;
 612                }
 32613            }
 1073614            return left;
 1073615        }
 1140614            return left;
 1140615        }
 616
 617        // +, - operators
 618        Expression ParseAdditive()
 1130619        {
 1130620            Expression left = ParseMultiplicative();
 1130621             while (_textParser.CurrentToken.Id == TokenId.Plus || _textParser.CurrentToken.Id == TokenId.Minus)
 24622            {
 24623                Token op = _textParser.CurrentToken;
 24624                _textParser.NextToken();
 24625                Expression right = ParseMultiplicative();
 24626                 switch (op.Id)
 1197619        {
 1197620            Expression left = ParseMultiplicative();
 1202621            while (_textParser.CurrentToken.Id == TokenId.Plus || _textParser.CurrentToken.Id == TokenId.Minus)
 30622            {
 30623                Token op = _textParser.CurrentToken;
 30624                _textParser.NextToken();
 30625                Expression right = ParseMultiplicative();
 30626                switch (op.Id)
 627                {
 628                    case TokenId.Plus:
 23629                         if (left.Type == typeof(string) || right.Type == typeof(string))
 9630                        {
 9631                            left = ExpressionHelper.GenerateStringConcat(left, right);
 9632                        }
 29629                        if (left.Type == typeof(string) || right.Type == typeof(string))
 15630                        {
 15631                            left = ExpressionHelper.GenerateStringConcat(left, right);
 15632                        }
 633                        else
 14634                        {
 14635                            CheckAndPromoteOperands(typeof(IAddSignatures), op.Text, ref left, ref right, op.Pos);
 14636                            left = ExpressionHelper.GenerateAdd(left, right);
 14637                        }
 23638                        break;
 29638                        break;
 639                    case TokenId.Minus:
 1640                        CheckAndPromoteOperands(typeof(ISubtractSignatures), op.Text, ref left, ref right, op.Pos);
 1641                        left = ExpressionHelper.GenerateSubtract(left, right);
 1642                        break;
 643                }
 24644            }
 1106645            return left;
 1106646        }
 30644            }
 1173645            return left;
 1173646        }
 647
 648        // *, /, %, mod operators
 649        Expression ParseMultiplicative()
 1154650        {
 1154651            Expression left = ParseUnary();
 1148652             while (_textParser.CurrentToken.Id == TokenId.Asterisk || _textParser.CurrentToken.Id == TokenId.Slash ||
 1148653                _textParser.CurrentToken.Id == TokenId.Percent || TokenIdentifierIs("mod"))
 1227650        {
 1227651            Expression left = ParseUnary();
 1221652            while (_textParser.CurrentToken.Id == TokenId.Asterisk || _textParser.CurrentToken.Id == TokenId.Slash ||
 1221653                _textParser.CurrentToken.Id == TokenId.Percent || TokenIdentifierIs("mod"))
 18654            {
 18655                Token op = _textParser.CurrentToken;
 18656                _textParser.NextToken();
 18657                Expression right = ParseUnary();
 18658                CheckAndPromoteOperands(typeof(IArithmeticSignatures), op.Text, ref left, ref right, op.Pos);
 17659                 switch (op.Id)
 17659                switch (op.Id)
 660                {
 661                    case TokenId.Asterisk:
 15662                        left = Expression.Multiply(left, right);
 1670                        break;
 671                }
 17672            }
 1130673            return left;
 1130674        }
 1203673            return left;
 1203674        }
 675
 676        // -, !, not unary operators
 677        Expression ParseUnary()
 1202678        {
 1202679             if (_textParser.CurrentToken.Id == TokenId.Minus || _textParser.CurrentToken.Id == TokenId.Exclamation || To
 1275678        {
 1275679            if (_textParser.CurrentToken.Id == TokenId.Minus || _textParser.CurrentToken.Id == TokenId.Exclamation || To
 26680            {
 26681                Token op = _textParser.CurrentToken;
 26682                _textParser.NextToken();
 23683                 if (op.Id == TokenId.Minus && (_textParser.CurrentToken.Id == TokenId.IntegerLiteral || _textParser.Curr
 23683                if (op.Id == TokenId.Minus && (_textParser.CurrentToken.Id == TokenId.IntegerLiteral || _textParser.Curr
 23684                {
 23685                    _textParser.CurrentToken.Text = "-" + _textParser.CurrentToken.Text;
 23686                    _textParser.CurrentToken.Pos = op.Pos;
 688                }
 689
 0690                Expression expr = ParseUnary();
 0691                 if (op.Id == TokenId.Minus)
 0691                if (op.Id == TokenId.Minus)
 0692                {
 0693                    CheckAndPromoteOperand(typeof(INegationSignatures), op.Text, ref expr, op.Pos);
 0694                    expr = Expression.Negate(expr);
 0702                return expr;
 703            }
 704
 1176705            return ParsePrimary();
 1178706        }
 1248705            return ParsePrimary();
 1251706        }
 707
 708        Expression ParsePrimary()
 1202709        {
 1202710            Expression expr = ParsePrimaryStart();
 1427711            while (true)
 1427712            {
 1427713                 if (_textParser.CurrentToken.Id == TokenId.Dot)
 244714                {
 244715                    _textParser.NextToken();
 244716                    expr = ParseMemberAccess(null, expr);
 243717                }
 1183718                 else if (_textParser.CurrentToken.Id == TokenId.NullPropagation)
 1274709        {
 1274710            Expression expr = ParsePrimaryStart();
 1513711            while (true)
 1513712            {
 1513713                if (_textParser.CurrentToken.Id == TokenId.Dot)
 255714                {
 255715                    _textParser.NextToken();
 255716                    expr = ParseMemberAccess(null, expr);
 254717                }
 1258718                else if (_textParser.CurrentToken.Id == TokenId.NullPropagation)
 1719                {
 1720                    throw new NotSupportedException("An expression tree lambda may not contain a null propagating operat
 721                }
 1182722                 else if (_textParser.CurrentToken.Id == TokenId.OpenBracket)
 1723                {
 1724                    expr = ParseElementAccess(expr);
 1725                }
 1257722                else if (_textParser.CurrentToken.Id == TokenId.OpenBracket)
 3723                {
 3724                    expr = ParseElementAccess(expr);
 3725                }
 726                else
 1181727                {
 1181728                    break;
 1254727                {
 1254728                    break;
 729                }
 244730            }
 1181731            return expr;
 1181732        }
 257730            }
 1254731            return expr;
 1254732        }
 733
 734        Expression ParsePrimaryStart()
 1202735        {
 1202736             switch (_textParser.CurrentToken.Id)
 1275735        {
 1275736            switch (_textParser.CurrentToken.Id)
 737            {
 738                case TokenId.Identifier:
 899739                    return ParseIdentifier();
 953739                    return ParseIdentifier();
 740                case TokenId.StringLiteral:
 38741                    return ParseStringLiteral();
 52741                    return ParseStringLiteral();
 742                case TokenId.IntegerLiteral:
 203743                    return ParseIntegerLiteral();
 208743                    return ParseIntegerLiteral();
 744                case TokenId.RealLiteral:
 19745                    return ParseRealLiteral();
 746                case TokenId.OpenParen:
 748                default:
 2749                    throw ParseError(Res.ExpressionExpected);
 750            }
 1183751        }
 1256751        }
 752
 753        Expression ParseStringLiteral()
 38754        {
 38755            _textParser.ValidateToken(TokenId.StringLiteral);
 38756            char quote = _textParser.CurrentToken.Text[0];
 38757            string s = _textParser.CurrentToken.Text.Substring(1, _textParser.CurrentToken.Text.Length - 2);
 758
 38759             if (quote == '\'')
 0760            {
 0761                 if (s.Length != 1)
 0762                {
 0763                    throw ParseError(Res.InvalidCharacterLiteral);
 764                }
 0765                _textParser.NextToken();
 0766                return ConstantExpressionHelper.CreateLiteral(s[0], s);
 767            }
 38768            _textParser.NextToken();
 38769            return ConstantExpressionHelper.CreateLiteral(s, s);
 38770        }
 771
 772        Expression ParseIntegerLiteral()
 203773        {
 203774            _textParser.ValidateToken(TokenId.IntegerLiteral);
 775
 203776            string text = _textParser.CurrentToken.Text;
 203777            string qualifier = null;
 203778            char last = text[text.Length - 1];
 203779             bool isHexadecimal = text.StartsWith(text[0] == '-' ? "-0x" : "0x", StringComparison.OrdinalIgnoreCase);
 203780            char[] qualifierLetters = isHexadecimal
 203781                                          ? new[] { 'U', 'u', 'L', 'l' }
 203782                                          : new[] { 'U', 'u', 'L', 'l', 'F', 'f', 'D', 'd', 'M', 'm' };
 783
 203784             if (qualifierLetters.Contains(last))
 26785            {
 52786                int pos = text.Length - 1, count = 0;
 56787                 while (qualifierLetters.Contains(text[pos]))
 30788                {
 30789                    ++count;
 30790                    --pos;
 30791                }
 26792                qualifier = text.Substring(text.Length - count, count);
 26793                text = text.Substring(0, text.Length - count);
 26794            }
 795
 203796             if (text[0] != '-')
 188797            {
 188798                 if (isHexadecimal)
 4799                {
 4800                    text = text.Substring(2);
 4801                }
 802
 188803                 if (!ulong.TryParse(text, isHexadecimal ? NumberStyles.HexNumber : NumberStyles.Integer, CultureInfo.Cur
 0804                {
 0805                    throw ParseError(Res.InvalidIntegerLiteral, text);
 806                }
 807
 188808                _textParser.NextToken();
 188809                 if (!string.IsNullOrEmpty(qualifier))
 15810                {
 18811                     if (qualifier == "U" || qualifier == "u") return ConstantExpressionHelper.CreateLiteral((uint)value,
 15812                     if (qualifier == "L" || qualifier == "l") return ConstantExpressionHelper.CreateLiteral((long)value,
 813
 814                    // in case of UL, just return
 9815                    return ConstantExpressionHelper.CreateLiteral(value, text);
 816                }
 52754        {
 52755            _textParser.ValidateToken(TokenId.StringLiteral);
 52756            char quote = _textParser.CurrentToken.Text[0];
 52757            string s = _textParser.CurrentToken.Text.Substring(1, _textParser.CurrentToken.Text.Length - 2);
 52758            int index1 = 0;
 60759            while (true)
 60760            {
 60761                int index2 = s.IndexOf(quote, index1);
 60762                if (index2 < 0)
 52763                {
 52764                    break;
 765                }
 766
 8767                if (index2 + 1 < s.Length && s[index2 + 1] == quote)
 2768                {
 2769                    s = s.Remove(index2, 1);
 2770                }
 8771                index1 = index2 + 1;
 8772            }
 773
 52774            if (quote == '\'')
 0775            {
 0776                if (s.Length != 1)
 0777                {
 0778                    throw ParseError(Res.InvalidCharacterLiteral);
 779                }
 0780                _textParser.NextToken();
 0781                return ConstantExpressionHelper.CreateLiteral(s[0], s);
 782            }
 52783            _textParser.NextToken();
 52784            return ConstantExpressionHelper.CreateLiteral(s, s);
 52785        }
 786
 787        Expression ParseIntegerLiteral()
 208788        {
 208789            _textParser.ValidateToken(TokenId.IntegerLiteral);
 790
 208791            string text = _textParser.CurrentToken.Text;
 208792            string qualifier = null;
 208793            char last = text[text.Length - 1];
 208794            bool isHexadecimal = text.StartsWith(text[0] == '-' ? "-0x" : "0x", StringComparison.OrdinalIgnoreCase);
 208795            char[] qualifierLetters = isHexadecimal
 208796                                          ? new[] { 'U', 'u', 'L', 'l' }
 208797                                          : new[] { 'U', 'u', 'L', 'l', 'F', 'f', 'D', 'd', 'M', 'm' };
 798
 208799            if (qualifierLetters.Contains(last))
 26800            {
 52801                int pos = text.Length - 1, count = 0;
 56802                while (qualifierLetters.Contains(text[pos]))
 30803                {
 30804                    ++count;
 30805                    --pos;
 30806                }
 26807                qualifier = text.Substring(text.Length - count, count);
 26808                text = text.Substring(0, text.Length - count);
 26809            }
 810
 208811            if (text[0] != '-')
 193812            {
 193813                if (isHexadecimal)
 4814                {
 4815                    text = text.Substring(2);
 4816                }
 817
 818                // if (value <= (int)short.MaxValue) return ConstantExpressionHelper.CreateLiteral((short)value, text);
 346819                 if (value <= int.MaxValue) return ConstantExpressionHelper.CreateLiteral((int)value, text);
 0820                 if (value <= uint.MaxValue) return ConstantExpressionHelper.CreateLiteral((uint)value, text);
 0821                 if (value <= long.MaxValue) return ConstantExpressionHelper.CreateLiteral((long)value, text);
 193818                if (!ulong.TryParse(text, isHexadecimal ? NumberStyles.HexNumber : NumberStyles.Integer, CultureInfo.Cur
 0819                {
 0820                    throw ParseError(Res.InvalidIntegerLiteral, text);
 821                }
 822
 0823                return ConstantExpressionHelper.CreateLiteral(value, text);
 824            }
 825            else
 15826            {
 15827                 if (isHexadecimal)
 2828                {
 2829                    text = text.Substring(3);
 2830                }
 831
 15832                 if (!long.TryParse(text, isHexadecimal ? NumberStyles.HexNumber : NumberStyles.Integer, CultureInfo.Curr
 0833                {
 0834                    throw ParseError(Res.InvalidIntegerLiteral, text);
 835                }
 836
 15837                 if (isHexadecimal)
 2838                {
 2839                    value = -value;
 2840                }
 841
 15842                _textParser.NextToken();
 15843                 if (!string.IsNullOrEmpty(qualifier))
 11844                {
 11845                     if (qualifier == "L" || qualifier == "l")
 4846                        return ConstantExpressionHelper.CreateLiteral(value, text);
 847
 7848                     if (qualifier == "F" || qualifier == "f")
 2849                        return TryParseAsFloat(text, qualifier[0]);
 850
 5851                     if (qualifier == "D" || qualifier == "d")
 2852                        return TryParseAsDouble(text, qualifier[0]);
 853
 3854                     if (qualifier == "M" || qualifier == "m")
 2855                        return TryParseAsDecimal(text, qualifier[0]);
 193823                _textParser.NextToken();
 193824                if (!string.IsNullOrEmpty(qualifier))
 15825                {
 18826                    if (qualifier == "U" || qualifier == "u") return ConstantExpressionHelper.CreateLiteral((uint)value,
 15827                    if (qualifier == "L" || qualifier == "l") return ConstantExpressionHelper.CreateLiteral((long)value,
 828
 829                    // in case of UL, just return
 9830                    return ConstantExpressionHelper.CreateLiteral(value, text);
 831                }
 832
 833                // if (value <= (int)short.MaxValue) return ConstantExpressionHelper.CreateLiteral((short)value, text);
 356834                if (value <= int.MaxValue) return ConstantExpressionHelper.CreateLiteral((int)value, text);
 0835                if (value <= uint.MaxValue) return ConstantExpressionHelper.CreateLiteral((uint)value, text);
 0836                if (value <= long.MaxValue) return ConstantExpressionHelper.CreateLiteral((long)value, text);
 837
 0838                return ConstantExpressionHelper.CreateLiteral(value, text);
 839            }
 840            else
 15841            {
 15842                if (isHexadecimal)
 2843                {
 2844                    text = text.Substring(3);
 2845                }
 846
 15847                if (!long.TryParse(text, isHexadecimal ? NumberStyles.HexNumber : NumberStyles.Integer, CultureInfo.Curr
 0848                {
 0849                    throw ParseError(Res.InvalidIntegerLiteral, text);
 850                }
 851
 15852                if (isHexadecimal)
 2853                {
 2854                    value = -value;
 2855                }
 856
 1857                    throw ParseError(Res.MinusCannotBeAppliedToUnsignedInteger);
 858                }
 859
 4860                 if (value <= int.MaxValue)
 4861                {
 4862                    return ConstantExpressionHelper.CreateLiteral((int)value, text);
 863                }
 864
 0865                return ConstantExpressionHelper.CreateLiteral(value, text);
 866            }
 202867        }
 15857                _textParser.NextToken();
 15858                if (!string.IsNullOrEmpty(qualifier))
 11859                {
 11860                    if (qualifier == "L" || qualifier == "l")
 4861                        return ConstantExpressionHelper.CreateLiteral(value, text);
 862
 7863                    if (qualifier == "F" || qualifier == "f")
 2864                        return TryParseAsFloat(text, qualifier[0]);
 865
 5866                    if (qualifier == "D" || qualifier == "d")
 2867                        return TryParseAsDouble(text, qualifier[0]);
 868
 869        Expression ParseRealLiteral()
 19870        {
 19871            _textParser.ValidateToken(TokenId.RealLiteral);
 872
 19873            string text = _textParser.CurrentToken.Text;
 19874            char qualifier = text[text.Length - 1];
 875
 19876            _textParser.NextToken();
 19877            return TryParseAsFloat(text, qualifier);
 19878        }
 3869                    if (qualifier == "M" || qualifier == "m")
 2870                        return TryParseAsDecimal(text, qualifier[0]);
 871
 1872                    throw ParseError(Res.MinusCannotBeAppliedToUnsignedInteger);
 873                }
 874
 4875                if (value <= int.MaxValue)
 4876                {
 4877                    return ConstantExpressionHelper.CreateLiteral((int)value, text);
 878                }
 879
 880        Expression TryParseAsFloat(string text, char qualifier)
 21881        {
 21882             if (qualifier == 'F' || qualifier == 'f')
 7883            {
 7884                 if (float.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Float, CultureInfo.InvariantCulture,
 5885                {
 5886                    return ConstantExpressionHelper.CreateLiteral(f, text);
 887                }
 2888            }
 889
 890            // not possible to find float qualifier, so try to parse as double
 16891            return TryParseAsDecimal(text, qualifier);
 21892        }
 893
 894        Expression TryParseAsDecimal(string text, char qualifier)
 18895        {
 18896             if (qualifier == 'M' || qualifier == 'm')
 7897            {
 7898                 if (decimal.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Number, CultureInfo.InvariantCultu
 5899                {
 5900                    return ConstantExpressionHelper.CreateLiteral(d, text);
 901                }
 2902            }
 903
 904            // not possible to find float qualifier, so try to parse as double
 13905            return TryParseAsDouble(text, qualifier);
 18906        }
 907
 908        Expression TryParseAsDouble(string text, char qualifier)
 15909        {
 910            double d;
 15911             if (qualifier == 'D' || qualifier == 'd')
 0880                return ConstantExpressionHelper.CreateLiteral(value, text);
 881            }
 207882        }
 883
 884        Expression ParseRealLiteral()
 19885        {
 19886            _textParser.ValidateToken(TokenId.RealLiteral);
 887
 19888            string text = _textParser.CurrentToken.Text;
 19889            char qualifier = text[text.Length - 1];
 890
 19891            _textParser.NextToken();
 19892            return TryParseAsFloat(text, qualifier);
 19893        }
 894
 895        Expression TryParseAsFloat(string text, char qualifier)
 21896        {
 21897            if (qualifier == 'F' || qualifier == 'f')
 7898            {
 7899                if (float.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Float, CultureInfo.InvariantCulture,
 5900                {
 5901                    return ConstantExpressionHelper.CreateLiteral(f, text);
 902                }
 2903            }
 904
 905            // not possible to find float qualifier, so try to parse as double
 16906            return TryParseAsDecimal(text, qualifier);
 21907        }
 908
 909        Expression TryParseAsDecimal(string text, char qualifier)
 18910        {
 18911            if (qualifier == 'M' || qualifier == 'm')
 7912            {
 7913                 if (double.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Number, CultureInfo.InvariantCultur
 7913                if (decimal.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Number, CultureInfo.InvariantCultu
 5914                {
 5915                    return ConstantExpressionHelper.CreateLiteral(d, text);
 916                }
 2917            }
 918
 10919             if (double.TryParse(text, NumberStyles.Number, CultureInfo.InvariantCulture, out d))
 10920            {
 10921                return ConstantExpressionHelper.CreateLiteral(d, text);
 922            }
 923
 0924            throw ParseError(Res.InvalidRealLiteral, text);
 15925        }
 926
 927        Expression ParseParenExpression()
 41928        {
 41929            _textParser.ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
 41930            _textParser.NextToken();
 41931            Expression e = ParseConditionalOperator();
 41932            _textParser.ValidateToken(TokenId.CloseParen, Res.CloseParenOrOperatorExpected);
 41933            _textParser.NextToken();
 41934            return e;
 41935        }
 936
 937        Expression ParseIdentifier()
 899938        {
 899939            _textParser.ValidateToken(TokenId.Identifier);
 940
 899941             if (_keywordsHelper.TryGetValue(_textParser.CurrentToken.Text, out object value))
 408942            {
 408943                var typeValue = value as Type;
 408944                 if (typeValue != null)
 22945                {
 22946                    return ParseTypeAccess(typeValue);
 947                }
 948
 686949                 if (value == (object)KeywordsHelper.KEYWORD_IT) return ParseIt();
 87950                 if (value == (object)KeywordsHelper.KEYWORD_PARENT) return ParseParent();
 85951                 if (value == (object)KeywordsHelper.KEYWORD_ROOT) return ParseRoot();
 87952                 if (value == (object)KeywordsHelper.SYMBOL_IT) return ParseIt();
 84953                 if (value == (object)KeywordsHelper.SYMBOL_PARENT) return ParseParent();
 83954                 if (value == (object)KeywordsHelper.SYMBOL_ROOT) return ParseRoot();
 82955                 if (value == (object)KeywordsHelper.KEYWORD_IIF) return ParseIif();
 141956                 if (value == (object)KeywordsHelper.KEYWORD_NEW) return ParseNew();
 25957                 if (value == (object)KeywordsHelper.KEYWORD_ISNULL) return ParseIsNull();
 958
 13959                _textParser.NextToken();
 960
 13961                return (Expression)value;
 962            }
 919            // not possible to find float qualifier, so try to parse as double
 13920            return TryParseAsDouble(text, qualifier);
 18921        }
 922
 923        Expression TryParseAsDouble(string text, char qualifier)
 15924        {
 925            double d;
 15926            if (qualifier == 'D' || qualifier == 'd')
 7927            {
 7928                if (double.TryParse(text.Substring(0, text.Length - 1), NumberStyles.Number, CultureInfo.InvariantCultur
 5929                {
 5930                    return ConstantExpressionHelper.CreateLiteral(d, text);
 931                }
 2932            }
 933
 10934            if (double.TryParse(text, NumberStyles.Number, CultureInfo.InvariantCulture, out d))
 10935            {
 10936                return ConstantExpressionHelper.CreateLiteral(d, text);
 937            }
 938
 0939            throw ParseError(Res.InvalidRealLiteral, text);
 15940        }
 941
 942        Expression ParseParenExpression()
 41943        {
 41944            _textParser.ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
 41945            _textParser.NextToken();
 41946            Expression e = ParseConditionalOperator();
 41947            _textParser.ValidateToken(TokenId.CloseParen, Res.CloseParenOrOperatorExpected);
 41948            _textParser.NextToken();
 41949            return e;
 41950        }
 951
 952        Expression ParseIdentifier()
 953953        {
 952954            _textParser.ValidateToken(TokenId.Identifier);
 955
 952956            if (_keywordsHelper.TryGetValue(_textParser.CurrentToken.Text, out object value))
 438957            {
 438958                var typeValue = value as Type;
 438959                if (typeValue != null)
 34960                {
 34961                    return ParseTypeAccess(typeValue);
 962                }
 963
 491964             if (_symbols.TryGetValue(_textParser.CurrentToken.Text, out value) ||
 491965                _externals != null && _externals.TryGetValue(_textParser.CurrentToken.Text, out value) ||
 491966                _internals.TryGetValue(_textParser.CurrentToken.Text, out value))
 195967            {
 195968                Expression expr = value as Expression;
 195969                 if (expr == null)
 140970                {
 140971                    expr = Expression.Constant(value);
 140972                }
 973                else
 55974                {
 55975                    LambdaExpression lambda = expr as LambdaExpression;
 55976                     if (lambda != null)
 0977                    {
 0978                        return ParseLambdaInvocation(lambda);
 979                    }
 55980                }
 981
 195982                _textParser.NextToken();
 983
 195984                return expr;
 985            }
 986
 296987             if (_it != null)
 296988            {
 296989                return ParseMemberAccess(null, _it);
 990            }
 991
 0992            throw ParseError(Res.UnknownIdentifier, _textParser.CurrentToken.Text);
 883993        }
 994
 995        Expression ParseIt()
 302996        {
 302997             if (_it == null)
 0998            {
 0999                throw ParseError(Res.NoItInScope);
 707964                if (value == (object)KeywordsHelper.KEYWORD_IT) return ParseIt();
 102965                if (value == (object)KeywordsHelper.KEYWORD_PARENT) return ParseParent();
 100966                if (value == (object)KeywordsHelper.KEYWORD_ROOT) return ParseRoot();
 102967                if (value == (object)KeywordsHelper.SYMBOL_IT) return ParseIt();
 99968                if (value == (object)KeywordsHelper.SYMBOL_PARENT) return ParseParent();
 100969                if (value == (object)KeywordsHelper.SYMBOL_ROOT) return ParseRoot();
 100970                if (value == (object)KeywordsHelper.KEYWORD_IIF) return ParseIif();
 155971                if (value == (object)KeywordsHelper.KEYWORD_NEW) return ParseNew();
 27972                if (value == (object)KeywordsHelper.KEYWORD_ISNULL) return ParseIsNull();
 973
 15974                _textParser.NextToken();
 975
 15976                return (Expression)value;
 977            }
 978
 515979            if (_symbols.TryGetValue(_textParser.CurrentToken.Text, out value) ||
 515980                _externals != null && _externals.TryGetValue(_textParser.CurrentToken.Text, out value) ||
 515981                _internals.TryGetValue(_textParser.CurrentToken.Text, out value))
 201982            {
 201983                Expression expr = value as Expression;
 201984                if (expr == null)
 146985                {
 146986                    expr = Expression.Constant(value);
 146987                }
 988                else
 55989                {
 55990                    LambdaExpression lambda = expr as LambdaExpression;
 55991                    if (lambda != null)
 0992                    {
 0993                        return ParseLambdaInvocation(lambda);
 994                    }
 55995                }
 996
 201997                _textParser.NextToken();
 998
 201999                return expr;
 1000            }
 3021001            _textParser.NextToken();
 3021002            return _it;
 3021003        }
 1004
 1005        Expression ParseParent()
 21006        {
 21007             if (_parent == null)
 01008            {
 01009                throw ParseError(Res.NoParentInScope);
 1010            }
 21011            _textParser.NextToken();
 21012            return _parent;
 21013        }
 1014
 1015        Expression ParseRoot()
 11016        {
 11017             if (_root == null)
 01018            {
 01019                throw ParseError(Res.NoRootInScope);
 1020            }
 11021            _textParser.NextToken();
 11022            return _root;
 11023        }
 1024
 1025        Expression ParseIif()
 11026        {
 11027            int errorPos = _textParser.CurrentToken.Pos;
 11028            _textParser.NextToken();
 11029            Expression[] args = ParseArgumentList();
 11030             if (args.Length != 3)
 01031            {
 01032                throw ParseError(errorPos, Res.IifRequiresThreeArgs);
 1033            }
 1034
 11035            return GenerateConditional(args[0], args[1], args[2], errorPos);
 11036        }
 1037
 1038        Expression GenerateConditional(Expression test, Expression expr1, Expression expr2, int errorPos)
 21039        {
 21040             if (test.Type != typeof(bool))
 01041            {
 01042                throw ParseError(errorPos, Res.FirstExprMustBeBool);
 1043            }
 1044
 21045             if (expr1.Type != expr2.Type)
 11046            {
 11047                 Expression expr1As2 = expr2 != Constants.NullLiteral ? ExpressionPromoter.Promote(expr1, expr2.Type, tru
 11048                 Expression expr2As1 = expr1 != Constants.NullLiteral ? ExpressionPromoter.Promote(expr2, expr1.Type, tru
 11049                 if (expr1As2 != null && expr2As1 == null)
 01050                {
 01051                    expr1 = expr1As2;
 01052                }
 11053                 else if (expr2As1 != null && expr1As2 == null)
 11054                {
 11055                    expr2 = expr2As1;
 11056                }
 1057                else
 01058                {
 01059                     string type1 = expr1 != Constants.NullLiteral ? expr1.Type.Name : "null";
 01060                     string type2 = expr2 != Constants.NullLiteral ? expr2.Type.Name : "null";
 01061                     if (expr1As2 != null)
 01062                    {
 01063                        throw ParseError(errorPos, Res.BothTypesConvertToOther, type1, type2);
 1064                    }
 1065
 01066                    throw ParseError(errorPos, Res.NeitherTypeConvertsToOther, type1, type2);
 1067                }
 11068            }
 1069
 21070            return Expression.Condition(test, expr1, expr2);
 21071        }
 1072
 1073        Expression ParseNew()
 611074        {
 611075            _textParser.NextToken();
 611076             if (_textParser.CurrentToken.Id != TokenId.OpenParen &&
 611077                _textParser.CurrentToken.Id != TokenId.OpenCurlyParen &&
 611078                _textParser.CurrentToken.Id != TokenId.OpenBracket &&
 611079                _textParser.CurrentToken.Id != TokenId.Identifier)
 11080            {
 11081                throw ParseError(Res.OpenParenOrIdentifierExpected);
 1082            }
 1083
 601084            Type newType = null;
 601085             if (_textParser.CurrentToken.Id == TokenId.Identifier)
 51086            {
 51087                var newTypeName = _textParser.CurrentToken.Text;
 51088                _textParser.NextToken();
 1089
 111090                 while (_textParser.CurrentToken.Id == TokenId.Dot || _textParser.CurrentToken.Id == TokenId.Plus)
 61091                {
 61092                    var sep = _textParser.CurrentToken.Text;
 61093                    _textParser.NextToken();
 61094                     if (_textParser.CurrentToken.Id != TokenId.Identifier)
 01095                    {
 01096                        throw ParseError(Res.IdentifierExpected);
 1097                    }
 61098                    newTypeName += sep + _textParser.CurrentToken.Text;
 61099                    _textParser.NextToken();
 61100                }
 1101
 51102                newType = FindType(newTypeName);
 51103                 if (newType == null)
 21104                {
 21105                    throw ParseError(_textParser.CurrentToken.Pos, Res.TypeNotFound, newTypeName);
 1106                }
 1107
 31108                 if (_textParser.CurrentToken.Id != TokenId.OpenParen &&
 31109                    _textParser.CurrentToken.Id != TokenId.OpenBracket &&
 31110                    _textParser.CurrentToken.Id != TokenId.OpenCurlyParen)
 01111                {
 01112                    throw ParseError(Res.OpenParenExpected);
 1113                }
 31114            }
 1115
 581116            bool arrayInitializer = false;
 581117             if (_textParser.CurrentToken.Id == TokenId.OpenBracket)
 71118            {
 71119                _textParser.NextToken();
 71120                _textParser.ValidateToken(TokenId.CloseBracket, Res.CloseBracketExpected);
 61121                _textParser.NextToken();
 61122                _textParser.ValidateToken(TokenId.OpenCurlyParen, Res.OpenCurlyParenExpected);
 61123                arrayInitializer = true;
 61124            }
 1125
 571126            _textParser.NextToken();
 1127
 571128            var properties = new List<DynamicProperty>();
 571129            var expressions = new List<Expression>();
 1001
 3141002            if (_it != null)
 3141003            {
 3141004                return ParseMemberAccess(null, _it);
 1005            }
 1006
 01007            throw ParseError(Res.UnknownIdentifier, _textParser.CurrentToken.Text);
 9371008        }
 1009
 1010        Expression ParseIt()
 3051011        {
 3051012            if (_it == null)
 01013            {
 01014                throw ParseError(Res.NoItInScope);
 1015            }
 3051016            _textParser.NextToken();
 3051017            return _it;
 3051018        }
 1019
 1020        Expression ParseParent()
 21021        {
 21022            if (_parent == null)
 01023            {
 01024                throw ParseError(Res.NoParentInScope);
 1025            }
 21026            _textParser.NextToken();
 21027            return _parent;
 21028        }
 1029
 1030        Expression ParseRoot()
 31031        {
 31032            if (_root == null)
 01033            {
 01034                throw ParseError(Res.NoRootInScope);
 1035            }
 31036            _textParser.NextToken();
 31037            return _root;
 31038        }
 1039
 1040        Expression ParseIif()
 61041        {
 61042            int errorPos = _textParser.CurrentToken.Pos;
 61043            _textParser.NextToken();
 61044            Expression[] args = ParseArgumentList();
 61045            if (args.Length != 3)
 01046            {
 01047                throw ParseError(errorPos, Res.IifRequiresThreeArgs);
 1048            }
 1049
 61050            return GenerateConditional(args[0], args[1], args[2], errorPos);
 61051        }
 1052
 1053        Expression GenerateConditional(Expression test, Expression expr1, Expression expr2, int errorPos)
 71054        {
 71055            if (test.Type != typeof(bool))
 01056            {
 01057                throw ParseError(errorPos, Res.FirstExprMustBeBool);
 1058            }
 1059
 71060            if (expr1.Type != expr2.Type)
 11061            {
 11062                Expression expr1As2 = expr2 != Constants.NullLiteral ? ExpressionPromoter.Promote(expr1, expr2.Type, tru
 11063                Expression expr2As1 = expr1 != Constants.NullLiteral ? ExpressionPromoter.Promote(expr2, expr1.Type, tru
 11064                if (expr1As2 != null && expr2As1 == null)
 01065                {
 01066                    expr1 = expr1As2;
 01067                }
 11068                else if (expr2As1 != null && expr1As2 == null)
 11069                {
 11070                    expr2 = expr2As1;
 11071                }
 1072                else
 01073                {
 01074                    string type1 = expr1 != Constants.NullLiteral ? expr1.Type.Name : "null";
 01075                    string type2 = expr2 != Constants.NullLiteral ? expr2.Type.Name : "null";
 01076                    if (expr1As2 != null)
 01077                    {
 01078                        throw ParseError(errorPos, Res.BothTypesConvertToOther, type1, type2);
 1079                    }
 1080
 01081                    throw ParseError(errorPos, Res.NeitherTypeConvertsToOther, type1, type2);
 1082                }
 11083            }
 1084
 71085            return Expression.Condition(test, expr1, expr2);
 71086        }
 1087
 1088        Expression ParseNew()
 671089        {
 671090            _textParser.NextToken();
 671091            if (_textParser.CurrentToken.Id != TokenId.OpenParen &&
 671092                _textParser.CurrentToken.Id != TokenId.OpenCurlyParen &&
 671093                _textParser.CurrentToken.Id != TokenId.OpenBracket &&
 671094                _textParser.CurrentToken.Id != TokenId.Identifier)
 11095            {
 11096                throw ParseError(Res.OpenParenOrIdentifierExpected);
 1097            }
 1098
 661099            Type newType = null;
 661100            if (_textParser.CurrentToken.Id == TokenId.Identifier)
 71101            {
 71102                var newTypeName = _textParser.CurrentToken.Text;
 71103                _textParser.NextToken();
 1104
 281105                while (_textParser.CurrentToken.Id == TokenId.Dot || _textParser.CurrentToken.Id == TokenId.Plus)
 211106                {
 211107                    var sep = _textParser.CurrentToken.Text;
 211108                    _textParser.NextToken();
 211109                    if (_textParser.CurrentToken.Id != TokenId.Identifier)
 01110                    {
 01111                        throw ParseError(Res.IdentifierExpected);
 1112                    }
 211113                    newTypeName += sep + _textParser.CurrentToken.Text;
 211114                    _textParser.NextToken();
 211115                }
 1116
 71117                newType = FindType(newTypeName);
 71118                if (newType == null)
 21119                {
 21120                    throw ParseError(_textParser.CurrentToken.Pos, Res.TypeNotFound, newTypeName);
 1121                }
 1122
 51123                if (_textParser.CurrentToken.Id != TokenId.OpenParen &&
 51124                    _textParser.CurrentToken.Id != TokenId.OpenBracket &&
 51125                    _textParser.CurrentToken.Id != TokenId.OpenCurlyParen)
 01126                {
 01127                    throw ParseError(Res.OpenParenExpected);
 1128                }
 51129            }
 1130
 1261131             while (_textParser.CurrentToken.Id != TokenId.CloseParen && _textParser.CurrentToken.Id != TokenId.CloseCurl
 1251132            {
 1251133                int exprPos = _textParser.CurrentToken.Pos;
 1251134                Expression expr = ParseConditionalOperator();
 1231135                 if (!arrayInitializer)
 1121136                {
 1137                    string propName;
 1121138                     if (TokenIdentifierIs("as"))
 751139                    {
 751140                        _textParser.NextToken();
 751141                        propName = GetIdentifier();
 751142                        _textParser.NextToken();
 751143                    }
 1144                    else
 371145                    {
 371146                         if (!TryGetMemberName(expr, out propName))
 01147                        {
 01148                            throw ParseError(exprPos, Res.MissingAsClause);
 1149                        }
 371150                    }
 1151
 1121152                    properties.Add(new DynamicProperty(propName, expr.Type));
 1121153                }
 1154
 1231155                expressions.Add(expr);
 1156
 1231157                 if (_textParser.CurrentToken.Id != TokenId.Comma)
 541158                {
 541159                    break;
 1160                }
 1161
 691162                _textParser.NextToken();
 691163            }
 1164
 551165             if (_textParser.CurrentToken.Id != TokenId.CloseParen && _textParser.CurrentToken.Id != TokenId.CloseCurlyPa
 21166            {
 21167                throw ParseError(Res.CloseParenOrCommaExpected);
 1168            }
 531169            _textParser.NextToken();
 1170
 531171             if (arrayInitializer)
 61172            {
 61173                return CreateArrayInitializerExpression(expressions, newType);
 1174            }
 1175
 471176            return CreateNewExpression(properties, expressions, newType);
 531177        }
 1178
 1179        private Expression CreateArrayInitializerExpression(List<Expression> expressions, Type newType)
 61180        {
 61181             if (expressions.Count == 0)
 11182            {
 11183                 return Expression.NewArrayInit(newType ?? typeof(object));
 1184            }
 641131            bool arrayInitializer = false;
 641132            if (_textParser.CurrentToken.Id == TokenId.OpenBracket)
 71133            {
 71134                _textParser.NextToken();
 71135                _textParser.ValidateToken(TokenId.CloseBracket, Res.CloseBracketExpected);
 61136                _textParser.NextToken();
 61137                _textParser.ValidateToken(TokenId.OpenCurlyParen, Res.OpenCurlyParenExpected);
 61138                arrayInitializer = true;
 61139            }
 1140
 631141            _textParser.NextToken();
 1142
 631143            var properties = new List<DynamicProperty>();
 631144            var expressions = new List<Expression>();
 1145
 1351146            while (_textParser.CurrentToken.Id != TokenId.CloseParen && _textParser.CurrentToken.Id != TokenId.CloseCurl
 1341147            {
 1341148                int exprPos = _textParser.CurrentToken.Pos;
 1341149                Expression expr = ParseConditionalOperator();
 1321150                if (!arrayInitializer)
 1211151                {
 1152                    string propName;
 1211153                    if (TokenIdentifierIs("as"))
 841154                    {
 841155                        _textParser.NextToken();
 841156                        propName = GetIdentifier();
 841157                        _textParser.NextToken();
 841158                    }
 1159                    else
 371160                    {
 371161                        if (!TryGetMemberName(expr, out propName))
 01162                        {
 01163                            throw ParseError(exprPos, Res.MissingAsClause);
 1164                        }
 371165                    }
 1166
 1211167                    properties.Add(new DynamicProperty(propName, expr.Type));
 1211168                }
 1169
 1321170                expressions.Add(expr);
 1171
 1321172                if (_textParser.CurrentToken.Id != TokenId.Comma)
 601173                {
 601174                    break;
 1175                }
 1176
 721177                _textParser.NextToken();
 721178            }
 1179
 611180            if (_textParser.CurrentToken.Id != TokenId.CloseParen && _textParser.CurrentToken.Id != TokenId.CloseCurlyPa
 21181            {
 21182                throw ParseError(Res.CloseParenOrCommaExpected);
 1183            }
 591184            _textParser.NextToken();
 1185
 51186             if (newType != null)
 11187            {
 41188                return Expression.NewArrayInit(newType, expressions.Select(expression => ExpressionPromoter.Promote(expr
 591186            if (arrayInitializer)
 61187            {
 61188                return CreateArrayInitializerExpression(expressions, newType);
 1189            }
 1190
 121191             return Expression.NewArrayInit(expressions.All(expression => expression.Type == expressions[0].Type) ? expre
 61192        }
 531191            return CreateNewExpression(properties, expressions, newType);
 591192        }
 1193
 1194        private Expression CreateNewExpression(List<DynamicProperty> properties, List<Expression> expressions, Type newT
 471195        {
 1196            // http://solutionizing.net/category/linq/
 471197             Type type = newType ?? _resultType;
 1198
 471199             if (type == null)
 431200            {
 1201#if !UAP10_0
 431202                 if (_parsingConfig != null && _parsingConfig.UseDynamicObjectClassForAnonymousTypes)
 01203                {
 1204#endif
 01205                    type = typeof(DynamicClass);
 01206                    Type typeForKeyValuePair = typeof(KeyValuePair<string, object>);
 1207#if NET35 || NET40
 1208                    ConstructorInfo constructorForKeyValuePair = typeForKeyValuePair.GetConstructors().First();
 1209#else
 01210                    ConstructorInfo constructorForKeyValuePair = typeForKeyValuePair.GetTypeInfo().DeclaredConstructors.
 1211#endif
 01212                    var arrayIndexParams = new List<Expression>();
 01213                     for (int i = 0; i < expressions.Count; i++)
 01214                    {
 1215                        // Just convert the expression always to an object expression.
 01216                        UnaryExpression boxingExpression = Expression.Convert(expressions[i], typeof(object));
 01217                        NewExpression parameter = Expression.New(constructorForKeyValuePair, (Expression)Expression.Cons
 1218
 01219                        arrayIndexParams.Add(parameter);
 01220                    }
 1221
 1222                    // Create an expression tree that represents creating and initializing a one-dimensional array of ty
 01223                    NewArrayExpression newArrayExpression = Expression.NewArrayInit(typeof(KeyValuePair<string, object>)
 1224
 1225                    // Get the "public DynamicClass(KeyValuePair<string, object>[] propertylist)" constructor
 1226#if NET35 || NET40
 1227                    ConstructorInfo constructor = type.GetConstructors().First();
 1228#else
 01229                    ConstructorInfo constructor = type.GetTypeInfo().DeclaredConstructors.First();
 1230#endif
 01231                    return Expression.New(constructor, newArrayExpression);
 1232#if !UAP10_0
 1233                }
 1234
 431235                type = DynamicClassFactory.CreateType(properties, _createParameterCtor);
 1236#endif
 431237            }
 1238
 471239            IEnumerable<PropertyInfo> propertyInfos = type.GetProperties();
 471240             if (type.GetTypeInfo().BaseType == typeof(DynamicClass))
 431241            {
 2891242                propertyInfos = propertyInfos.Where(x => x.Name != "Item");
 431243            }
 1244
 1571245            Type[] propertyTypes = propertyInfos.Select(p => p.PropertyType).ToArray();
 471246            ConstructorInfo ctor = type.GetConstructor(propertyTypes);
 471247             if (ctor != null && ctor.GetParameters().Length == expressions.Count)
 371248            {
 371249                var expressionsPromoted = new List<Expression>();
 1250
 1251                // Loop all expressions and promote if needed
 2361252                 for (int i = 0; i < propertyTypes.Length; i++)
 811253                {
 811254                    Type propertyType = propertyTypes[i];
 811255                    Type expressionType = expressions[i].Type;
 1256
 1257                    // Promote from Type to Nullable Type if needed
 811258                    expressionsPromoted.Add(ExpressionPromoter.Promote(expressions[i], propertyType, true, true));
 811259                }
 1260
 371261                return Expression.New(ctor, expressionsPromoted, (IEnumerable<MemberInfo>)propertyInfos);
 1262            }
 1263
 101264            MemberBinding[] bindings = new MemberBinding[properties.Count];
 661265             for (int i = 0; i < bindings.Length; i++)
 231266            {
 231267                PropertyInfo property = type.GetProperty(properties[i].Name);
 231268                Type propertyType = property.PropertyType;
 231269                Type expressionType = expressions[i].Type;
 1270
 1271                // Promote from Type to Nullable Type if needed
 231272                bindings[i] = Expression.Bind(property, ExpressionPromoter.Promote(expressions[i], propertyType, true, t
 231273            }
 1274
 101275            return Expression.MemberInit(Expression.New(type), bindings);
 471276        }
 1277
 1278        Expression ParseLambdaInvocation(LambdaExpression lambda)
 01279        {
 01280            int errorPos = _textParser.CurrentToken.Pos;
 01281            _textParser.NextToken();
 01282            Expression[] args = ParseArgumentList();
 01283             if (MethodFinder.FindMethod(lambda.Type, nameof(Expression.Invoke), false, args, out MethodBase _) != 1)
 01284            {
 01285                throw ParseError(errorPos, Res.ArgsIncompatibleWithLambda);
 1286            }
 1287
 01288            return Expression.Invoke(lambda, args);
 01289        }
 1290
 1291        Expression ParseTypeAccess(Type type)
 221292        {
 221293            int errorPos = _textParser.CurrentToken.Pos;
 221294            _textParser.NextToken();
 1295
 221296             if (_textParser.CurrentToken.Id == TokenId.Question)
 71297            {
 71298                 if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 01299                {
 01300                    throw ParseError(errorPos, Res.TypeHasNoNullableForm, TypeHelper.GetTypeName(type));
 1301                }
 1194        private Expression CreateArrayInitializerExpression(List<Expression> expressions, Type newType)
 61195        {
 61196            if (expressions.Count == 0)
 11197            {
 11198                return Expression.NewArrayInit(newType ?? typeof(object));
 1199            }
 1200
 51201            if (newType != null)
 11202            {
 41203                return Expression.NewArrayInit(newType, expressions.Select(expression => ExpressionPromoter.Promote(expr
 1204            }
 1205
 121206            return Expression.NewArrayInit(expressions.All(expression => expression.Type == expressions[0].Type) ? expre
 61207        }
 1208
 1209        private Expression CreateNewExpression(List<DynamicProperty> properties, List<Expression> expressions, Type newT
 531210        {
 1211            // http://solutionizing.net/category/linq/
 531212            Type type = newType ?? _resultType;
 1213
 531214            if (type == null)
 471215            {
 1216#if !UAP10_0
 471217                if (_parsingConfig != null && _parsingConfig.UseDynamicObjectClassForAnonymousTypes)
 01218                {
 1219#endif
 01220                    type = typeof(DynamicClass);
 01221                    Type typeForKeyValuePair = typeof(KeyValuePair<string, object>);
 1222#if NET35 || NET40
 1223                    ConstructorInfo constructorForKeyValuePair = typeForKeyValuePair.GetConstructors().First();
 1224#else
 01225                    ConstructorInfo constructorForKeyValuePair = typeForKeyValuePair.GetTypeInfo().DeclaredConstructors.
 1226#endif
 01227                    var arrayIndexParams = new List<Expression>();
 01228                    for (int i = 0; i < expressions.Count; i++)
 01229                    {
 1230                        // Just convert the expression always to an object expression.
 01231                        UnaryExpression boxingExpression = Expression.Convert(expressions[i], typeof(object));
 01232                        NewExpression parameter = Expression.New(constructorForKeyValuePair, (Expression)Expression.Cons
 1233
 01234                        arrayIndexParams.Add(parameter);
 01235                    }
 1236
 1237                    // Create an expression tree that represents creating and initializing a one-dimensional array of ty
 01238                    NewArrayExpression newArrayExpression = Expression.NewArrayInit(typeof(KeyValuePair<string, object>)
 1239
 1240                    // Get the "public DynamicClass(KeyValuePair<string, object>[] propertylist)" constructor
 1241#if NET35 || NET40
 1242                    ConstructorInfo constructor = type.GetConstructors().First();
 1243#else
 01244                    ConstructorInfo constructor = type.GetTypeInfo().DeclaredConstructors.First();
 1245#endif
 01246                    return Expression.New(constructor, newArrayExpression);
 1247#if !UAP10_0
 1248                }
 1249
 471250                type = DynamicClassFactory.CreateType(properties, _createParameterCtor);
 1251#endif
 471252            }
 1253
 531254            IEnumerable<PropertyInfo> propertyInfos = type.GetProperties();
 531255            if (type.GetTypeInfo().BaseType == typeof(DynamicClass))
 471256            {
 3151257                propertyInfos = propertyInfos.Where(x => x.Name != "Item");
 471258            }
 1259
 1721260            Type[] propertyTypes = propertyInfos.Select(p => p.PropertyType).ToArray();
 531261            ConstructorInfo ctor = type.GetConstructor(propertyTypes);
 531262            if (ctor != null && ctor.GetParameters().Length == expressions.Count)
 411263            {
 411264                var expressionsPromoted = new List<Expression>();
 1265
 1266                // Loop all expressions and promote if needed
 2581267                for (int i = 0; i < propertyTypes.Length; i++)
 881268                {
 881269                    Type propertyType = propertyTypes[i];
 881270                    Type expressionType = expressions[i].Type;
 1271
 1272                    // Promote from Type to Nullable Type if needed
 871273                    expressionsPromoted.Add(ExpressionPromoter.Promote(expressions[i], propertyType, true, true));
 881274                }
 1275
 411276                return Expression.New(ctor, expressionsPromoted, (IEnumerable<MemberInfo>)propertyInfos);
 1277            }
 1278
 121279            MemberBinding[] bindings = new MemberBinding[properties.Count];
 741280            for (int i = 0; i < bindings.Length; i++)
 251281            {
 251282                PropertyInfo property = type.GetProperty(properties[i].Name);
 251283                Type propertyType = property.PropertyType;
 251284                Type expressionType = expressions[i].Type;
 1285
 1286                // Promote from Type to Nullable Type if needed
 251287                bindings[i] = Expression.Bind(property, ExpressionPromoter.Promote(expressions[i], propertyType, true, t
 251288            }
 1289
 121290            return Expression.MemberInit(Expression.New(type), bindings);
 531291        }
 1292
 1293        Expression ParseLambdaInvocation(LambdaExpression lambda)
 01294        {
 01295            int errorPos = _textParser.CurrentToken.Pos;
 01296            _textParser.NextToken();
 01297            Expression[] args = ParseArgumentList();
 01298            if (MethodFinder.FindMethod(lambda.Type, nameof(Expression.Invoke), false, args, out MethodBase _) != 1)
 01299            {
 01300                throw ParseError(errorPos, Res.ArgsIncompatibleWithLambda);
 1301            }
 1302
 71303                type = typeof(Nullable<>).MakeGenericType(type);
 71304                _textParser.NextToken();
 71305            }
 1306
 1307            // This is a shorthand for explicitely converting a string to something
 221308            bool shorthand = _textParser.CurrentToken.Id == TokenId.StringLiteral;
 221309             if (_textParser.CurrentToken.Id == TokenId.OpenParen || shorthand)
 141310            {
 141311                 Expression[] args = shorthand ? new[] { ParseStringLiteral() } : ParseArgumentList();
 1312
 1313                // If only 1 argument, and if the type is a ValueType and argType is also a ValueType, just Convert
 141314                 if (args.Length == 1)
 141315                {
 141316                    Type argType = args[0].Type;
 01303            return Expression.Invoke(lambda, args);
 01304        }
 1305
 1306        Expression ParseTypeAccess(Type type)
 341307        {
 341308            int errorPos = _textParser.CurrentToken.Pos;
 341309            _textParser.NextToken();
 1310
 341311            if (_textParser.CurrentToken.Id == TokenId.Question)
 71312            {
 71313                if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 01314                {
 01315                    throw ParseError(errorPos, Res.TypeHasNoNullableForm, TypeHelper.GetTypeName(type));
 1316                }
 1317
 141318                     if (type.GetTypeInfo().IsValueType && TypeHelper.IsNullableType(type) && argType.GetTypeInfo().IsVal
 71319                    {
 71320                        return Expression.Convert(args[0], type);
 1321                    }
 71322                }
 1323
 71324                 switch (MethodFinder.FindBestMethod(type.GetConstructors(), args, out MethodBase method))
 1325                {
 1326                    case 0:
 61327                         if (args.Length == 1)
 61328                        {
 61329                            return GenerateConversion(args[0], type, errorPos);
 1330                        }
 1331
 01332                        throw ParseError(errorPos, Res.NoMatchingConstructor, TypeHelper.GetTypeName(type));
 1333
 1334                    case 1:
 11335                        return Expression.New((ConstructorInfo)method, args);
 1336
 1337                    default:
 01338                        throw ParseError(errorPos, Res.AmbiguousConstructorInvocation, TypeHelper.GetTypeName(type));
 1339                }
 1340            }
 1341
 81342            _textParser.ValidateToken(TokenId.Dot, Res.DotOrOpenParenOrStringLiteralExpected);
 81343            _textParser.NextToken();
 1344
 81345            return ParseMemberAccess(type, null);
 221346        }
 1347
 1348        static Expression GenerateConversion(Expression expr, Type type, int errorPos)
 61349        {
 61350            Type exprType = expr.Type;
 61351             if (exprType == type)
 01352            {
 01353                return expr;
 1354            }
 1355
 61356             if (exprType.GetTypeInfo().IsValueType && type.GetTypeInfo().IsValueType)
 51357            {
 51358                 if ((TypeHelper.IsNullableType(exprType) || TypeHelper.IsNullableType(type)) && TypeHelper.GetNonNullabl
 01359                {
 01360                    return Expression.Convert(expr, type);
 1361                }
 71318                type = typeof(Nullable<>).MakeGenericType(type);
 71319                _textParser.NextToken();
 71320            }
 1321
 1322            // This is a shorthand for explicitely converting a string to something
 341323            bool shorthand = _textParser.CurrentToken.Id == TokenId.StringLiteral;
 341324            if (_textParser.CurrentToken.Id == TokenId.OpenParen || shorthand)
 181325            {
 181326                Expression[] args = shorthand ? new[] { ParseStringLiteral() } : ParseArgumentList();
 1327
 1328                // If only 1 argument, and if the type is a ValueType and argType is also a ValueType, just Convert
 181329                if (args.Length == 1)
 181330                {
 181331                    Type argType = args[0].Type;
 1332
 181333                    if (type.GetTypeInfo().IsValueType && TypeHelper.IsNullableType(type) && argType.GetTypeInfo().IsVal
 71334                    {
 71335                        return Expression.Convert(args[0], type);
 1336                    }
 111337                }
 1338
 111339                switch (MethodFinder.FindBestMethod(type.GetConstructors(), args, out MethodBase method))
 1340                {
 1341                    case 0:
 101342                        if (args.Length == 1)
 101343                        {
 101344                            return GenerateConversion(args[0], type, errorPos);
 1345                        }
 1346
 01347                        throw ParseError(errorPos, Res.NoMatchingConstructor, TypeHelper.GetTypeName(type));
 1348
 1349                    case 1:
 11350                        return Expression.New((ConstructorInfo)method, args);
 1351
 1352                    default:
 01353                        throw ParseError(errorPos, Res.AmbiguousConstructorInvocation, TypeHelper.GetTypeName(type));
 1354                }
 1355            }
 1356
 161357            _textParser.ValidateToken(TokenId.Dot, Res.DotOrOpenParenOrStringLiteralExpected);
 161358            _textParser.NextToken();
 1359
 161360            return ParseMemberAccess(type, null);
 341361        }
 1362
 51363                 if ((TypeHelper.IsNumericType(exprType) || TypeHelper.IsEnumType(exprType)) && TypeHelper.IsNumericType(
 51364                {
 51365                    return Expression.ConvertChecked(expr, type);
 1366                }
 01367            }
 1368
 11369             if (exprType.IsAssignableFrom(type) || type.IsAssignableFrom(exprType) || exprType.GetTypeInfo().IsInterface
 11370            {
 11371                return Expression.Convert(expr, type);
 1372            }
 1373
 1374            // Try to Parse the string rather that just generate the convert statement
 01375             if (expr.NodeType == ExpressionType.Constant && exprType == typeof(string))
 01376            {
 01377                string text = (string)((ConstantExpression)expr).Value;
 1378
 1379                // DateTime is parsed as UTC time.
 01380                 if (type == typeof(DateTime) && DateTime.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.Non
 01381                {
 01382                    return Expression.Constant(dateTime, type);
 1383                }
 1384
 01385                object[] arguments = { text, null };
 1386#if NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD
 01387                MethodInfo method = type.GetMethod("TryParse", new[] { typeof(string), type.MakeByRefType() });
 1388#else
 1389                MethodInfo method = type.GetMethod("TryParse", BindingFlags.Public | BindingFlags.Static, null, new Type
 1390#endif
 01391                 if (method != null && (bool)method.Invoke(null, arguments))
 01392                {
 01393                    return Expression.Constant(arguments[1], type);
 1394                }
 01395            }
 1396
 01397            throw ParseError(errorPos, Res.CannotConvertValue, TypeHelper.GetTypeName(exprType), TypeHelper.GetTypeName(
 61398        }
 1363        static Expression GenerateConversion(Expression expr, Type type, int errorPos)
 101364        {
 101365            Type exprType = expr.Type;
 101366            if (exprType == type)
 01367            {
 01368                return expr;
 1369            }
 1370
 101371            if (exprType.GetTypeInfo().IsValueType && type.GetTypeInfo().IsValueType)
 51372            {
 51373                if ((TypeHelper.IsNullableType(exprType) || TypeHelper.IsNullableType(type)) && TypeHelper.GetNonNullabl
 01374                {
 01375                    return Expression.Convert(expr, type);
 1376                }
 1377
 51378                if ((TypeHelper.IsNumericType(exprType) || TypeHelper.IsEnumType(exprType)) && TypeHelper.IsNumericType(
 51379                {
 51380                    return Expression.ConvertChecked(expr, type);
 1381                }
 01382            }
 1383
 51384            if (exprType.IsAssignableFrom(type) || type.IsAssignableFrom(exprType) || exprType.GetTypeInfo().IsInterface
 11385            {
 11386                return Expression.Convert(expr, type);
 1387            }
 1388
 1389            // Try to Parse the string rather that just generate the convert statement
 41390            if (expr.NodeType == ExpressionType.Constant && exprType == typeof(string))
 01391            {
 01392                string text = (string)((ConstantExpression)expr).Value;
 1393
 1394                // DateTime is parsed as UTC time.
 01395                if (type == typeof(DateTime) && DateTime.TryParse(text, CultureInfo.InvariantCulture, DateTimeStyles.Non
 01396                {
 01397                    return Expression.Constant(dateTime, type);
 1398                }
 1399
 1400        Expression ParseMemberAccess(Type type, Expression instance)
 5481401        {
 5481402             if (instance != null)
 5401403            {
 5401404                type = instance.Type;
 5401405            }
 1406
 5481407            int errorPos = _textParser.CurrentToken.Pos;
 5481408            string id = GetIdentifier();
 5481409            _textParser.NextToken();
 1410
 5481411             if (_textParser.CurrentToken.Id == TokenId.OpenParen)
 981412            {
 981413                 if (instance != null && type != typeof(string))
 941414                {
 941415                    Type enumerableType = TypeHelper.FindGenericType(typeof(IEnumerable<>), type);
 941416                     if (enumerableType != null)
 831417                    {
 831418                        Type elementType = enumerableType.GetTypeInfo().GetGenericTypeArguments()[0];
 831419                        return ParseAggregate(instance, elementType, id, errorPos, TypeHelper.FindGenericType(typeof(IQu
 1420                    }
 111421                }
 1422
 151423                Expression[] args = ParseArgumentList();
 151424                 switch (MethodFinder.FindMethod(type, id, instance == null, args, out MethodBase mb))
 1425                {
 1426                    case 0:
 01427                        throw ParseError(errorPos, Res.NoApplicableMethod, id, TypeHelper.GetTypeName(type));
 01400                object[] arguments = { text, null };
 1401#if NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD
 01402                MethodInfo method = type.GetMethod("TryParse", new[] { typeof(string), type.MakeByRefType() });
 1403#else
 1404                MethodInfo method = type.GetMethod("TryParse", BindingFlags.Public | BindingFlags.Static, null, new Type
 1405#endif
 01406                if (method != null && (bool)method.Invoke(null, arguments))
 01407                {
 01408                    return Expression.Constant(arguments[1], type);
 1409                }
 01410            }
 1411
 1412            // Check if there are any explicit conversion operators on the source type which fit the requirement (cast t
 101413            bool explicitOperatorAvailable = exprType.GetTypeInfo().GetDeclaredMethods("op_Explicit").Any(m => m.ReturnT
 41414            if (explicitOperatorAvailable)
 41415            {
 41416                return Expression.Convert(expr, type);
 1417            }
 1418
 01419            throw ParseError(errorPos, Res.CannotConvertValue, TypeHelper.GetTypeName(exprType), TypeHelper.GetTypeName(
 101420        }
 1421
 1422        Expression ParseMemberAccess(Type type, Expression instance)
 5851423        {
 5851424            if (instance != null)
 5691425            {
 5691426                type = instance.Type;
 5691427            }
 1428
 1429                    case 1:
 151430                        MethodInfo method = (MethodInfo)mb;
 151431                         if (!PredefinedTypesHelper.IsPredefinedType(_parsingConfig, method.DeclaringType) && !(method.Is
 11432                        {
 11433                            throw ParseError(errorPos, Res.MethodsAreInaccessible, TypeHelper.GetTypeName(method.Declari
 1434                        }
 1435
 141436                         if (method.ReturnType == typeof(void))
 01437                        {
 01438                            throw ParseError(errorPos, Res.MethodIsVoid, id, TypeHelper.GetTypeName(method.DeclaringType
 1439                        }
 1440
 141441                        return Expression.Call(instance, method, args);
 1442
 1443                    default:
 01444                        throw ParseError(errorPos, Res.AmbiguousMethodInvocation, id, TypeHelper.GetTypeName(type));
 1445                }
 1446            }
 1447
 4501448             if (type.GetTypeInfo().IsEnum)
 111449            {
 111450                var @enum = Enum.Parse(type, id, true);
 1451
 111452                return Expression.Constant(@enum);
 1453            }
 1454
 1455#if UAP10_0 || NETSTANDARD1_3
 4391456             if (type == typeof(DynamicClass))
 01457            {
 01458                return Expression.MakeIndex(instance, typeof(DynamicClass).GetProperty("Item"), new[] { Expression.Const
 1459            }
 1460#endif
 4391461            MemberInfo member = FindPropertyOrField(type, id, instance == null);
 4391462             if (member is PropertyInfo property)
 4131463            {
 4131464                return Expression.Property(instance, property);
 1465            }
 1466
 261467             if (member is FieldInfo field)
 01468            {
 01469                return Expression.Field(instance, field);
 1470            }
 1471
 1472#if !NET35 && !UAP10_0 && !NETSTANDARD1_3
 1473            if (type == typeof(object))
 1474            {
 1475                return Expression.Dynamic(new DynamicGetMemberBinder(id), type, instance);
 1476            }
 1477#endif
 1478
 261479            MethodInfo indexerMethod = instance.Type.GetMethod("get_Item", new[] { typeof(string) });
 261480             if (indexerMethod != null)
 01481            {
 01482                return Expression.Call(instance, indexerMethod, Expression.Constant(id));
 1483            }
 1484
 261485             if (_textParser.CurrentToken.Id == TokenId.Lambda && _it.Type == type)
 191486            {
 1487                // This might be an internal variable for use within a lambda expression, so store it as such
 191488                _internals.Add(id, _it);
 191489                _textParser.NextToken();
 1490
 191491                return ParseConditionalOperator();
 5851429            int errorPos = _textParser.CurrentToken.Pos;
 5851430            string id = GetIdentifier();
 5851431            _textParser.NextToken();
 1432
 5851433            if (_textParser.CurrentToken.Id == TokenId.OpenParen)
 1101434            {
 1101435                if (instance != null && type != typeof(string))
 981436                {
 981437                    Type enumerableType = TypeHelper.FindGenericType(typeof(IEnumerable<>), type);
 981438                    if (enumerableType != null)
 871439                    {
 871440                        Type elementType = enumerableType.GetTypeInfo().GetGenericTypeArguments()[0];
 871441                        return ParseAggregate(instance, elementType, id, errorPos, TypeHelper.FindGenericType(typeof(IQu
 1442                    }
 111443                }
 1444
 231445                Expression[] args = ParseArgumentList();
 231446                switch (MethodFinder.FindMethod(type, id, instance == null, args, out MethodBase mb))
 1447                {
 1448                    case 0:
 01449                        throw ParseError(errorPos, Res.NoApplicableMethod, id, TypeHelper.GetTypeName(type));
 1450
 1451                    case 1:
 231452                        MethodInfo method = (MethodInfo)mb;
 231453                        if (!PredefinedTypesHelper.IsPredefinedType(_parsingConfig, method.DeclaringType) && !(method.Is
 11454                        {
 11455                            throw ParseError(errorPos, Res.MethodsAreInaccessible, TypeHelper.GetTypeName(method.Declari
 1456                        }
 1457
 221458                        if (method.ReturnType == typeof(void))
 01459                        {
 01460                            throw ParseError(errorPos, Res.MethodIsVoid, id, TypeHelper.GetTypeName(method.DeclaringType
 1461                        }
 1462
 221463                        return Expression.Call(instance, method, args);
 1464
 1465                    default:
 01466                        throw ParseError(errorPos, Res.AmbiguousMethodInvocation, id, TypeHelper.GetTypeName(type));
 1467                }
 1468            }
 1469
 4751470            if (type.GetTypeInfo().IsEnum)
 111471            {
 111472                var @enum = Enum.Parse(type, id, true);
 1473
 111474                return Expression.Constant(@enum);
 1475            }
 1476
 1477#if UAP10_0 || NETSTANDARD1_3
 1478            if (type == typeof(DynamicClass))
 1479            {
 1480                return Expression.MakeIndex(instance, typeof(DynamicClass).GetProperty("Item"), new[] { Expression.Const
 1481            }
 1482#endif
 4641483            MemberInfo member = FindPropertyOrField(type, id, instance == null);
 4641484            if (member is PropertyInfo property)
 4331485            {
 4331486                return Expression.Property(instance, property);
 1487            }
 1488
 311489            if (member is FieldInfo field)
 01490            {
 01491                return Expression.Field(instance, field);
 1492            }
 1493
 71494            throw ParseError(errorPos, Res.UnknownPropertyOrField, id, TypeHelper.GetTypeName(type));
 5401495        }
 1496
 1497        Type FindType(string name)
 51498        {
 51499            _keywordsHelper.TryGetValue(name, out object type);
 1494#if !NET35 && !UAP10_0 && !NETSTANDARD1_3
 311495            if (type == typeof(object))
 11496            {
 11497                return Expression.Dynamic(new DynamicGetMemberBinder(id), type, instance);
 1498            }
 1499#endif
 1500
 51501            var result = type as Type;
 51502             if (result != null)
 21503            {
 21504                return result;
 301501            MethodInfo indexerMethod = instance.Type.GetMethod("get_Item", new[] { typeof(string) });
 301502            if (indexerMethod != null)
 41503            {
 41504                return Expression.Call(instance, indexerMethod, Expression.Constant(id));
 1505            }
 31506             if (_it != null && _it.Type.Name == name)
 11507            {
 11508                return _it.Type;
 1509            }
 21510             if (_parent != null && _parent.Type.Name == name)
 01511            {
 01512                return _parent.Type;
 1513            }
 21514             if (_root != null && _root.Type.Name == name)
 01515            {
 01516                return _root.Type;
 1517            }
 21518             if (_it != null && _it.Type.Namespace + "." + _it.Type.Name == name)
 01519            {
 01520                return _it.Type;
 1521            }
 21522             if (_parent != null && _parent.Type.Namespace + "." + _parent.Type.Name == name)
 01523            {
 01524                return _parent.Type;
 1525            }
 21526             if (_root != null && _root.Type.Namespace + "." + _root.Type.Name == name)
 01527            {
 01528                return _root.Type;
 1529            }
 1530
 21531            return null;
 51532        }
 1506
 261507            if (_textParser.CurrentToken.Id == TokenId.Lambda && _it.Type == type)
 191508            {
 1509                // This might be an internal variable for use within a lambda expression, so store it as such
 191510                _internals.Add(id, _it);
 191511                _textParser.NextToken();
 1512
 191513                return ParseConditionalOperator();
 1514            }
 1515
 71516            throw ParseError(errorPos, Res.UnknownPropertyOrField, id, TypeHelper.GetTypeName(type));
 5771517        }
 1518
 1519        Type FindType(string name)
 71520        {
 71521            _keywordsHelper.TryGetValue(name, out object type);
 1522
 71523            var result = type as Type;
 71524            if (result != null)
 21525            {
 21526                return result;
 1527            }
 1528
 51529            if (_it != null && _it.Type.Name == name)
 11530            {
 11531                return _it.Type;
 1532            }
 1533
 1534        Expression ParseAggregate(Expression instance, Type elementType, string methodName, int errorPos, bool isQueryab
 831535        {
 831536            var oldParent = _parent;
 1537
 831538            ParameterExpression outerIt = _it;
 831539            ParameterExpression innerIt = ParameterExpressionHelper.CreateParameterExpression(elementType, string.Empty)
 1540
 831541            _parent = _it;
 1542
 831543             if (methodName == "Contains" || methodName == "Skip" || methodName == "Take")
 71544            {
 1545                // for any method that acts on the parent element type, we need to specify the outerIt as scope.
 71546                _it = outerIt;
 71547            }
 1548            else
 761549            {
 761550                _it = innerIt;
 761551            }
 41534            if (_parent != null && _parent.Type.Name == name)
 01535            {
 01536                return _parent.Type;
 1537            }
 1538
 41539            if (_root != null && _root.Type.Name == name)
 01540            {
 01541                return _root.Type;
 1542            }
 41543            if (_it != null && _it.Type.Namespace + "." + _it.Type.Name == name)
 01544            {
 01545                return _it.Type;
 1546            }
 1547
 41548            if (_parent != null && _parent.Type.Namespace + "." + _parent.Type.Name == name)
 01549            {
 01550                return _parent.Type;
 1551            }
 1552
 831553            Expression[] args = ParseArgumentList();
 1554
 831555            _it = outerIt;
 831556            _parent = oldParent;
 41553            if (_root != null && _root.Type.Namespace + "." + _root.Type.Name == name)
 01554            {
 01555                return _root.Type;
 1556            }
 1557
 831558             if (!MethodFinder.ContainsMethod(typeof(IEnumerableSignatures), methodName, false, args))
 01559            {
 01560                throw ParseError(errorPos, Res.NoApplicableAggregate, methodName);
 41558            if (_parsingConfig.AllowNewToEvaluateAnyType && _parsingConfig.CustomTypeProvider != null)
 21559            {
 21560                return _parsingConfig.CustomTypeProvider.ResolveType(name);
 1561            }
 1562
 831563            Type callType = typeof(Enumerable);
 831564             if (isQueryable && MethodFinder.ContainsMethod(typeof(IQueryableSignatures), methodName, false, args))
 151565            {
 151566                callType = typeof(Queryable);
 151567            }
 1568
 1569            Type[] typeArgs;
 831570             if (new[] { "Min", "Max", "Select", "OrderBy", "OrderByDescending", "ThenBy", "ThenByDescending", "GroupBy" 
 211571            {
 211572                 if (args.Length == 2)
 11573                {
 11574                    typeArgs = new[] { elementType, args[0].Type, args[1].Type };
 11575                }
 1576                else
 201577                {
 201578                    typeArgs = new[] { elementType, args[0].Type };
 201579                }
 211580            }
 621581             else if (methodName == "SelectMany")
 31582            {
 31583                var type = Expression.Lambda(args[0], innerIt).Body.Type;
 31584                var interfaces = type.GetInterfaces().Union(new[] { type });
 301585                Type interfaceType = interfaces.Single(i => i.Name == typeof(IEnumerable<>).Name);
 31586                Type resultType = interfaceType.GetTypeInfo().GetGenericTypeArguments()[0];
 31587                typeArgs = new[] { elementType, resultType };
 31588            }
 1589            else
 591590            {
 591591                typeArgs = new[] { elementType };
 591592            }
 1593
 831594             if (args.Length == 0)
 261595            {
 261596                args = new[] { instance };
 261597            }
 1598            else
 571599            {
 571600                 if (new[] { "Contains", "Take", "Skip", "DefaultIfEmpty" }.Contains(methodName))
 91601                {
 91602                    args = new[] { instance, args[0] };
 91603                }
 1604                else
 481605                {
 481606                     if (args.Length == 2)
 11607                    {
 11608                        args = new[] { instance, Expression.Lambda(args[0], innerIt), Expression.Lambda(args[1], innerIt
 11609                    }
 1610                    else
 471611                    {
 471612                        args = new[] { instance, Expression.Lambda(args[0], innerIt) };
 471613                    }
 481614                }
 571615            }
 1616
 831617            return Expression.Call(callType, methodName, typeArgs, args);
 831618        }
 1619
 1620        Expression[] ParseArgumentList()
 1191621        {
 1191622            _textParser.ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
 1191623            _textParser.NextToken();
 1191624             Expression[] args = _textParser.CurrentToken.Id != TokenId.CloseParen ? ParseArguments() : new Expression[0]
 1191625            _textParser.ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected);
 1191626            _textParser.NextToken();
 1191627            return args;
 1191628        }
 1629
 1630        Expression[] ParseArguments()
 901631        {
 901632            var argList = new List<Expression>();
 1001633            while (true)
 1001634            {
 1001635                argList.Add(ParseConditionalOperator());
 1636
 1001637                 if (_textParser.CurrentToken.Id != TokenId.Comma)
 901638                {
 901639                    break;
 1640                }
 1641
 101642                _textParser.NextToken();
 101643            }
 1644
 901645            return argList.ToArray();
 901646        }
 1647
 1648        Expression ParseElementAccess(Expression expr)
 11649        {
 11650            int errorPos = _textParser.CurrentToken.Pos;
 11651            _textParser.ValidateToken(TokenId.OpenBracket, Res.OpenParenExpected);
 11652            _textParser.NextToken();
 1653
 11654            Expression[] args = ParseArguments();
 11655            _textParser.ValidateToken(TokenId.CloseBracket, Res.CloseBracketOrCommaExpected);
 11656            _textParser.NextToken();
 1657
 11658             if (expr.Type.IsArray)
 01659            {
 01660                 if (expr.Type.GetArrayRank() != 1 || args.Length != 1)
 01661                {
 01662                    throw ParseError(errorPos, Res.CannotIndexMultiDimArray);
 1663                }
 01664                Expression index = ExpressionPromoter.Promote(args[0], typeof(int), true, false);
 1665
 01666                 if (index == null)
 01667                {
 01668                    throw ParseError(errorPos, Res.InvalidIndex);
 1669                }
 1670
 01671                return Expression.ArrayIndex(expr, index);
 1672            }
 21563            return null;
 71564        }
 1565
 1566        Expression ParseAggregate(Expression instance, Type elementType, string methodName, int errorPos, bool isQueryab
 871567        {
 871568            var oldParent = _parent;
 1569
 871570            ParameterExpression outerIt = _it;
 871571            ParameterExpression innerIt = ParameterExpressionHelper.CreateParameterExpression(elementType, string.Empty)
 1572
 871573            _parent = _it;
 1574
 871575            if (methodName == "Contains" || methodName == "Skip" || methodName == "Take")
 71576            {
 1577                // for any method that acts on the parent element type, we need to specify the outerIt as scope.
 71578                _it = outerIt;
 71579            }
 1580            else
 801581            {
 801582                _it = innerIt;
 801583            }
 1584
 871585            Expression[] args = ParseArgumentList();
 1586
 871587            _it = outerIt;
 871588            _parent = oldParent;
 1589
 871590            if (!MethodFinder.ContainsMethod(typeof(IEnumerableSignatures), methodName, false, args))
 01591            {
 01592                throw ParseError(errorPos, Res.NoApplicableAggregate, methodName);
 1593            }
 1594
 871595            Type callType = typeof(Enumerable);
 871596            if (isQueryable && MethodFinder.ContainsMethod(typeof(IQueryableSignatures), methodName, false, args))
 151597            {
 151598                callType = typeof(Queryable);
 151599            }
 1600
 1601            Type[] typeArgs;
 871602            if (new[] { "Min", "Max", "Select", "OrderBy", "OrderByDescending", "ThenBy", "ThenByDescending", "GroupBy" 
 241603            {
 241604                if (args.Length == 2)
 11605                {
 11606                    typeArgs = new[] { elementType, args[0].Type, args[1].Type };
 11607                }
 1608                else
 231609                {
 231610                    typeArgs = new[] { elementType, args[0].Type };
 231611                }
 241612            }
 631613            else if (methodName == "SelectMany")
 31614            {
 31615                var type = Expression.Lambda(args[0], innerIt).Body.Type;
 31616                var interfaces = type.GetInterfaces().Union(new[] { type });
 301617                Type interfaceType = interfaces.Single(i => i.Name == typeof(IEnumerable<>).Name);
 31618                Type resultType = interfaceType.GetTypeInfo().GetGenericTypeArguments()[0];
 31619                typeArgs = new[] { elementType, resultType };
 31620            }
 1621            else
 601622            {
 601623                typeArgs = new[] { elementType };
 601624            }
 1625
 871626            if (args.Length == 0)
 271627            {
 271628                args = new[] { instance };
 271629            }
 1630            else
 601631            {
 601632                if (new[] { "Contains", "Take", "Skip", "DefaultIfEmpty" }.Contains(methodName))
 91633                {
 91634                    args = new[] { instance, args[0] };
 91635                }
 1636                else
 511637                {
 511638                    if (args.Length == 2)
 11639                    {
 11640                        args = new[] { instance, Expression.Lambda(args[0], innerIt), Expression.Lambda(args[1], innerIt
 11641                    }
 1642                    else
 501643                    {
 501644                        args = new[] { instance, Expression.Lambda(args[0], innerIt) };
 501645                    }
 511646                }
 601647            }
 1648
 871649            return Expression.Call(callType, methodName, typeArgs, args);
 871650        }
 1651
 1652        Expression[] ParseArgumentList()
 1401653        {
 1401654            _textParser.ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
 1401655            _textParser.NextToken();
 1401656            Expression[] args = _textParser.CurrentToken.Id != TokenId.CloseParen ? ParseArguments() : new Expression[0]
 1401657            _textParser.ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected);
 1401658            _textParser.NextToken();
 1401659            return args;
 1401660        }
 1661
 1662        Expression[] ParseArguments()
 1121663        {
 1121664            var argList = new List<Expression>();
 1321665            while (true)
 1321666            {
 1321667                argList.Add(ParseConditionalOperator());
 1668
 1321669                if (_textParser.CurrentToken.Id != TokenId.Comma)
 1121670                {
 1121671                    break;
 1672                }
 1673
 11674             switch (MethodFinder.FindIndexer(expr.Type, args, out var mb))
 1675            {
 1676                case 0:
 01677                    throw ParseError(errorPos, Res.NoApplicableIndexer,
 01678                        TypeHelper.GetTypeName(expr.Type));
 1679                case 1:
 11680                    return Expression.Call(expr, (MethodInfo)mb, args);
 1681
 1682                default:
 01683                    throw ParseError(errorPos, Res.AmbiguousIndexerInvocation, TypeHelper.GetTypeName(expr.Type));
 1684            }
 11685        }
 1686
 1687        internal static Type ToNullableType(Type type)
 41688        {
 41689            Check.NotNull(type, nameof(type));
 1690
 41691             if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 01692            {
 01693                throw ParseError(-1, Res.TypeHasNoNullableForm, TypeHelper.GetTypeName(type));
 1694            }
 1695
 41696            return typeof(Nullable<>).MakeGenericType(type);
 41697        }
 1698
 1699        static bool TryGetMemberName(Expression expression, out string memberName)
 371700        {
 371701            var memberExpression = expression as MemberExpression;
 371702             if (memberExpression == null && expression.NodeType == ExpressionType.Coalesce)
 01703            {
 01704                memberExpression = (expression as BinaryExpression).Left as MemberExpression;
 01705            }
 1706
 371707             if (memberExpression != null)
 371708            {
 371709                memberName = memberExpression.Member.Name;
 371710                return true;
 1711            }
 1712
 1713#if NETFX_CORE
 1714            var indexExpression = expression as IndexExpression;
 1715            if (indexExpression != null && indexExpression.Indexer.DeclaringType == typeof(DynamicObjectClass))
 1716            {
 1717                memberName = ((ConstantExpression)indexExpression.Arguments.First()).Value as string;
 1718                return true;
 1719            }
 1720#endif
 01721            memberName = null;
 01722            return false;
 371723        }
 1724
 1725        void CheckAndPromoteOperand(Type signatures, string opName, ref Expression expr, int errorPos)
 01726        {
 01727            Expression[] args = { expr };
 1728
 01729             if (!MethodFinder.ContainsMethod(signatures, "F", false, args))
 01730            {
 01731                throw IncompatibleOperandError(opName, expr, errorPos);
 1732            }
 1733
 01734            expr = args[0];
 01735        }
 1736
 1737        void CheckAndPromoteOperands(Type signatures, string opName, ref Expression left, ref Expression right, int erro
 1471738        {
 1471739            Expression[] args = { left, right };
 1740
 1471741             if (!MethodFinder.ContainsMethod(signatures, "F", false, args))
 41742            {
 41743                throw IncompatibleOperandsError(opName, left, right, errorPos);
 1744            }
 1745
 1431746            left = args[0];
 1431747            right = args[1];
 1431748        }
 1749
 1750        static Exception IncompatibleOperandError(string opName, Expression expr, int errorPos)
 01751        {
 01752            return ParseError(errorPos, Res.IncompatibleOperand, opName, TypeHelper.GetTypeName(expr.Type));
 01753        }
 1754
 1755        static Exception IncompatibleOperandsError(string opName, Expression left, Expression right, int errorPos)
 41756        {
 41757            return ParseError(errorPos, Res.IncompatibleOperands, opName, TypeHelper.GetTypeName(left.Type), TypeHelper.
 41758        }
 1759
 1760        static MemberInfo FindPropertyOrField(Type type, string memberName, bool staticAccess)
 4391761        {
 1762#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 1763            BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | (staticAccess ? BindingFlags.Static :
 1764            foreach (Type t in TypeHelper.GetSelfAndBaseTypes(type))
 1765            {
 1766                MemberInfo[] members = t.FindMembers(MemberTypes.Property | MemberTypes.Field, flags, Type.FilterNameIgn
 1767                if (members.Length != 0)
 1768                {
 1769                    return members[0];
 1770                }
 1771            }
 1772            return null;
 1773#else
 18501774            foreach (Type t in TypeHelper.GetSelfAndBaseTypes(type))
 4731775            {
 1776                // Try to find a property with the specified memberName
 18511777                MemberInfo member = t.GetTypeInfo().DeclaredProperties.FirstOrDefault(x => x.Name.ToLowerInvariant() == 
 4731778                 if (member != null)
 4131779                {
 4131780                    return member;
 1781                }
 1782
 1783                // If no property is found, try to get a field with the specified memberName
 1881784                 member = t.GetTypeInfo().DeclaredFields.FirstOrDefault(x => (x.IsStatic || !staticAccess) && x.Name.ToLo
 601785                 if (member != null)
 01786                {
 01787                    return member;
 1788                }
 1789
 1790                // No property or field is found, try the base type.
 601791            }
 261792            return null;
 1793#endif
 4391794        }
 1795
 1796        bool TokenIdentifierIs(string id)
 48401797        {
 48401798            return _textParser.CurrentToken.Id == TokenId.Identifier && string.Equals(id, _textParser.CurrentToken.Text,
 48401799        }
 1800
 1801        string GetIdentifier()
 6231802        {
 6231803            _textParser.ValidateToken(TokenId.Identifier, Res.IdentifierExpected);
 6231804            string id = _textParser.CurrentToken.Text;
 6231805             if (id.Length > 1 && id[0] == '@')
 01806            {
 01807                id = id.Substring(1);
 01808            }
 1809
 6231810            return id;
 6231811        }
 1812
 1813        Exception ParseError(string format, params object[] args)
 71814        {
 71815             return ParseError(_textParser?.CurrentToken.Pos ?? 0, format, args);
 71816        }
 1817
 1818        static Exception ParseError(int pos, string format, params object[] args)
 221819        {
 221820            return new ParseException(string.Format(CultureInfo.CurrentCulture, format, args), pos);
 221821        }
 1822    }
 1823
 1824}
 201674                _textParser.NextToken();
 201675            }
 1676
 1121677            return argList.ToArray();
 1121678        }
 1679
 1680        Expression ParseElementAccess(Expression expr)
 31681        {
 31682            int errorPos = _textParser.CurrentToken.Pos;
 31683            _textParser.ValidateToken(TokenId.OpenBracket, Res.OpenParenExpected);
 31684            _textParser.NextToken();
 1685
 31686            Expression[] args = ParseArguments();
 31687            _textParser.ValidateToken(TokenId.CloseBracket, Res.CloseBracketOrCommaExpected);
 31688            _textParser.NextToken();
 1689
 31690            if (expr.Type.IsArray)
 01691            {
 01692                if (expr.Type.GetArrayRank() != 1 || args.Length != 1)
 01693                {
 01694                    throw ParseError(errorPos, Res.CannotIndexMultiDimArray);
 1695                }
 01696                Expression index = ExpressionPromoter.Promote(args[0], typeof(int), true, false);
 1697
 01698                if (index == null)
 01699                {
 01700                    throw ParseError(errorPos, Res.InvalidIndex);
 1701                }
 1702
 01703                return Expression.ArrayIndex(expr, index);
 1704            }
 1705
 31706            switch (MethodFinder.FindIndexer(expr.Type, args, out var mb))
 1707            {
 1708                case 0:
 01709                    throw ParseError(errorPos, Res.NoApplicableIndexer,
 01710                        TypeHelper.GetTypeName(expr.Type));
 1711                case 1:
 31712                    return Expression.Call(expr, (MethodInfo)mb, args);
 1713
 1714                default:
 01715                    throw ParseError(errorPos, Res.AmbiguousIndexerInvocation, TypeHelper.GetTypeName(expr.Type));
 1716            }
 31717        }
 1718
 1719        internal static Type ToNullableType(Type type)
 41720        {
 41721            Check.NotNull(type, nameof(type));
 1722
 41723            if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 01724            {
 01725                throw ParseError(-1, Res.TypeHasNoNullableForm, TypeHelper.GetTypeName(type));
 1726            }
 1727
 41728            return typeof(Nullable<>).MakeGenericType(type);
 41729        }
 1730
 1731        static bool TryGetMemberName(Expression expression, out string memberName)
 371732        {
 371733            var memberExpression = expression as MemberExpression;
 371734            if (memberExpression == null && expression.NodeType == ExpressionType.Coalesce)
 01735            {
 01736                memberExpression = (expression as BinaryExpression).Left as MemberExpression;
 01737            }
 1738
 371739            if (memberExpression != null)
 371740            {
 371741                memberName = memberExpression.Member.Name;
 371742                return true;
 1743            }
 1744
 1745#if NETFX_CORE
 1746            var indexExpression = expression as IndexExpression;
 1747            if (indexExpression != null && indexExpression.Indexer.DeclaringType == typeof(DynamicObjectClass))
 1748            {
 1749                memberName = ((ConstantExpression)indexExpression.Arguments.First()).Value as string;
 1750                return true;
 1751            }
 1752#endif
 01753            memberName = null;
 01754            return false;
 371755        }
 1756
 1757        void CheckAndPromoteOperand(Type signatures, string opName, ref Expression expr, int errorPos)
 01758        {
 01759            Expression[] args = { expr };
 1760
 01761            if (!MethodFinder.ContainsMethod(signatures, "F", false, args))
 01762            {
 01763                throw IncompatibleOperandError(opName, expr, errorPos);
 1764            }
 1765
 01766            expr = args[0];
 01767        }
 1768
 1769        void CheckAndPromoteOperands(Type signatures, string opName, ref Expression left, ref Expression right, int erro
 1501770        {
 1501771            Expression[] args = { left, right };
 1772
 1501773            if (!MethodFinder.ContainsMethod(signatures, "F", false, args))
 41774            {
 41775                throw IncompatibleOperandsError(opName, left, right, errorPos);
 1776            }
 1777
 1461778            left = args[0];
 1461779            right = args[1];
 1461780        }
 1781
 1782        static Exception IncompatibleOperandError(string opName, Expression expr, int errorPos)
 01783        {
 01784            return ParseError(errorPos, Res.IncompatibleOperand, opName, TypeHelper.GetTypeName(expr.Type));
 01785        }
 1786
 1787        static Exception IncompatibleOperandsError(string opName, Expression left, Expression right, int errorPos)
 41788        {
 41789            return ParseError(errorPos, Res.IncompatibleOperands, opName, TypeHelper.GetTypeName(left.Type), TypeHelper.
 41790        }
 1791
 1792        static MemberInfo FindPropertyOrField(Type type, string memberName, bool staticAccess)
 4641793        {
 1794#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 1795            BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | (staticAccess ? BindingFlags.Static :
 1796            foreach (Type t in TypeHelper.GetSelfAndBaseTypes(type))
 1797            {
 1798                MemberInfo[] members = t.FindMembers(MemberTypes.Property | MemberTypes.Field, flags, Type.FilterNameIgn
 1799                if (members.Length != 0)
 1800                {
 1801                    return members[0];
 1802                }
 1803            }
 1804            return null;
 1805#else
 19771806            foreach (Type t in TypeHelper.GetSelfAndBaseTypes(type))
 5091807            {
 1808                // Try to find a property with the specified memberName
 20631809                MemberInfo member = t.GetTypeInfo().DeclaredProperties.FirstOrDefault(x => x.Name.ToLowerInvariant() == 
 5091810                if (member != null)
 4331811                {
 4331812                    return member;
 1813                }
 1814
 1815                // If no property is found, try to get a field with the specified memberName
 2841816                member = t.GetTypeInfo().DeclaredFields.FirstOrDefault(x => (x.IsStatic || !staticAccess) && x.Name.ToLo
 761817                if (member != null)
 01818                {
 01819                    return member;
 1820                }
 1821
 1822                // No property or field is found, try the base type.
 761823            }
 311824            return null;
 1825#endif
 4641826        }
 1827
 1828        bool TokenIdentifierIs(string id)
 51721829        {
 51721830            return _textParser.CurrentToken.Id == TokenId.Identifier && string.Equals(id, _textParser.CurrentToken.Text,
 51731831        }
 1832
 1833        string GetIdentifier()
 6691834        {
 6691835            _textParser.ValidateToken(TokenId.Identifier, Res.IdentifierExpected);
 6691836            string id = _textParser.CurrentToken.Text;
 6691837            if (id.Length > 1 && id[0] == '@')
 01838            {
 01839                id = id.Substring(1);
 01840            }
 1841
 6691842            return id;
 6691843        }
 1844
 1845        Exception ParseError(string format, params object[] args)
 71846        {
 71847            return ParseError(_textParser?.CurrentToken.Pos ?? 0, format, args);
 71848        }
 1849
 1850        static Exception ParseError(int pos, string format, params object[] args)
 221851        {
 221852            return new ParseException(string.Format(CultureInfo.CurrentCulture, format, args), pos);
 221853        }
 1854    }
 1855
 1856}
-
+

Methods/Properties

-.cctor()
-.ctor(System.Linq.Expressions.ParameterExpression[],System.String,System.Object[],System.Linq.Dynamic.Core.ParsingConfig)
-ProcessParameters(System.Linq.Expressions.ParameterExpression[])
-ProcessValues(System.Object[])
-AddSymbol(System.String,System.Object)
-Parse(System.Type,System.Boolean)
-ParseOrdering(System.Boolean)
-ParseConditionalOperator()
-ParseNullCoalescingOperator()
-ParseLambdaOperator()
-ParseIsNull()
-ParseOrOperator()
-ParseAndOperator()
-ParseIn()
-ParseLogicalAndOrOperator()
-ParseComparisonOperator()
-HasImplicitConversion(System.Type,System.Type)
-ParseEnumToConstantExpression(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression)
-ParseConstantExpressionToEnum(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression)
-ParseShiftOperator()
-ParseAdditive()
-ParseMultiplicative()
-ParseUnary()
-ParsePrimary()
-ParsePrimaryStart()
-ParseStringLiteral()
-ParseIntegerLiteral()
-ParseRealLiteral()
-TryParseAsFloat(System.String,System.Char)
-TryParseAsDecimal(System.String,System.Char)
-TryParseAsDouble(System.String,System.Char)
-ParseParenExpression()
-ParseIdentifier()
-ParseIt()
-ParseParent()
-ParseRoot()
-ParseIif()
-GenerateConditional(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32)
-ParseNew()
-CreateArrayInitializerExpression(System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type)
-CreateNewExpression(System.Collections.Generic.List`1<System.Linq.Dynamic.Core.DynamicProperty>,System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type)
-ParseLambdaInvocation(System.Linq.Expressions.LambdaExpression)
-ParseTypeAccess(System.Type)
-GenerateConversion(System.Linq.Expressions.Expression,System.Type,System.Int32)
-ParseMemberAccess(System.Type,System.Linq.Expressions.Expression)
-FindType(System.String)
-ParseAggregate(System.Linq.Expressions.Expression,System.Type,System.String,System.Int32,System.Boolean)
-ParseArgumentList()
-ParseArguments()
-ParseElementAccess(System.Linq.Expressions.Expression)
-ToNullableType(System.Type)
-TryGetMemberName(System.Linq.Expressions.Expression,System.String&)
-CheckAndPromoteOperand(System.Type,System.String,System.Linq.Expressions.Expression&,System.Int32)
-CheckAndPromoteOperands(System.Type,System.String,System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&,System.Int32)
-IncompatibleOperandError(System.String,System.Linq.Expressions.Expression,System.Int32)
-IncompatibleOperandsError(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32)
-FindPropertyOrField(System.Type,System.String,System.Boolean)
-TokenIdentifierIs(System.String)
-GetIdentifier()
-ParseError(System.String,System.Object[])
-ParseError(System.Int32,System.String,System.Object[])
+.cctor()
+.ctor(System.Linq.Expressions.ParameterExpression[],System.String,System.Object[],System.Linq.Dynamic.Core.ParsingConfig)
+ProcessParameters(System.Linq.Expressions.ParameterExpression[])
+ProcessValues(System.Object[])
+AddSymbol(System.String,System.Object)
+Parse(System.Type,System.Boolean)
+ParseOrdering(System.Boolean)
+ParseConditionalOperator()
+ParseNullCoalescingOperator()
+ParseLambdaOperator()
+ParseIsNull()
+ParseOrOperator()
+ParseAndOperator()
+ParseIn()
+ParseLogicalAndOrOperator()
+ParseComparisonOperator()
+HasImplicitConversion(System.Type,System.Type)
+ParseEnumToConstantExpression(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression)
+ParseConstantExpressionToEnum(System.Int32,System.Type,System.Linq.Expressions.ConstantExpression)
+ParseShiftOperator()
+ParseAdditive()
+ParseMultiplicative()
+ParseUnary()
+ParsePrimary()
+ParsePrimaryStart()
+ParseStringLiteral()
+ParseIntegerLiteral()
+ParseRealLiteral()
+TryParseAsFloat(System.String,System.Char)
+TryParseAsDecimal(System.String,System.Char)
+TryParseAsDouble(System.String,System.Char)
+ParseParenExpression()
+ParseIdentifier()
+ParseIt()
+ParseParent()
+ParseRoot()
+ParseIif()
+GenerateConditional(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32)
+ParseNew()
+CreateArrayInitializerExpression(System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type)
+CreateNewExpression(System.Collections.Generic.List`1<System.Linq.Dynamic.Core.DynamicProperty>,System.Collections.Generic.List`1<System.Linq.Expressions.Expression>,System.Type)
+ParseLambdaInvocation(System.Linq.Expressions.LambdaExpression)
+ParseTypeAccess(System.Type)
+GenerateConversion(System.Linq.Expressions.Expression,System.Type,System.Int32)
+ParseMemberAccess(System.Type,System.Linq.Expressions.Expression)
+FindType(System.String)
+ParseAggregate(System.Linq.Expressions.Expression,System.Type,System.String,System.Int32,System.Boolean)
+ParseArgumentList()
+ParseArguments()
+ParseElementAccess(System.Linq.Expressions.Expression)
+ToNullableType(System.Type)
+TryGetMemberName(System.Linq.Expressions.Expression,System.String&)
+CheckAndPromoteOperand(System.Type,System.String,System.Linq.Expressions.Expression&,System.Int32)
+CheckAndPromoteOperands(System.Type,System.String,System.Linq.Expressions.Expression&,System.Linq.Expressions.Expression&,System.Int32)
+IncompatibleOperandError(System.String,System.Linq.Expressions.Expression,System.Int32)
+IncompatibleOperandsError(System.String,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Int32)
+FindPropertyOrField(System.Type,System.String,System.Boolean)
+TokenIdentifierIs(System.String)
+GetIdentifier()
+ParseError(System.String,System.Object[])
+ParseError(System.Int32,System.String,System.Object[])

diff --git a/report/System.Linq.Dynamic.Core_ExpressionPromoter.htm b/report/coverlet/System.Linq.Dynamic.Core_ExpressionPromoter.htm similarity index 74% rename from report/System.Linq.Dynamic.Core_ExpressionPromoter.htm rename to report/coverlet/System.Linq.Dynamic.Core_ExpressionPromoter.htm index 63c19ca0..1b26eba4 100644 --- a/report/System.Linq.Dynamic.Core_ExpressionPromoter.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ExpressionPromoter.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.ExpressionPromoter - Coverage Report
@@ -15,24 +16,24 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.ExpressionPromoter Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionPromoter.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionPromoter.cs Covered lines:48 Uncovered lines:3 Coverable lines:51 Total lines:101 Line coverage:94.1% -Branch coverage:92.8% +Branch coverage:97.3%

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
Promote(...)201638494.1293.10
Promote(...)00941974

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionPromoter.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionPromoter.cs

@@ -44,29 +45,29 @@

- - - - + + + + - + - - - - - - - + + + + + + + - + - - - - - + + + + + @@ -93,57 +94,57 @@

- - - + + + - + - - + + - + - - - - + + + + - + - - - + + + - - - + + + - + - - + +
#LineLine coverage
 6    internal static class ExpressionPromoter
 7    {
 8        public static Expression Promote(Expression expr, Type type, bool exact, bool convertExpr)
 40979        {
 409710             if (expr.Type == type)
 55311            {
 55312                return expr;
 39039        {
 390310            if (expr.Type == type)
 56311            {
 56412                return expr;
 13            }
 14
 354415            var ce = expr as ConstantExpression;
 333915            var ce = expr as ConstantExpression;
 16
 354417             if (ce != null)
 84618            {
 84619                 if (ce == Constants.NullLiteral || ce.Value == null)
 5920                {
 5921                     if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 3722                    {
 3723                        return Expression.Constant(null, type);
 333917            if (ce != null)
 83218            {
 83219                if (ce == Constants.NullLiteral || ce.Value == null)
 4720                {
 4721                    if (!type.GetTypeInfo().IsValueType || TypeHelper.IsNullableType(type))
 2622                    {
 2623                        return Expression.Constant(null, type);
 24                    }
 2225                }
 2125                }
 26                else
 78727                {
 78728                     if (ConstantExpressionHelper.TryGetText(ce, out string text))
 71429                    {
 71430                        Type target = TypeHelper.GetNonNullableType(type);
 71431                        object value = null;
 78527                {
 78528                    if (ConstantExpressionHelper.TryGetText(ce, out string text))
 71629                    {
 71630                        Type target = TypeHelper.GetNonNullableType(type);
 71631                        object value = null;
 32
 33#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 34                        switch (Type.GetTypeCode(ce.Type))
 55                                break;
 56                        }
 57#else
 71458                         if (ce.Type == typeof(Int32) || ce.Type == typeof(UInt32) || ce.Type == typeof(Int64) || ce.Type
 70359                        {
 70360                            value = TypeHelper.ParseNumber(text, target);
 71658                        if (ce.Type == typeof(Int32) || ce.Type == typeof(UInt32) || ce.Type == typeof(Int64) || ce.Type
 69959                        {
 69960                            value = TypeHelper.ParseNumber(text, target);
 61
 62                            // Make sure an enum value stays an enum value
 70363                             if (target.GetTypeInfo().IsEnum)
 69963                            if (target.GetTypeInfo().IsEnum)
 064                            {
 065                                value = Enum.ToObject(target, value);
 066                            }
 70367                        }
 1168                         else if (ce.Type == typeof(Double))
 69967                        }
 1768                        else if (ce.Type == typeof(Double))
 1069                        {
 1070                             if (target == typeof(decimal))
 1070                            if (target == typeof(decimal))
 471                            {
 472                                value = TypeHelper.ParseNumber(text, target);
 473                            }
 1074                        }
 175                         else if (ce.Type == typeof(String))
 176                        {
 177                            value = TypeHelper.ParseEnum(text, target);
 178                        }
 775                        else if (ce.Type == typeof(String))
 776                        {
 777                            value = TypeHelper.ParseEnum(text, target);
 778                        }
 79#endif
 71480                         if (value != null)
 71680                        if (value != null)
 64481                        {
 64482                            return Expression.Constant(value, type);
 83                        }
 7084                    }
 14385                }
 16586            }
 7284                    }
 14185                }
 16286            }
 87
 286388             if (TypeHelper.IsCompatibleWith(expr.Type, type))
 116089            {
 116090                 if (type.GetTypeInfo().IsValueType || exact || expr.Type.GetTypeInfo().IsValueType && convertExpr)
 266988            if (TypeHelper.IsCompatibleWith(expr.Type, type))
 116389            {
 116390                if (type.GetTypeInfo().IsValueType || exact || expr.Type.GetTypeInfo().IsValueType && convertExpr)
 111491                {
 111492                    return Expression.Convert(expr, type);
 93                }
 94
 4695                return expr;
 4995                return expr;
 96            }
 97
 170398            return null;
 409799        }
 150698            return null;
 390399        }
 100    }
 101}
-
+
diff --git a/report/System.Linq.Dynamic.Core_ExtensibilityPoint.htm b/report/coverlet/System.Linq.Dynamic.Core_ExtensibilityPoint.htm similarity index 66% rename from report/System.Linq.Dynamic.Core_ExtensibilityPoint.htm rename to report/coverlet/System.Linq.Dynamic.Core_ExtensibilityPoint.htm index b132d83a..ddbadf34 100644 --- a/report/System.Linq.Dynamic.Core_ExtensibilityPoint.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ExtensibilityPoint.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.ExtensibilityPoint - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.ExtensibilityPoint Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExtensibilityPoint.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExtensibilityPoint.cs Covered lines:1 Uncovered lines:0 Coverable lines:1 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()10100100
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExtensibilityPoint.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ExtensibilityPoint.cs

@@ -49,16 +50,16 @@

- +
#LineLine coverage
 12        /// Place to optimize your queries. Example: Add a reference to Nuget package Linq.Expression.Optimizer
 13        /// and in your program initializers set Extensibility.QueryOptimizer = ExpressionOptimizer.visit;
 14        /// </summary>
 14815        public static Func<Expression, Expression> QueryOptimizer = e => e;
 19715        public static Func<Expression, Expression> QueryOptimizer = e => e;
 16    }
 17}
-
+

Methods/Properties

-.cctor()
+.cctor()

diff --git a/report/System.Linq.Dynamic.Core_GroupResult.htm b/report/coverlet/System.Linq.Dynamic.Core_GroupResult.htm similarity index 81% rename from report/System.Linq.Dynamic.Core_GroupResult.htm rename to report/coverlet/System.Linq.Dynamic.Core_GroupResult.htm index 17084b9c..81bcf0c4 100644 --- a/report/System.Linq.Dynamic.Core_GroupResult.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_GroupResult.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.GroupResult - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.GroupResult Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GroupResult.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GroupResult.cs Covered lines:7 Uncovered lines:0 Coverable lines:7 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ToString()10100100
ToString()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GroupResult.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\GroupResult.cs

@@ -84,19 +85,15 @@

#LineLine coverage
 47}
-
+
diff --git a/report/System.Linq.Dynamic.Core_KeywordsHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_KeywordsHelper.htm similarity index 60% rename from report/System.Linq.Dynamic.Core_KeywordsHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_KeywordsHelper.htm index a412407f..70b08992 100644 --- a/report/System.Linq.Dynamic.Core_KeywordsHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_KeywordsHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.KeywordsHelper - Coverage Report
@@ -15,25 +16,25 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.KeywordsHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\KeywordsHelper.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\KeywordsHelper.cs Covered lines:41 Uncovered lines:0 Coverable lines:41 Total lines:67 Line coverage:100% -Branch coverage:75% +Branch coverage:100%

Metrics

- + - - + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)10410080
TryGetValue(...)10100100
TryGetValue(...)0010
.ctor(...)0011

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\KeywordsHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\KeywordsHelper.cs

@@ -54,64 +55,64 @@

- - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + +
#LineLine coverage
 15        public const string KEYWORD_NEW = "new";
 16        public const string KEYWORD_ISNULL = "isnull";
 17
 49218        private readonly IDictionary<string, object> _keywords = new Dictionary<string, object>(StringComparer.OrdinalIg
 49219        {
 49220            { "true", Constants.TrueLiteral },
 49221            { "false", Constants.FalseLiteral },
 49222            { "null", Constants.NullLiteral }
 49223        };
 50918        private readonly IDictionary<string, object> _keywords = new Dictionary<string, object>(StringComparer.OrdinalIg
 50919        {
 50920            { "true", Constants.TrueLiteral },
 50921            { "false", Constants.FalseLiteral },
 50922            { "null", Constants.NullLiteral }
 50923        };
 24
 49225        public KeywordsHelper(ParsingConfig config)
 49226        {
 49227             if (config.AreContextKeywordsEnabled)
 49228            {
 49229                _keywords.Add(KEYWORD_IT, KEYWORD_IT);
 49230                _keywords.Add(KEYWORD_PARENT, KEYWORD_PARENT);
 49231                _keywords.Add(KEYWORD_ROOT, KEYWORD_ROOT);
 49232            }
 50925        public KeywordsHelper(ParsingConfig config)
 50926        {
 50927            if (config.AreContextKeywordsEnabled)
 50928            {
 50929                _keywords.Add(KEYWORD_IT, KEYWORD_IT);
 50930                _keywords.Add(KEYWORD_PARENT, KEYWORD_PARENT);
 50931                _keywords.Add(KEYWORD_ROOT, KEYWORD_ROOT);
 50932            }
 33
 49234            _keywords.Add(SYMBOL_IT, SYMBOL_IT);
 49235            _keywords.Add(SYMBOL_PARENT, SYMBOL_PARENT);
 49236            _keywords.Add(SYMBOL_ROOT, SYMBOL_ROOT);
 49237            _keywords.Add(KEYWORD_IIF, KEYWORD_IIF);
 49238            _keywords.Add(KEYWORD_NEW, KEYWORD_NEW);
 49239            _keywords.Add(KEYWORD_ISNULL, KEYWORD_ISNULL);
 50934            _keywords.Add(SYMBOL_IT, SYMBOL_IT);
 50935            _keywords.Add(SYMBOL_PARENT, SYMBOL_PARENT);
 50936            _keywords.Add(SYMBOL_ROOT, SYMBOL_ROOT);
 50937            _keywords.Add(KEYWORD_IIF, KEYWORD_IIF);
 50938            _keywords.Add(KEYWORD_NEW, KEYWORD_NEW);
 50939            _keywords.Add(KEYWORD_ISNULL, KEYWORD_ISNULL);
 40
 4477241            foreach (Type type in PredefinedTypesHelper.PredefinedTypes.OrderBy(kvp => kvp.Value).Select(kvp => kvp.Key)
 1082442            {
 1082443                _keywords[type.FullName] = type;
 1082444                _keywords[type.Name] = type;
 1082445            }
 4829641            foreach (Type type in PredefinedTypesHelper.PredefinedTypes.OrderBy(kvp => kvp.Value).Select(kvp => kvp.Key)
 1169242            {
 1169343                _keywords[type.FullName] = type;
 1168444                _keywords[type.Name] = type;
 1168445            }
 46
 934847            foreach (KeyValuePair<string, Type> pair in PredefinedTypesHelper.PredefinedTypesShorthands)
 393648            {
 393649                _keywords.Add(pair.Key, pair.Value);
 393650            }
 965847            foreach (KeyValuePair<string, Type> pair in PredefinedTypesHelper.PredefinedTypesShorthands)
 406748            {
 406749                _keywords.Add(pair.Key, pair.Value);
 406250            }
 51
 49252             if (config.CustomTypeProvider != null)
 3653            {
 32254                foreach (Type type in config.CustomTypeProvider.GetCustomTypes())
 10755                {
 10756                    _keywords[type.FullName] = type;
 10757                    _keywords[type.Name] = type;
 10758                }
 3659            }
 49260        }
 50952            if (config.CustomTypeProvider != null)
 2653            {
 23854                foreach (Type type in config.CustomTypeProvider.GetCustomTypes())
 7955                {
 8156                    _keywords[type.FullName] = type;
 8057                    _keywords[type.Name] = type;
 8158                }
 2659            }
 50960        }
 61
 62        public bool TryGetValue(string name, out object type)
 90463        {
 90464            return _keywords.TryGetValue(name, out type);
 90465        }
 96063        {
 96064            return _keywords.TryGetValue(name, out type);
 96065        }
 66    }
 67}
-
+
diff --git a/report/System.Linq.Dynamic.Core_LinqProviderExtensions.htm b/report/coverlet/System.Linq.Dynamic.Core_LinqProviderExtensions.htm similarity index 74% rename from report/System.Linq.Dynamic.Core_LinqProviderExtensions.htm rename to report/coverlet/System.Linq.Dynamic.Core_LinqProviderExtensions.htm index 1c06245a..c4780186 100644 --- a/report/System.Linq.Dynamic.Core_LinqProviderExtensions.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_LinqProviderExtensions.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs Covered lines:19 Uncovered lines:3 Coverable lines:22 @@ -26,14 +27,14 @@

Summary

Metrics

- + - - + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
IsLinqToObjects(...)10100100
IsProviderEnumerableQuery(...)4882.3585.71
IsLinqToObjects(...)0010
IsProviderEnumerableQuery(...)00824833

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Extensions\LinqProviderExtensions.cs

@@ -51,31 +52,31 @@

- - - + + + - - + + - - + + - + - + - + - + @@ -84,18 +85,18 @@

- - + +
#LineLine coverage
 12        /// <param name="source">The IQueryable</param>
 13        /// <returns>true if provider is LinqToObjects, else false</returns>
 14        public static bool IsLinqToObjects([NotNull] this IQueryable source)
 40315        {
 40316            Check.NotNull(source, nameof(source));
 40317            Check.NotNull(source.Provider, nameof(source.Provider));
 40815        {
 40816            Check.NotNull(source, nameof(source));
 40817            Check.NotNull(source.Provider, nameof(source.Provider));
 18
 40319            return IsProviderEnumerableQuery(source.Provider);
 40320        }
 40819            return IsProviderEnumerableQuery(source.Provider);
 40820        }
 21
 22        private static bool IsProviderEnumerableQuery(IQueryProvider provider)
 40423        {
 40424            Type baseType = provider.GetType().GetTypeInfo().BaseType;
 40923        {
 40924            Type baseType = provider.GetType().GetTypeInfo().BaseType;
 25#if NET35
 26            bool isLinqToObjects = baseType.FullName.Contains("EnumerableQuery");
 27#else
 40428            bool isLinqToObjects = baseType == typeof(EnumerableQuery);
 40928            bool isLinqToObjects = baseType == typeof(EnumerableQuery);
 29#endif
 40430             if (!isLinqToObjects)
 40930            if (!isLinqToObjects)
 3431            {
 32                // add support for https://github.com/StefH/QueryInterceptor.Core, version 1.0.1 and up
 3433                 if (baseType.Name == "QueryTranslatorProvider")
 3433                if (baseType.Name == "QueryTranslatorProvider")
 134                {
 35                    try
 136                    {
 137                        PropertyInfo property = baseType.GetProperty("OriginalProvider");
 138                        IQueryProvider originalProvider = property.GetValue(provider, null) as IQueryProvider;
 139                         return originalProvider != null && IsProviderEnumerableQuery(originalProvider);
 139                        return originalProvider != null && IsProviderEnumerableQuery(originalProvider);
 40                    }
 041                    catch
 042                    {
 45                }
 3346            }
 47
 40348            return isLinqToObjects;
 40449        }
 40848            return isLinqToObjects;
 40949        }
 50    }
 51}
-
+
diff --git a/report/System.Linq.Dynamic.Core_MethodData.htm b/report/coverlet/System.Linq.Dynamic.Core_MethodData.htm similarity index 56% rename from report/System.Linq.Dynamic.Core_MethodData.htm rename to report/coverlet/System.Linq.Dynamic.Core_MethodData.htm index 16fe2795..174d7c3a 100644 --- a/report/System.Linq.Dynamic.Core_MethodData.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_MethodData.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodData.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodData.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -24,7 +25,7 @@

Summary

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodData.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodData.cs

@@ -35,23 +36,20 @@

- - - + + +
#LineLine coverage
 5{
 6    internal class MethodData
 7    {
 70718        public MethodBase MethodBase { get; set; }
 142989        public ParameterInfo[] Parameters { get; set; }
 156210        public Expression[] Args { get; set; }
 67178        public MethodBase MethodBase { get; set; }
 137299        public ParameterInfo[] Parameters { get; set; }
 159410        public Expression[] Args { get; set; }
 11    }
 12}
-
+
diff --git a/report/System.Linq.Dynamic.Core_MethodFinder.htm b/report/coverlet/System.Linq.Dynamic.Core_MethodFinder.htm similarity index 66% rename from report/System.Linq.Dynamic.Core_MethodFinder.htm rename to report/coverlet/System.Linq.Dynamic.Core_MethodFinder.htm index ba45720b..e742a3dc 100644 --- a/report/System.Linq.Dynamic.Core_MethodFinder.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_MethodFinder.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder - Coverage Report
@@ -15,33 +16,33 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs -Covered lines:142 -Uncovered lines:6 -Coverable lines:148 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs +Covered lines:139 +Uncovered lines:10 +Coverable lines:149 Total lines:229 -Line coverage:95.9% -Branch coverage:91% +Line coverage:93.2% +Branch coverage:89.4%

Metrics

- + - - - - - - - - - - + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
ContainsMethod(...)10100100
FindMethod(...)52100100
FindBestMethod(...)1016100100
FindIndexer(...)6478.9560
IsApplicable(...)51690.9188.89
IsBetterThan(...)51610088.89
CompareConversions(...)12512100100
SelfAndBaseTypes(...)22100100
AddInterface(...)32100100
SelfAndBaseClasses()4210066.67
ContainsMethod(...)0010
FindMethod(...)0011
FindBestMethod(...)0088975
FindIndexer(...)0081625
IsApplicable(...)009875
IsBetterThan(...)0011
CompareConversions(...)0011
SelfAndBaseTypes(...)0011
AddInterface(...)0011
SelfAndBaseClasses()008571

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs

@@ -54,12 +55,12 @@

- - - + + + - + @@ -72,224 +73,224 @@

- - - - - - - + + + + + + + - + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - - - - + + + + + - - + + - - - - + + + + - + - + - - + + - + - + - + - + - - + + - - - - - - + + + + + + - - + + - - - - + + + + - + - - - - - - - + + + + + + +
#LineLine coverage
 7    internal static class MethodFinder
 8    {
 9        public static bool ContainsMethod(Type type, string methodName, bool staticAccess, Expression[] args)
 24610        {
 24611            return FindMethod(type, methodName, staticAccess, args, out var _) == 1;
 24612        }
 25310        {
 25311            return FindMethod(type, methodName, staticAccess, args, out var _) == 1;
 25312        }
 13
 14        public static int FindMethod(Type type, string methodName, bool staticAccess, Expression[] args, out MethodBase 
 26415        {
 27915        {
 16#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 17            BindingFlags flags = BindingFlags.Public | BindingFlags.DeclaredOnly | (staticAccess ? BindingFlags.Static :
 18            foreach (Type t in SelfAndBaseTypes(type))
 25                }
 26            }
 27#else
 128728            foreach (Type t in SelfAndBaseTypes(type))
 37729            {
 983030                 MethodInfo[] methods = t.GetTypeInfo().DeclaredMethods.Where(x => (x.IsStatic || !staticAccess) && x.Nam
 37731                int count = FindBestMethod(methods, args, out method);
 37732                 if (count != 0)
 25933                {
 25934                    return count;
 134728            foreach (Type t in SelfAndBaseTypes(type))
 39229            {
 1027830                MethodInfo[] methods = t.GetTypeInfo().DeclaredMethods.Where(x => (x.IsStatic || !staticAccess) && x.Nam
 39231                int count = FindBestMethod(methods, args, out method);
 39232                if (count != 0)
 27433                {
 27434                    return count;
 35                }
 11836            }
 37#endif
 538            method = null;
 539            return 0;
 26440        }
 27940        }
 41
 42        public static int FindBestMethod(IEnumerable<MethodBase> methods, Expression[] args, out MethodBase method)
 38543        {
 38544            MethodData[] applicable = methods.
 329145                Select(m => new MethodData { MethodBase = m, Parameters = m.GetParameters() }).
 329146                Where(m => IsApplicable(m, args)).
 38547                ToArray();
 40643        {
 40644            MethodData[] applicable = methods.
 314645                Select(m => new MethodData { MethodBase = m, Parameters = m.GetParameters() }).
 314646                Where(m => IsApplicable(m, args)).
 40647                ToArray();
 48
 38549             if (applicable.Length > 1)
 14550            {
 364751                applicable = applicable.Where(m => applicable.All(n => m == n || IsBetterThan(args, m, n))).ToArray();
 14552            }
 40649            if (applicable.Length > 1)
 14150            {
 361951                applicable = applicable.Where(m => applicable.All(n => m == n || IsBetterThan(args, m, n))).ToArray();
 14152            }
 53
 38554             if (args.Length == 2 && applicable.Length > 1 && (args[0].Type == typeof(Guid?) || args[1].Type == typeof(Gu
 455            {
 456                applicable = applicable.Take(1).ToArray();
 457            }
 40654            if (args.Length == 2 && applicable.Length > 1 && (args[0].Type == typeof(Guid?) || args[1].Type == typeof(Gu
 055            {
 056                applicable = applicable.Take(1).ToArray();
 057            }
 58
 38559             if (applicable.Length == 1)
 26160            {
 26161                MethodData md = applicable[0];
 127462                 for (int i = 0; i < args.Length; i++)
 37663                {
 37664                    args[i] = md.Args[i];
 37665                }
 26166                method = md.MethodBase;
 26167            }
 40659            if (applicable.Length == 1)
 27860            {
 27861                MethodData md = applicable[0];
 134662                for (int i = 0; i < args.Length; i++)
 39563                {
 39564                    args[i] = md.Args[i];
 39565                }
 27866                method = md.MethodBase;
 27867            }
 68            else
 12469            {
 12470                method = null;
 12471            }
 12869            {
 12870                method = null;
 12871            }
 72
 38573            return applicable.Length;
 38574        }
 40673            return applicable.Length;
 40674        }
 75
 76        public static int FindIndexer(Type type, Expression[] args, out MethodBase method)
 177        {
 478            foreach (Type t in SelfAndBaseTypes(type))
 179            {
 180                MemberInfo[] members = t.GetDefaultMembers();
 181                 if (members.Length != 0)
 182                {
 183                    IEnumerable<MethodBase> methods = members.OfType<PropertyInfo>().
 184#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 185                        Select(p => (MethodBase)p.GetGetMethod()).
 186                        Where(m => m != null);
 187#else
 388                    Select(p => (MethodBase)p.GetMethod);
 377        {
 1278            foreach (Type t in SelfAndBaseTypes(type))
 379            {
 380                MemberInfo[] members = t.GetDefaultMembers();
 381                if (members.Length != 0)
 382                {
 383                    IEnumerable<MethodBase> methods = members.OfType<PropertyInfo>().
 384#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 385                        Select(p => (MethodBase)p.GetGetMethod()).
 386                        Where(m => m != null);
 387#else
 788                    Select(p => (MethodBase)p.GetMethod);
 89#endif
 190                    int count = FindBestMethod(methods, args, out method);
 191                     if (count != 0)
 192                    {
 193                        return count;
 390                    int count = FindBestMethod(methods, args, out method);
 391                    if (count != 0)
 392                    {
 393                        return count;
 94                    }
 095                }
 096            }
 97
 098            method = null;
 099            return 0;
 1100        }
 3100        }
 101
 102        static bool IsApplicable(MethodData method, Expression[] args)
 2906103        {
 2906104             if (method.Parameters.Length != args.Length)
 45105            {
 45106                return false;
 2740103        {
 2740104            if (method.Parameters.Length != args.Length)
 63105            {
 63106                return false;
 107            }
 108
 2861109            Expression[] promotedArgs = new Expression[args.Length];
 10180110             for (int i = 0; i < args.Length; i++)
 3904111            {
 3904112                ParameterInfo pi = method.Parameters[i];
 3904113                 if (pi.IsOut)
 2677109            Expression[] promotedArgs = new Expression[args.Length];
 9796110            for (int i = 0; i < args.Length; i++)
 3699111            {
 3699112                ParameterInfo pi = method.Parameters[i];
 3699113                if (pi.IsOut)
 0114                {
 0115                    return false;
 116                }
 117
 3904118                Expression promoted = ExpressionPromoter.Promote(args[i], pi.ParameterType, false, method.MethodBase.Dec
 3904119                 if (promoted == null)
 1675120                {
 1675121                    return false;
 3699118                Expression promoted = ExpressionPromoter.Promote(args[i], pi.ParameterType, false, method.MethodBase.Dec
 3699119                if (promoted == null)
 1478120                {
 1478121                    return false;
 122                }
 2229123                promotedArgs[i] = promoted;
 2229124            }
 1186125            method.Args = promotedArgs;
 1186126            return true;
 2906127        }
 2221123                promotedArgs[i] = promoted;
 2221124            }
 1199125            method.Args = promotedArgs;
 1199126            return true;
 2740127        }
 128
 129        static bool IsBetterThan(Expression[] args, MethodData first, MethodData second)
 2219130        {
 2219131            bool better = false;
 5012132             for (int i = 0; i < args.Length; i++)
 2291133            {
 2291134                CompareConversionType result = CompareConversions(args[i].Type, first.Parameters[i].ParameterType, secon
 2211130        {
 2211131            bool better = false;
 4964132            for (int i = 0; i < args.Length; i++)
 2275133            {
 2275134                CompareConversionType result = CompareConversions(args[i].Type, first.Parameters[i].ParameterType, secon
 135
 136                // If second is better, return false
 2291137                 if (result == CompareConversionType.Second)
 2275137                if (result == CompareConversionType.Second)
 921138                {
 921139                    return false;
 140                }
 141
 142                // If first is better, return true
 1370143                 if (result == CompareConversionType.First)
 1354143                if (result == CompareConversionType.First)
 1083144                {
 1083145                    return true;
 146                }
 147
 148                // If both are same, just set better to true and continue
 287149                 if (result == CompareConversionType.Both)
 287150                {
 287151                    better = true;
 287152                }
 287153            }
 271149                if (result == CompareConversionType.Both)
 271150                {
 271151                    better = true;
 271152                }
 271153            }
 154
 215155            return better;
 2219156        }
 207155            return better;
 2211156        }
 157
 158        // Return "First" if s -> t1 is a better conversion than s -> t2
 159        // Return "Second" if s -> t2 is a better conversion than s -> t1
 160        // Return "Both" if neither conversion is better
 161        static CompareConversionType CompareConversions(Type source, Type first, Type second)
 2291162        {
 2291163             if (first == second)
 72164            {
 72165                return CompareConversionType.Both;
 2275162        {
 2275163            if (first == second)
 64164            {
 64165                return CompareConversionType.Both;
 166            }
 2219167             if (source == first)
 2211167            if (source == first)
 646168            {
 646169                return CompareConversionType.First;
 170            }
 1573171             if (source == second)
 1565171            if (source == second)
 601172            {
 601173                return CompareConversionType.Second;
 174            }
 175
 972176            bool firstIsCompatibleWithSecond = TypeHelper.IsCompatibleWith(first, second);
 972177            bool secondIsCompatibleWithFirst = TypeHelper.IsCompatibleWith(second, first);
 964176            bool firstIsCompatibleWithSecond = TypeHelper.IsCompatibleWith(first, second);
 964177            bool secondIsCompatibleWithFirst = TypeHelper.IsCompatibleWith(second, first);
 178
 972179             if (firstIsCompatibleWithSecond && !secondIsCompatibleWithFirst)
 964179            if (firstIsCompatibleWithSecond && !secondIsCompatibleWithFirst)
 357180            {
 357181                return CompareConversionType.First;
 182            }
 615183             if (secondIsCompatibleWithFirst && !firstIsCompatibleWithSecond)
 607183            if (secondIsCompatibleWithFirst && !firstIsCompatibleWithSecond)
 240184            {
 240185                return CompareConversionType.Second;
 186            }
 187
 375188             if (TypeHelper.IsSignedIntegralType(first) && TypeHelper.IsUnsignedIntegralType(second))
 367188            if (TypeHelper.IsSignedIntegralType(first) && TypeHelper.IsUnsignedIntegralType(second))
 80189            {
 80190                return CompareConversionType.First;
 191            }
 295192             if (TypeHelper.IsSignedIntegralType(second) && TypeHelper.IsUnsignedIntegralType(first))
 287192            if (TypeHelper.IsSignedIntegralType(second) && TypeHelper.IsUnsignedIntegralType(first))
 80193            {
 80194                return CompareConversionType.Second;
 195            }
 196
 215197            return CompareConversionType.Both;
 2291198        }
 207197            return CompareConversionType.Both;
 2275198        }
 199
 200        static IEnumerable<Type> SelfAndBaseTypes(Type type)
 265201        {
 265202             if (type.GetTypeInfo().IsInterface)
 249203            {
 249204                var types = new List<Type>();
 249205                AddInterface(types, type);
 249206                return types;
 282201        {
 282202            if (type.GetTypeInfo().IsInterface)
 256203            {
 256204                var types = new List<Type>();
 256205                AddInterface(types, type);
 256206                return types;
 207            }
 16208            return SelfAndBaseClasses(type);
 265209        }
 26208            return SelfAndBaseClasses(type);
 282209        }
 210
 211        static IEnumerable<Type> SelfAndBaseClasses(Type type)
 16212        {
 17213             while (type != null)
 17214            {
 17215                yield return type;
 26212        {
 27213            while (type != null)
 27214            {
 27215                yield return type;
 1216                type = type.GetTypeInfo().BaseType;
 1217            }
 218        }
 0218        }
 219
 220        static void AddInterface(List<Type> types, Type type)
 439221        {
 439222             if (!types.Contains(type))
 381223            {
 381224                types.Add(type);
 1713225                foreach (Type t in type.GetInterfaces()) AddInterface(types, t);
 381226            }
 439227        }
 455221        {
 455222            if (!types.Contains(type))
 394223            {
 394224                types.Add(type);
 1779225                foreach (Type t in type.GetInterfaces()) AddInterface(types, t);
 394226            }
 455227        }
 228    }
 229}
-
+

Methods/Properties

-ContainsMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[])
-FindMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
-FindBestMethod(System.Collections.Generic.IEnumerable`1<System.Reflection.MethodBase>,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
-FindIndexer(System.Type,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
-IsApplicable(System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Expressions.Expression[])
-IsBetterThan(System.Linq.Expressions.Expression[],System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData)
-CompareConversions(System.Type,System.Type,System.Type)
-SelfAndBaseTypes(System.Type)
-SelfAndBaseClasses()
-AddInterface(System.Collections.Generic.List`1<System.Type>,System.Type)
+ContainsMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[])
+FindMethod(System.Type,System.String,System.Boolean,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
+FindBestMethod(System.Collections.Generic.IEnumerable`1<System.Reflection.MethodBase>,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
+FindIndexer(System.Type,System.Linq.Expressions.Expression[],System.Reflection.MethodBase&)
+IsApplicable(System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Expressions.Expression[])
+IsBetterThan(System.Linq.Expressions.Expression[],System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData,System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData)
+CompareConversions(System.Type,System.Type,System.Type)
+SelfAndBaseTypes(System.Type)
+SelfAndBaseClasses()
+AddInterface(System.Collections.Generic.List`1<System.Type>,System.Type)

diff --git a/report/System.Linq.Dynamic.Core_PagedResult.htm b/report/coverlet/System.Linq.Dynamic.Core_PagedResult.htm similarity index 86% rename from report/System.Linq.Dynamic.Core_PagedResult.htm rename to report/coverlet/System.Linq.Dynamic.Core_PagedResult.htm index ef75723e..23599b25 100644 --- a/report/System.Linq.Dynamic.Core_PagedResult.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_PagedResult.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.PagedResult - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.PagedResult Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs Covered lines:5 Uncovered lines:0 Coverable lines:5 @@ -24,7 +25,7 @@

Summary

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs

@@ -94,20 +95,15 @@

#LineLine coverage
 64}
-
+
diff --git a/report/System.Linq.Dynamic.Core_PagedResult_1.htm b/report/coverlet/System.Linq.Dynamic.Core_PagedResult_1.htm similarity index 88% rename from report/System.Linq.Dynamic.Core_PagedResult_1.htm rename to report/coverlet/System.Linq.Dynamic.Core_PagedResult_1.htm index 6e2546df..123f2d5e 100644 --- a/report/System.Linq.Dynamic.Core_PagedResult_1.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_PagedResult_1.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.PagedResult`1 - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.PagedResult`1 Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs Covered lines:1 Uncovered lines:0 Coverable lines:1 @@ -24,7 +25,7 @@

Summary

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\PagedResult.cs

@@ -94,12 +95,11 @@

#LineLine coverage
 64}
-
+
diff --git a/report/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm similarity index 56% rename from report/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm index 57f950ef..a0c6db1c 100644 --- a/report/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ParameterExpressionHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.ParameterExpressionHelper - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.ParameterExpressionHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParameterExpressionHelper.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParameterExpressionHelper.cs Covered lines:3 Uncovered lines:0 Coverable lines:3 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
CreateParameterExpression(...)10100100
CreateParameterExpression(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParameterExpressionHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParameterExpressionHelper.cs

@@ -42,18 +43,18 @@

- - - + + +
#LineLine coverage
 5    internal static class ParameterExpressionHelper
 6    {
 7        public static ParameterExpression CreateParameterExpression(Type type, string name)
 5758        {
 5759            return Expression.Parameter(type, name);
 57510        }
 5968        {
 5969            return Expression.Parameter(type, name);
 59610        }
 11    }
 12}
-
+
diff --git a/report/System.Linq.Dynamic.Core_ParseException.htm b/report/coverlet/System.Linq.Dynamic.Core_ParseException.htm similarity index 86% rename from report/System.Linq.Dynamic.Core_ParseException.htm rename to report/coverlet/System.Linq.Dynamic.Core_ParseException.htm index 2b7e059d..f913f975 100644 --- a/report/System.Linq.Dynamic.Core_ParseException.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_ParseException.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Exceptions.ParseException - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Exceptions.ParseException Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Exceptions\ParseException.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Exceptions\ParseException.cs Covered lines:4 Uncovered lines:4 Coverable lines:8 @@ -25,14 +26,14 @@

Summary

Metrics

- + - - + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)10100100
ToString()1000
ToString()0000
.ctor(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Exceptions\ParseException.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Exceptions\ParseException.cs

@@ -104,13 +105,13 @@

#LineLine coverage
 66}
-
+
diff --git a/report/coverlet/System.Linq.Dynamic.Core_ParsingConfig.htm b/report/coverlet/System.Linq.Dynamic.Core_ParsingConfig.htm new file mode 100644 index 00000000..8cfcc1a6 --- /dev/null +++ b/report/coverlet/System.Linq.Dynamic.Core_ParsingConfig.htm @@ -0,0 +1,129 @@ + + + + + + +System.Linq.Dynamic.Core.ParsingConfig - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:System.Linq.Dynamic.Core.ParsingConfig
Assembly:System.Linq.Dynamic.Core
File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParsingConfig.cs
Covered lines:18
Uncovered lines:0
Coverable lines:18
Total lines:71
Line coverage:100%
Branch coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()0010
+

File(s)

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\ParsingConfig.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System.Linq.Dynamic.Core.CustomTypeProviders;
 2
 3namespace System.Linq.Dynamic.Core
 4{
 5    /// <summary>
 6    /// Configuration class for Dynamic Linq.
 7    /// </summary>
 8    public class ParsingConfig
 9    {
 10        /// <summary>
 11        /// Default ParsingConfig
 12        /// </summary>
 47013        public static ParsingConfig Default { get; } = new ParsingConfig();
 14
 15        /// <summary>
 16        /// Default ParsingConfig for EntityFramework Core 2.1 and higher
 17        /// </summary>
 118        public static ParsingConfig DefaultEFCore21 { get; } = new ParsingConfig
 119        {
 120            EvaluateGroupByAtDatabase = true
 121        };
 22
 23        private IDynamicLinkCustomTypeProvider _customTypeProvider;
 24
 25        /// <summary>
 26        /// Gets or sets the <see cref="IDynamicLinkCustomTypeProvider"/>.
 27        /// </summary>
 28        public IDynamicLinkCustomTypeProvider CustomTypeProvider
 29        {
 30            get
 55531            {
 32#if !(DOTNET5_1 || WINDOWS_APP || UAP10_0 || NETSTANDARD)
 33                // only use DefaultDynamicLinqCustomTypeProvider if not WINDOWS_APP || UAP10_0 || NETSTANDARD
 34                return _customTypeProvider ?? (_customTypeProvider = new DefaultDynamicLinqCustomTypeProvider());
 35#else
 55536                return _customTypeProvider;
 37#endif
 55538            }
 39
 40            set
 741            {
 742                if (_customTypeProvider != value)
 743                {
 744                    _customTypeProvider = value;
 745                }
 746            }
 47        }
 48
 49        /// <summary>
 50        /// Determines if the context keywords (it, parent, and root) are valid and usable inside a Dynamic Linq string 
 51        /// Does not affect the usability of the equivalent context symbols ($, ^ and ~).
 52        /// </summary>
 52253        public bool AreContextKeywordsEnabled { get; set; } = true;
 54
 55        /// <summary>
 56        /// Gets or sets a value indicating whether to use dynamic object class for anonymous types.
 57        /// </summary>
 4758        public bool UseDynamicObjectClassForAnonymousTypes { get; set; }
 59
 60        /// <summary>
 61        /// Gets or sets a value indicating whether the EntityFramwwork version supports evaluating GroupBy at database 
 62        /// See https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.1#linq-groupby-translation
 63        /// </summary>
 464        public bool EvaluateGroupByAtDatabase { get; set; }
 65
 66        /// <summary>
 67        /// Allows the New() keyword to evaluate any available Type.
 68        /// </summary>
 1969        public bool AllowNewToEvaluateAnyType { get; set; } = false;
 70    }
 71}
+
+
+ + \ No newline at end of file diff --git a/report/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm similarity index 77% rename from report/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm index 7d33da8f..f396c910 100644 --- a/report/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_PredefinedTypesHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper - Coverage Report
@@ -15,26 +16,26 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\PredefinedTypesHelper.cs -Covered lines:45 -Uncovered lines:12 -Coverable lines:57 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\PredefinedTypesHelper.cs +Covered lines:55 +Uncovered lines:3 +Coverable lines:58 Total lines:99 -Line coverage:78.9% -Branch coverage:50% +Line coverage:94.8% +Branch coverage:100%

Metrics

- + - - - + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()10100100
TryAdd(...)2200
IsPredefinedType(...)32100100
TryAdd(...)00751
IsPredefinedType(...)0011
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\PredefinedTypesHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\PredefinedTypesHelper.cs

@@ -103,49 +104,49 @@

- + - + - - - - - - - + + + + + + + - + - - - + + + - - - + + + - - + +
#LineLine coverage
 63#endif
 64
 65#if NETSTANDARD2_0
 66            TryAdd("Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions, Microsoft.EntityFrameworkCore.DynamicLin
 166            TryAdd("Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions, Microsoft.EntityFrameworkCore.DynamicLin
 67#endif
 168        }
 69
 70        private static void TryAdd(string typeName, int x)
 071        {
 171        {
 72            try
 073            {
 074                Type efType = Type.GetType(typeName);
 075                 if (efType != null)
 076                {
 077                    PredefinedTypes.Add(efType, x);
 078                }
 079            }
 173            {
 174                Type efType = Type.GetType(typeName);
 175                if (efType != null)
 176                {
 177                    PredefinedTypes.Add(efType, x);
 178                }
 179            }
 080            catch
 081            {
 82                // in case of exception, do not add
 083            }
 084        }
 184        }
 85
 86        public static bool IsPredefinedType(ParsingConfig config, Type type)
 2687        {
 2688            Check.NotNull(config, nameof(config));
 2689            Check.NotNull(type, nameof(type));
 3487        {
 3488            Check.NotNull(config, nameof(config));
 3489            Check.NotNull(type, nameof(type));
 90
 2691             if (PredefinedTypes.ContainsKey(type))
 1492            {
 1493                return true;
 3491            if (PredefinedTypes.ContainsKey(type))
 2092            {
 2093                return true;
 94            }
 95
 1296            return config.CustomTypeProvider != null && config.CustomTypeProvider.GetCustomTypes().Contains(type);
 2697        }
 1496            return config.CustomTypeProvider != null && config.CustomTypeProvider.GetCustomTypes().Contains(type);
 3497        }
 98    }
 99}
-
+
diff --git a/report/System.Linq.Dynamic.Core_TextParser.htm b/report/coverlet/System.Linq.Dynamic.Core_TextParser.htm similarity index 80% rename from report/System.Linq.Dynamic.Core_TextParser.htm rename to report/coverlet/System.Linq.Dynamic.Core_TextParser.htm index 9e5967d3..c64a966c 100644 --- a/report/System.Linq.Dynamic.Core_TextParser.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_TextParser.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Tokenizer.TextParser - Coverage Report
@@ -15,37 +16,37 @@

Summary

Class:System.Linq.Dynamic.Core.Tokenizer.TextParser Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\TextParser.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\TextParser.cs Covered lines:303 Uncovered lines:3 Coverable lines:306 Total lines:447 Line coverage:99% -Branch coverage:94.1% +Branch coverage:97.6%

Metrics

- + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor(...)10100100
SetTextPos(...)3210066.67
NextChar()4410080
NextToken()771638410096.52
ValidateToken(...)22100100
ValidateToken(...)226066.67
ValidateExpression()22100100
ValidateDigit()22100100
ValidateHexChar()22100100
ParseError(...)10100100
ParseError(...)10100100
GetAliasedTokenId(...)42100100
IsHexChar(...)449080
.cctor()10100100
SetTextPos(...)0015
NextChar()0011
NextToken()001993
ValidateToken(...)0011
ValidateToken(...)0065
ValidateExpression()0011
ValidateDigit()0011
ValidateHexChar()0011
ParseError(...)0010
ParseError(...)0010
GetAliasedTokenId(...)0011
IsHexChar(...)009833
.ctor(...)0010
.cctor()0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\TextParser.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\TextParser.cs

@@ -83,41 +84,41 @@

- - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - + + - + - + @@ -135,7 +136,7 @@

- + @@ -147,14 +148,14 @@

- - - + + + - - - + + + @@ -172,14 +173,14 @@

- - - + + + - - - + + + @@ -187,9 +188,9 @@

- - - + + + @@ -203,17 +204,17 @@

- + - + - + @@ -225,13 +226,13 @@

- - - - - - - + + + + + + + @@ -240,34 +241,34 @@

- + - - + + - + - - - - + + + + - + - + @@ -279,18 +280,18 @@

- - - + + + - - - + + + - + @@ -303,83 +304,83 @@

- + - + - - - + + + - + - + - - + + - + - - + + - - + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - + + - + - + - + - + - + - + @@ -387,61 +388,61 @@

- + - + - + - + - - - - + + + + - - - - + + + + - - - - - + + + + + - - + + - + - - + + - + - + @@ -449,7 +450,7 @@

- + @@ -457,7 +458,7 @@

- + @@ -474,22 +475,22 @@

- + - - + + - + - + - + @@ -498,24 +499,24 @@

#LineLine coverage
 32        private char _ch;
 33        public Token CurrentToken;
 34
 51035        public TextParser(string text)
 51036        {
 51037            _text = text;
 51038            _textLen = _text.Length;
 51039            SetTextPos(0);
 51040            NextToken();
 50741        }
 52635        public TextParser(string text)
 52736        {
 52737            _text = text;
 52738            _textLen = _text.Length;
 52739            SetTextPos(0);
 52740            NextToken();
 52341        }
 42
 43        private void SetTextPos(int pos)
 51044        {
 51045            _textPos = pos;
 51046             _ch = _textPos < _textLen ? _text[_textPos] : '\0';
 51047        }
 52744        {
 52745            _textPos = pos;
 52746            _ch = _textPos < _textLen ? _text[_textPos] : '\0';
 52747        }
 48
 49        private void NextChar()
 898150        {
 1796251             if (_textPos < _textLen) _textPos++;
 898152             _ch = _textPos < _textLen ? _text[_textPos] : '\0';
 898153        }
 996650        {
 1993151            if (_textPos < _textLen) _textPos++;
 996652            _ch = _textPos < _textLen ? _text[_textPos] : '\0';
 996653        }
 54
 55        public void NextToken()
 338356        {
 455957             while (char.IsWhiteSpace(_ch))
 117658            {
 117659                NextChar();
 117660            }
 364756        {
 488857            while (char.IsWhiteSpace(_ch))
 124158            {
 124159                NextChar();
 124160            }
 61
 338362            TokenId tokenId = TokenId.Unknown;
 338363            int tokenPos = _textPos;
 364762            TokenId tokenId = TokenId.Unknown;
 364763            int tokenPos = _textPos;
 64
 338365             switch (_ch)
 364765            switch (_ch)
 66            {
 67                case '!':
 968                    NextChar();
 969                     if (_ch == '=')
 969                    if (_ch == '=')
 870                    {
 871                        NextChar();
 872                        tokenId = TokenId.ExclamationEqual;
 84
 85                case '&':
 3086                    NextChar();
 3087                     if (_ch == '&')
 3087                    if (_ch == '&')
 488                    {
 489                        NextChar();
 490                        tokenId = TokenId.DoubleAmphersand;
 3096                    break;
 97
 98                case '(':
 22199                    NextChar();
 221100                    tokenId = TokenId.OpenParen;
 221101                    break;
 24899                    NextChar();
 248100                    tokenId = TokenId.OpenParen;
 248101                    break;
 102
 103                case ')':
 216104                    NextChar();
 216105                    tokenId = TokenId.CloseParen;
 216106                    break;
 243104                    NextChar();
 243105                    tokenId = TokenId.CloseParen;
 243106                    break;
 107
 108                case '{':
 12109                    NextChar();
 16121                    break;
 122
 123                case '+':
 24124                    NextChar();
 24125                    tokenId = TokenId.Plus;
 24126                    break;
 35124                    NextChar();
 35125                    tokenId = TokenId.Plus;
 35126                    break;
 127
 128                case ',':
 104129                    NextChar();
 104130                    tokenId = TokenId.Comma;
 104131                    break;
 117129                    NextChar();
 117130                    tokenId = TokenId.Comma;
 117131                    break;
 132
 133                case '-':
 27134                    NextChar();
 27136                    break;
 137
 138                case '.':
 257139                    NextChar();
 257140                    tokenId = TokenId.Dot;
 257141                    break;
 286139                    NextChar();
 286140                    tokenId = TokenId.Dot;
 286141                    break;
 142
 143                case '/':
 2144                    NextChar();
 152
 153                case '<':
 44154                    NextChar();
 44155                     if (_ch == '=')
 44155                    if (_ch == '=')
 4156                    {
 4157                        NextChar();
 4158                        tokenId = TokenId.LessThanEqual;
 4159                    }
 40160                     else if (_ch == '>')
 40160                    else if (_ch == '>')
 1161                    {
 1162                        NextChar();
 1163                        tokenId = TokenId.LessGreater;
 1164                    }
 39165                     else if (_ch == '<')
 39165                    else if (_ch == '<')
 25166                    {
 25167                        NextChar();
 25168                        tokenId = TokenId.DoubleLessThan;
 44174                    break;
 175
 176                case '=':
 198177                    NextChar();
 198178                     if (_ch == '=')
 103179                    {
 103180                        NextChar();
 103181                        tokenId = TokenId.DoubleEqual;
 103182                    }
 95183                     else if (_ch == '>')
 206177                    NextChar();
 206178                    if (_ch == '=')
 111179                    {
 111180                        NextChar();
 111181                        tokenId = TokenId.DoubleEqual;
 111182                    }
 95183                    else if (_ch == '>')
 19184                    {
 19185                        NextChar();
 19186                        tokenId = TokenId.Lambda;
 76189                    {
 76190                        tokenId = TokenId.Equal;
 76191                    }
 198192                    break;
 206192                    break;
 193
 194                case '>':
 54195                    NextChar();
 54196                     if (_ch == '=')
 55195                    NextChar();
 55196                    if (_ch == '=')
 4197                    {
 4198                        NextChar();
 4199                        tokenId = TokenId.GreaterThanEqual;
 4200                    }
 50201                     else if (_ch == '>')
 51201                    else if (_ch == '>')
 8202                    {
 8203                        NextChar();
 8204                        tokenId = TokenId.DoubleGreaterThan;
 8205                    }
 206                    else
 42207                    {
 42208                        tokenId = TokenId.GreaterThan;
 42209                    }
 54210                    break;
 43207                    {
 43208                        tokenId = TokenId.GreaterThan;
 43209                    }
 55210                    break;
 211
 212                case '?':
 16213                    NextChar();
 16214                     if (_ch == '?')
 16214                    if (_ch == '?')
 6215                    {
 6216                        NextChar();
 6217                        tokenId = TokenId.NullCoalescing;
 6218                    }
 10219                     else if (_ch == '.')
 10219                    else if (_ch == '.')
 2220                    {
 2221                        NextChar();
 2222                        tokenId = TokenId.NullPropagation;
 16228                    break;
 229
 230                case '[':
 8231                    NextChar();
 8232                    tokenId = TokenId.OpenBracket;
 8233                    break;
 10231                    NextChar();
 10232                    tokenId = TokenId.OpenBracket;
 10233                    break;
 234
 235                case ']':
 8236                    NextChar();
 8237                    tokenId = TokenId.CloseBracket;
 8238                    break;
 10236                    NextChar();
 10237                    tokenId = TokenId.CloseBracket;
 10238                    break;
 239
 240                case '|':
 18241                    NextChar();
 18242                     if (_ch == '|')
 18242                    if (_ch == '|')
 1243                    {
 1244                        NextChar();
 1245                        tokenId = TokenId.DoubleBar;
 252
 253                case '"':
 254                case '\'':
 39255                    char quote = _ch;
 53255                    char quote = _ch;
 256                    do
 39257                    {
 55257                    {
 258                        bool escaped;
 259
 260                        do
 265261                        {
 265262                            escaped = false;
 265263                            NextChar();
 563261                        {
 563262                            escaped = false;
 563263                            NextChar();
 264
 265265                             if (_ch == '\\')
 563265                            if (_ch == '\\')
 8266                            {
 8267                                escaped = true;
 16268                                 if (_textPos < _textLen) NextChar();
 16268                                if (_textPos < _textLen) NextChar();
 8269                            }
 265270                        }
 265271                         while (_textPos < _textLen && (_ch != quote || escaped));
 563270                        }
 563271                        while (_textPos < _textLen && (_ch != quote || escaped));
 272
 39273                         if (_textPos == _textLen)
 55273                        if (_textPos == _textLen)
 1274                            throw ParseError(_textPos, Res.UnterminatedStringLiteral);
 275
 38276                        NextChar();
 76277                     } while (_ch == quote);
 54276                        NextChar();
 108277                    } while (_ch == quote);
 278
 38279                    tokenId = TokenId.StringLiteral;
 38280                    break;
 52279                    tokenId = TokenId.StringLiteral;
 52280                    break;
 281
 282                default:
 2065283                     if (char.IsLetter(_ch) || _ch == '@' || _ch == '_' || _ch == '$' || _ch == '^' || _ch == '~')
 1356284                    {
 2195283                    if (char.IsLetter(_ch) || _ch == '@' || _ch == '_' || _ch == '$' || _ch == '^' || _ch == '~')
 1464284                    {
 285                        do
 5496286                        {
 5496287                            NextChar();
 10992288                         } while (char.IsLetterOrDigit(_ch) || _ch == '_');
 1356289                        tokenId = TokenId.Identifier;
 1356290                        break;
 5967286                        {
 5967287                            NextChar();
 11938288                        } while (char.IsLetterOrDigit(_ch) || _ch == '_');
 1464289                        tokenId = TokenId.Identifier;
 1464290                        break;
 291                    }
 292
 709293                     if (char.IsDigit(_ch))
 237294                    {
 237295                        tokenId = TokenId.IntegerLiteral;
 731293                    if (char.IsDigit(_ch))
 242294                    {
 242295                        tokenId = TokenId.IntegerLiteral;
 296                        do
 323297                        {
 323298                            NextChar();
 646299                         } while (char.IsDigit(_ch));
 329297                        {
 329298                            NextChar();
 658299                        } while (char.IsDigit(_ch));
 300
 237301                        bool hexInteger = false;
 237302                         if (_ch == 'X' || _ch == 'x')
 242301                        bool hexInteger = false;
 242302                        if (_ch == 'X' || _ch == 'x')
 9303                        {
 9304                            NextChar();
 9305                            ValidateHexChar();
 306                            do
 78307                            {
 78308                                NextChar();
 156309                             } while (IsHexChar(_ch));
 156309                            } while (IsHexChar(_ch));
 310
 7311                            hexInteger = true;
 7312                        }
 313
 235314                         if (_ch == 'U' || _ch == 'L')
 240314                        if (_ch == 'U' || _ch == 'L')
 21315                        {
 21316                            NextChar();
 21317                             if (_ch == 'L')
 21317                            if (_ch == 'L')
 6318                            {
 10319                                 if (_text[_textPos - 1] == 'U') NextChar();
 10319                                if (_text[_textPos - 1] == 'U') NextChar();
 2320                                else throw ParseError(_textPos, Res.InvalidIntegerQualifier, _text.Substring(_textPos - 
 4321                            }
 19322                            ValidateExpression();
 15323                            break;
 324                        }
 325
 214326                         if (hexInteger)
 219326                        if (hexInteger)
 2327                        {
 2328                            break;
 329                        }
 330
 212331                         if (_ch == NumberDecimalSeparator)
 217331                        if (_ch == NumberDecimalSeparator)
 25332                        {
 25333                            tokenId = TokenId.RealLiteral;
 25334                            NextChar();
 336                            do
 34337                            {
 34338                                NextChar();
 68339                             } while (char.IsDigit(_ch));
 68339                            } while (char.IsDigit(_ch));
 24340                        }
 341
 211342                         if (_ch == 'E' || _ch == 'e')
 216342                        if (_ch == 'E' || _ch == 'e')
 3343                        {
 3344                            tokenId = TokenId.RealLiteral;
 3345                            NextChar();
 5346                             if (_ch == '+' || _ch == '-') NextChar();
 5346                            if (_ch == '+' || _ch == '-') NextChar();
 3347                            ValidateDigit();
 348                            do
 6349                            {
 6350                                NextChar();
 12351                             } while (char.IsDigit(_ch));
 12351                            } while (char.IsDigit(_ch));
 3352                        }
 353
 221354                         if (_ch == 'F' || _ch == 'f') NextChar();
 220355                         if (_ch == 'D' || _ch == 'd') NextChar();
 221356                         if (_ch == 'M' || _ch == 'm') NextChar();
 211357                        break;
 226354                        if (_ch == 'F' || _ch == 'f') NextChar();
 225355                        if (_ch == 'D' || _ch == 'd') NextChar();
 226356                        if (_ch == 'M' || _ch == 'm') NextChar();
 216357                        break;
 358                    }
 359
 472360                     if (_textPos == _textLen)
 471361                    {
 471362                        tokenId = TokenId.End;
 471363                        break;
 489360                    if (_textPos == _textLen)
 488361                    {
 488362                        tokenId = TokenId.End;
 488363                        break;
 364                    }
 365
 1366                    throw ParseError(_textPos, Res.InvalidCharacter, _ch);
 367            }
 368
 3372369            CurrentToken.Pos = tokenPos;
 3372370            CurrentToken.Text = _text.Substring(tokenPos, _textPos - tokenPos);
 3372371            CurrentToken.OriginalId = tokenId;
 3372372            CurrentToken.Id = GetAliasedTokenId(tokenId, CurrentToken.Text);
 3372373        }
 3636369            CurrentToken.Pos = tokenPos;
 3636370            CurrentToken.Text = _text.Substring(tokenPos, _textPos - tokenPos);
 3635371            CurrentToken.OriginalId = tokenId;
 3636372            CurrentToken.Id = GetAliasedTokenId(tokenId, CurrentToken.Text);
 3636373        }
 374
 375        public void ValidateToken(TokenId t, string errorMessage)
 1428376        {
 1428377             if (CurrentToken.Id != t)
 1545376        {
 1545377            if (CurrentToken.Id != t)
 5378            {
 5379                throw ParseError(errorMessage);
 380            }
 1423381        }
 1540381        }
 382
 383        public void ValidateToken(TokenId t)
 1159384        {
 1159385             if (CurrentToken.Id != t)
 1232384        {
 1232385            if (CurrentToken.Id != t)
 0386            {
 0387                throw ParseError(Res.SyntaxError);
 388            }
 1159389        }
 1231389        }
 390
 391        private void ValidateExpression()
 19392        {
 19393             if (char.IsLetterOrDigit(_ch))
 19393            if (char.IsLetterOrDigit(_ch))
 4394            {
 4395                throw ParseError(_textPos, Res.ExpressionExpected);
 396            }
 398
 399        private void ValidateDigit()
 28400        {
 28401             if (!char.IsDigit(_ch))
 28401            if (!char.IsDigit(_ch))
 1402            {
 1403                throw ParseError(_textPos, Res.DigitExpected);
 404            }
 406
 407        private void ValidateHexChar()
 9408        {
 9409             if (!IsHexChar(_ch))
 9409            if (!IsHexChar(_ch))
 2410            {
 2411                throw ParseError(_textPos, Res.HexCharExpected);
 412            }
 16423        }
 424
 425        private static TokenId GetAliasedTokenId(TokenId t, string alias)
 3372426        {
 3635426        {
 427            TokenId id;
 3372428             return t == TokenId.Identifier && _predefinedAliases.TryGetValue(alias, out id) ? id : t;
 3372429        }
 3635428            return t == TokenId.Identifier && _predefinedAliases.TryGetValue(alias, out id) ? id : t;
 3635429        }
 430
 431        private static bool IsHexChar(char c)
 87432        {
 87433             if (char.IsDigit(c))
 87433            if (char.IsDigit(c))
 46434            {
 46435                return true;
 436            }
 437
 41438             if (c <= '\x007f')
 41438            if (c <= '\x007f')
 41439            {
 41440                c |= (char)0x20;
 41441                return c >= 'a' && c <= 'f';
 41441                return c >= 'a' && c <= 'f';
 442            }
 443
 0444            return false;
 447}
-
+
diff --git a/report/System.Linq.Dynamic.Core_Token.htm b/report/coverlet/System.Linq.Dynamic.Core_Token.htm similarity index 56% rename from report/System.Linq.Dynamic.Core_Token.htm rename to report/coverlet/System.Linq.Dynamic.Core_Token.htm index 3e502520..ed6a76a4 100644 --- a/report/System.Linq.Dynamic.Core_Token.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_Token.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Tokenizer.Token - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.Tokenizer.Token Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\Token.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\Token.cs Covered lines:4 Uncovered lines:0 Coverable lines:4 @@ -24,7 +25,7 @@

Summary

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\Token.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Tokenizer\Token.cs

@@ -32,29 +33,25 @@

- + - + - + - +
#LineLine coverage
 2{
 3    internal struct Token
 4    {
 412435        public TokenId Id { get; set; }
 441685        public TokenId Id { get; set; }
 6
 33727        public TokenId OriginalId { get; set; }
 36367        public TokenId OriginalId { get; set; }
 8
 110119        public string Text { get; set; }
 118599        public string Text { get; set; }
 10
 556911        public int Pos { get; set; }
 597511        public int Pos { get; set; }
 12    }
 13}
-
+
diff --git a/report/System.Linq.Dynamic.Core_TypeConverterFactory.htm b/report/coverlet/System.Linq.Dynamic.Core_TypeConverterFactory.htm similarity index 76% rename from report/System.Linq.Dynamic.Core_TypeConverterFactory.htm rename to report/coverlet/System.Linq.Dynamic.Core_TypeConverterFactory.htm index 01f1fc57..23e72273 100644 --- a/report/System.Linq.Dynamic.Core_TypeConverterFactory.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_TypeConverterFactory.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.TypeConverterFactory - Coverage Report
@@ -15,7 +16,7 @@

Summary

Class:System.Linq.Dynamic.Core.TypeConverterFactory Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\TypeConverterFactory.cs +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\TypeConverterFactory.cs Covered lines:4 Uncovered lines:0 Coverable lines:4 @@ -25,13 +26,13 @@

Summary

Metrics

- + - +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
GetConverter(...)10100100
GetConverter(...)0010

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\TypeConverterFactory.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\TypeConverterFactory.cs

@@ -49,11 +50,11 @@

- - + + - + @@ -68,16 +69,16 @@

- +
#LineLine coverage
 12        /// <param name="type">The System.Type of the target component.</param>
 13        /// <returns>A System.ComponentModel.TypeConverter for the specified type.</returns>
 14        public static TypeConverter GetConverter([NotNull] Type type)
 1015        {
 1016            Check.NotNull(type, nameof(type));
 1115        {
 1116            Check.NotNull(type, nameof(type));
 17
 18#if !SILVERLIGHT
 1019            return TypeDescriptor.GetConverter(type);
 1119            return TypeDescriptor.GetConverter(type);
 20#else
 21            var attributes = type.GetCustomAttributes(typeof(TypeConverterAttribute), false);
 22
 31
 32            return Activator.CreateInstance(converterType) as TypeConverter;
 33#endif
 1034        }
 1134        }
 35    }
 36}
-
+
diff --git a/report/System.Linq.Dynamic.Core_TypeHelper.htm b/report/coverlet/System.Linq.Dynamic.Core_TypeHelper.htm similarity index 79% rename from report/System.Linq.Dynamic.Core_TypeHelper.htm rename to report/coverlet/System.Linq.Dynamic.Core_TypeHelper.htm index 4b464378..4d454d26 100644 --- a/report/System.Linq.Dynamic.Core_TypeHelper.htm +++ b/report/coverlet/System.Linq.Dynamic.Core_TypeHelper.htm @@ -3,6 +3,7 @@ + System.Linq.Dynamic.Core.Parser.TypeHelper - Coverage Report
@@ -15,39 +16,39 @@

Summary

Class:System.Linq.Dynamic.Core.Parser.TypeHelper Assembly:System.Linq.Dynamic.Core -File(s):C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\TypeHelper.cs -Covered lines:194 -Uncovered lines:18 +File(s):C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\TypeHelper.cs +Covered lines:193 +Uncovered lines:19 Coverable lines:212 Total lines:506 -Line coverage:91.5% -Branch coverage:87% +Line coverage:91% +Branch coverage:93.4%

Metrics

- + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
FindGenericType(...)81610088.89
IsCompatibleWith(...)7116777216100100
IsEnumType(...)10100100
IsNumericType(...)10100100
IsNullableType(...)20100100
IsSignedIntegralType(...)10100100
IsUnsignedIntegralType(...)10100100
GetNumericTypeKind(...)141684.6288.89
GetTypeName(...)2266.6766.67
GetNonNullableType(...)32100100
GetUnderlyingType(...)44100100
GetSelfAndBaseTypes(...)22100100
AddInterface(...)32100100
ParseNumber(...)23419430471.1971.11
ParseEnum(...)32100100
GetSelfAndBaseClasses()42100100
FindGenericType(...)0011
IsCompatibleWith(...)0011
IsEnumType(...)0010
IsNumericType(...)0010
IsNullableType(...)0011
IsSignedIntegralType(...)0010
IsUnsignedIntegralType(...)0010
GetNumericTypeKind(...)00769923
GetTypeName(...)006675
GetNonNullableType(...)0011
GetUnderlyingType(...)0011
GetSelfAndBaseTypes(...)0011
AddInterface(...)0011
ParseNumber(...)00729705
ParseEnum(...)0011
GetSelfAndBaseClasses()0011

File(s)

-

C:\Users\azureuser\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\TypeHelper.cs

+

C:\Users\Stef\Documents\Github\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\TypeHelper.cs

@@ -60,31 +61,31 @@

- - - - - - + + + + + + - - - - - - - - + + + + + + + + - - + + - - + + - + @@ -223,83 +224,83 @@

- + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - - - + + + - + - + - - - + + + @@ -307,16 +308,16 @@

- - + + - - + + - - - + + + @@ -324,8 +325,8 @@

- - + + @@ -354,28 +355,28 @@

- + - + - + - + - + - + - + @@ -383,52 +384,52 @@

- - + + - - + + - + - + - - + + - - + + - - - - - - - + + + + + + + - + - + @@ -436,7 +437,7 @@

- + @@ -486,99 +487,99 @@

- - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + +
#LineLine coverage
 7    internal static class TypeHelper
 8    {
 9        public static Type FindGenericType(Type generic, Type type)
 162010        {
 296011             while (type != null && type != typeof(object))
 162412            {
 162413                 if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == generic)
 9914                {
 9915                    return type;
 173910        {
 318611            while (type != null && type != typeof(object))
 174412            {
 174413                if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == generic)
 10314                {
 10315                    return type;
 16                }
 17
 152518                 if (generic.GetTypeInfo().IsInterface)
 152519                {
 727620                    foreach (Type intfType in type.GetInterfaces())
 144321                    {
 144322                        Type found = FindGenericType(generic, intfType);
 162823                         if (found != null) return found;
 125824                    }
 134025                }
 164118                if (generic.GetTypeInfo().IsInterface)
 164119                {
 783720                    foreach (Type intfType in type.GetInterfaces())
 155421                    {
 155422                        Type found = FindGenericType(generic, intfType);
 174823                        if (found != null) return found;
 136024                    }
 144725                }
 26
 134027                type = type.GetTypeInfo().BaseType;
 134028            }
 144727                type = type.GetTypeInfo().BaseType;
 144728            }
 29
 133630            return null;
 162031        }
 144230            return null;
 173931        }
 32
 33        public static bool IsCompatibleWith(Type source, Type target)
 481034        {
 460034        {
 35#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 36            if (source == target)
 37            {
 170            }
 171            return false;
 172#else
 4810173             if (source == target)
 4600173            if (source == target)
 1174            {
 1175                return true;
 176            }
 4809177             if (!target.GetTypeInfo().IsValueType)
 246178            {
 246179                return target.IsAssignableFrom(source);
 4599177            if (!target.GetTypeInfo().IsValueType)
 127178            {
 127179                return target.IsAssignableFrom(source);
 180            }
 4563181            Type st = GetNonNullableType(source);
 4563182            Type tt = GetNonNullableType(target);
 4472181            Type st = GetNonNullableType(source);
 4472182            Type tt = GetNonNullableType(target);
 183
 4563184             if (st != source && tt == target)
 594185            {
 594186                return false;
 4472184            if (st != source && tt == target)
 589185            {
 589186                return false;
 187            }
 3969188             Type sc = st.GetTypeInfo().IsEnum ? typeof(Object) : st;
 3969189             Type tc = tt.GetTypeInfo().IsEnum ? typeof(Object) : tt;
 3883188            Type sc = st.GetTypeInfo().IsEnum ? typeof(Object) : st;
 3883189            Type tc = tt.GetTypeInfo().IsEnum ? typeof(Object) : tt;
 190
 3969191             if (sc == typeof(SByte))
 120192            {
 120193                 if (tc == typeof(SByte) || tc == typeof(Int16) || tc == typeof(Int32) || tc == typeof(Int64) || tc == ty
 3883191            if (sc == typeof(SByte))
 116192            {
 116193                if (tc == typeof(SByte) || tc == typeof(Int16) || tc == typeof(Int32) || tc == typeof(Int64) || tc == ty
 52194                    return true;
 68195            }
 3849196             else if (sc == typeof(Byte))
 121197            {
 121198                 if (tc == typeof(Byte) || tc == typeof(Int16) || tc == typeof(UInt16) || tc == typeof(Int32) || tc == ty
 64195            }
 3767196            else if (sc == typeof(Byte))
 117197            {
 117198                if (tc == typeof(Byte) || tc == typeof(Int16) || tc == typeof(UInt16) || tc == typeof(Int32) || tc == ty
 93199                    return true;
 28200            }
 3728201             else if (sc == typeof(Int16))
 149202            {
 149203                 if (tc == typeof(Int16) || tc == typeof(Int32) || tc == typeof(Int64) || tc == typeof(Single) || tc == t
 24200            }
 3650201            else if (sc == typeof(Int16))
 143202            {
 143203                if (tc == typeof(Int16) || tc == typeof(Int32) || tc == typeof(Int64) || tc == typeof(Single) || tc == t
 63204                    return true;
 86205            }
 3579206             else if (sc == typeof(UInt16))
 120207            {
 120208                 if (tc == typeof(UInt16) || tc == typeof(Int32) || tc == typeof(UInt32) || tc == typeof(Int64) || tc == 
 80205            }
 3507206            else if (sc == typeof(UInt16))
 116207            {
 116208                if (tc == typeof(UInt16) || tc == typeof(Int32) || tc == typeof(UInt32) || tc == typeof(Int64) || tc == 
 92209                    return true;
 28210            }
 3459211             else if (sc == typeof(Int32))
 24210            }
 3391211            else if (sc == typeof(Int32))
 1213212            {
 1213213                 if (tc == typeof(Int32) || tc == typeof(Int64) || tc == typeof(Single) || tc == typeof(Double) || tc == 
 1213213                if (tc == typeof(Int32) || tc == typeof(Int64) || tc == typeof(Single) || tc == typeof(Double) || tc == 
 838214                    return true;
 375215            }
 2246216             else if (sc == typeof(UInt32))
 271217            {
 271218                 if (tc == typeof(UInt32) || tc == typeof(Int64) || tc == typeof(UInt64) || tc == typeof(Single) || tc ==
 2178216            else if (sc == typeof(UInt32))
 259217            {
 259218                if (tc == typeof(UInt32) || tc == typeof(Int64) || tc == typeof(UInt64) || tc == typeof(Single) || tc ==
 117219                    return true;
 154220            }
 1975221             else if (sc == typeof(Int64))
 494222            {
 494223                 if (tc == typeof(Int64) || tc == typeof(Single) || tc == typeof(Double) || tc == typeof(Decimal))
 142220            }
 1919221            else if (sc == typeof(Int64))
 480222            {
 480223                if (tc == typeof(Int64) || tc == typeof(Single) || tc == typeof(Double) || tc == typeof(Decimal))
 187224                    return true;
 307225            }
 1481226             else if (sc == typeof(UInt64))
 278227            {
 278228                 if (tc == typeof(UInt64) || tc == typeof(Single) || tc == typeof(Double) || tc == typeof(Decimal))
 293225            }
 1439226            else if (sc == typeof(UInt64))
 266227            {
 266228                if (tc == typeof(UInt64) || tc == typeof(Single) || tc == typeof(Double) || tc == typeof(Decimal))
 64229                    return true;
 214230            }
 1203231             else if (sc == typeof(Single))
 292232            {
 292233                 if (tc == typeof(Single) || tc == typeof(Double))
 202230            }
 1173231            else if (sc == typeof(Single))
 284232            {
 284233                if (tc == typeof(Single) || tc == typeof(Double))
 70234                    return true;
 222235            }
 214235            }
 236
 2393237             if (st == tt)
 128238            {
 128239                return true;
 2307237            if (st == tt)
 126238            {
 126239                return true;
 240            }
 241
 2265242            return false;
 2181242            return false;
 243#endif
 4810244        }
 4600244        }
 245
 246        public static bool IsEnumType(Type type)
 406247        {
 406248            return GetNonNullableType(type).GetTypeInfo().IsEnum;
 406249        }
 416247        {
 416248            return GetNonNullableType(type).GetTypeInfo().IsEnum;
 416249        }
 250
 251        public static bool IsNumericType(Type type)
 13252        {
 13254        }
 255
 256        public static bool IsNullableType(Type type)
 12010257        {
 12010258            Check.NotNull(type, nameof(type));
 11820257        {
 11820258            Check.NotNull(type, nameof(type));
 259
 12010260            return type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
 12010261        }
 11820260            return type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
 11820261        }
 262
 263        public static bool IsSignedIntegralType(Type type)
 670264        {
 670265            return GetNumericTypeKind(type) == 2;
 670266        }
 654264        {
 654265            return GetNumericTypeKind(type) == 2;
 654266        }
 267
 268        public static bool IsUnsignedIntegralType(Type type)
 250269        {
 250271        }
 272
 273        private static int GetNumericTypeKind(Type type)
 933274        {
 933275            type = GetNonNullableType(type);
 917274        {
 917275            type = GetNonNullableType(type);
 276
 277#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 278            if (type.GetTypeInfo().IsEnum)
 301                    return 0;
 302            }
 303#else
 933304             if (type.GetTypeInfo().IsEnum)
 917304            if (type.GetTypeInfo().IsEnum)
 0305            {
 0306                return 0;
 307            }
 308
 933309             if (type == typeof(Char) || type == typeof(Single) || type == typeof(Double) || type == typeof(Decimal))
 917309            if (type == typeof(Char) || type == typeof(Single) || type == typeof(Double) || type == typeof(Decimal))
 398310                return 1;
 535311             if (type == typeof(SByte) || type == typeof(Int16) || type == typeof(Int32) || type == typeof(Int64))
 519311            if (type == typeof(SByte) || type == typeof(Int16) || type == typeof(Int32) || type == typeof(Int64))
 276312                return 2;
 259313             if (type == typeof(Byte) || type == typeof(UInt16) || type == typeof(UInt32) || type == typeof(UInt64))
 243313            if (type == typeof(Byte) || type == typeof(UInt16) || type == typeof(UInt32) || type == typeof(UInt64))
 243314                return 3;
 315
 16316            return 0;
 0316            return 0;
 317#endif
 933318        }
 917318        }
 319
 320        public static string GetTypeName(Type type)
 16321        {
 16322            Type baseType = GetNonNullableType(type);
 323
 16324            string s = baseType.Name;
 16325             if (type != baseType)
 16325            if (type != baseType)
 0326            {
 0327                s += '?';
 0328            }
 16330        }
 331
 332        public static Type GetNonNullableType(Type type)
 11914333        {
 11914334            Check.NotNull(type, nameof(type));
 11724333        {
 11724334            Check.NotNull(type, nameof(type));
 335
 11914336             return IsNullableType(type) ? type.GetTypeInfo().GetGenericTypeArguments()[0] : type;
 11914337        }
 11724336            return IsNullableType(type) ? type.GetTypeInfo().GetGenericTypeArguments()[0] : type;
 11724337        }
 338
 339        public static Type GetUnderlyingType(Type type)
 240340        {
 240341            Check.NotNull(type, nameof(type));
 342
 240343            Type[] genericTypeArguments = type.GetGenericArguments();
 240344             if (genericTypeArguments.Any())
 240344            if (genericTypeArguments.Any())
 168345            {
 168346                var outerType = GetUnderlyingType(genericTypeArguments.LastOrDefault());
 168347                 return Nullable.GetUnderlyingType(type) == outerType ? type : outerType;
 168347                return Nullable.GetUnderlyingType(type) == outerType ? type : outerType;
 348            }
 349
 72350            return type;
 240351        }
 352
 353        public static IEnumerable<Type> GetSelfAndBaseTypes(Type type)
 439354        {
 439355             if (type.GetTypeInfo().IsInterface)
 464354        {
 464355            if (type.GetTypeInfo().IsInterface)
 19356            {
 19357                var types = new List<Type>();
 19358                AddInterface(types, type);
 19359                return types;
 360            }
 420361            return GetSelfAndBaseClasses(type);
 439362        }
 445361            return GetSelfAndBaseClasses(type);
 464362        }
 363
 364        private static IEnumerable<Type> GetSelfAndBaseClasses(Type type)
 420365        {
 462366             while (type != null)
 442367            {
 442368                yield return type;
 42369                type = type.GetTypeInfo().BaseType;
 42370            }
 20371        }
 445365        {
 503366            while (type != null)
 478367            {
 478368                yield return type;
 58369                type = type.GetTypeInfo().BaseType;
 58370            }
 25371        }
 372
 373        private static void AddInterface(List<Type> types, Type type)
 76374        {
 76375             if (!types.Contains(type))
 76375            if (!types.Contains(type))
 57376            {
 57377                types.Add(type);
 285378                foreach (Type t in type.GetInterfaces())
 285378                foreach (Type t in type.GetInterfaces())
 57379                {
 57380                    AddInterface(types, t);
 57381                }
 76383        }
 384
 385        public static object ParseNumber(string text, Type type)
 707386        {
 703386        {
 387#if !(NETFX_CORE || WINDOWS_APP || DOTNET5_1 || UAP10_0 || NETSTANDARD)
 388            switch (Type.GetTypeCode(GetNonNullableType(type)))
 389            {
 433                    break;
 434            }
 435#else
 707436            var tp = GetNonNullableType(type);
 707437             if (tp == typeof(SByte))
 703436            var tp = GetNonNullableType(type);
 703437            if (tp == typeof(SByte))
 0438            {
 439                sbyte sb;
 0440                 if (sbyte.TryParse(text, out sb)) return sb;
 0440                if (sbyte.TryParse(text, out sb)) return sb;
 0441            }
 707442             else if (tp == typeof(Byte))
 703442            else if (tp == typeof(Byte))
 0443            {
 444                byte b;
 0445                 if (byte.TryParse(text, out b)) return b;
 0445                if (byte.TryParse(text, out b)) return b;
 0446            }
 707447             else if (tp == typeof(Int16))
 703447            else if (tp == typeof(Int16))
 0448            {
 449                short s;
 0450                 if (short.TryParse(text, out s)) return s;
 0450                if (short.TryParse(text, out s)) return s;
 0451            }
 707452             else if (tp == typeof(UInt16))
 703452            else if (tp == typeof(UInt16))
 0453            {
 454                ushort us;
 0455                 if (ushort.TryParse(text, out us)) return us;
 0455                if (ushort.TryParse(text, out us)) return us;
 0456            }
 707457             else if (tp == typeof(Int32))
 703457            else if (tp == typeof(Int32))
 150458            {
 459                int i;
 294460                 if (int.TryParse(text, out i)) return i;
 294460                if (int.TryParse(text, out i)) return i;
 6461            }
 557462             else if (tp == typeof(UInt32))
 553462            else if (tp == typeof(UInt32))
 31463            {
 464                uint ui;
 62465                 if (uint.TryParse(text, out ui)) return ui;
 62465                if (uint.TryParse(text, out ui)) return ui;
 0466            }
 526467             else if (tp == typeof(Int64))
 522467            else if (tp == typeof(Int64))
 96468            {
 469                long l;
 186470                 if (long.TryParse(text, out l)) return l;
 186470                if (long.TryParse(text, out l)) return l;
 6471            }
 430472             else if (tp == typeof(UInt64))
 426472            else if (tp == typeof(UInt64))
 45473            {
 474                ulong ul;
 89475                 if (ulong.TryParse(text, out ul)) return ul;
 89475                if (ulong.TryParse(text, out ul)) return ul;
 1476            }
 385477             else if (tp == typeof(Single))
 381477            else if (tp == typeof(Single))
 116478            {
 479                float f;
 222480                 if (float.TryParse(text, out f)) return f;
 222480                if (float.TryParse(text, out f)) return f;
 10481            }
 269482             else if (tp == typeof(Double))
 265482            else if (tp == typeof(Double))
 128483            {
 484                double d;
 246485                 if (double.TryParse(text, out d)) return d;
 246485                if (double.TryParse(text, out d)) return d;
 10486            }
 141487             else if (tp == typeof(Decimal))
 137487            else if (tp == typeof(Decimal))
 121488            {
 489                decimal e;
 232490                 if (decimal.TryParse(text, out e)) return e;
 232490                if (decimal.TryParse(text, out e)) return e;
 10491            }
 492#endif
 63493            return null;
 707494        }
 59493            return null;
 703494        }
 495
 496        public static object ParseEnum(string value, Type type)
 3497        {
 3498             if (type.GetTypeInfo().IsEnum && Enum.IsDefined(type, value))
 9497        {
 9498            if (type.GetTypeInfo().IsEnum && Enum.IsDefined(type, value))
 1499            {
 1500                return Enum.Parse(type, value, true);
 501            }
 502
 2503            return null;
 3504        }
 8503            return null;
 9504        }
 505    }
 506}
-
+
diff --git a/report/combined.js b/report/coverlet/combined.js similarity index 81% rename from report/combined.js rename to report/coverlet/combined.js index 87f27330..8b4b4d1b 100644 --- a/report/combined.js +++ b/report/coverlet/combined.js @@ -255,13 +255,24 @@ terminal:!1});M.angular.bootstrap?console.log("WARNING: Tried to load angular mo }},setEnabled:function(e){v.ReactEventListener&&v.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var o=t,a=n(o),s=i.registrationNameDependencies[e],c=r.topLevelTypes,l=0,p=s.length;p>l;l++){var d=s[l];a.hasOwnProperty(d)&&a[d]||(d===c.topWheel?u("wheel")?v.ReactEventListener.trapBubbledEvent(c.topWheel,"wheel",o):u("mousewheel")?v.ReactEventListener.trapBubbledEvent(c.topWheel,"mousewheel",o):v.ReactEventListener.trapBubbledEvent(c.topWheel,"DOMMouseScroll",o):d===c.topScroll?u("scroll",!0)?v.ReactEventListener.trapCapturedEvent(c.topScroll,"scroll",o):v.ReactEventListener.trapBubbledEvent(c.topScroll,"scroll",v.ReactEventListener.WINDOW_HANDLE):d===c.topFocus||d===c.topBlur?(u("focus",!0)?(v.ReactEventListener.trapCapturedEvent(c.topFocus,"focus",o),v.ReactEventListener.trapCapturedEvent(c.topBlur,"blur",o)):u("focusin")&&(v.ReactEventListener.trapBubbledEvent(c.topFocus,"focusin",o),v.ReactEventListener.trapBubbledEvent(c.topBlur,"focusout",o)),a[c.topBlur]=!0,a[c.topFocus]=!0):f.hasOwnProperty(d)&&v.ReactEventListener.trapBubbledEvent(d,f[d],o),a[d]=!0)}},trapBubbledEvent:function(e,t,n){return v.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return v.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(!p){var e=s.refreshScrollValues;v.ReactEventListener.monitorScrollValue(e),p=!0}},eventNameDispatchConfigs:o.eventNameDispatchConfigs,registrationNameModules:o.registrationNameModules,putListener:o.putListener,getListener:o.getListener,deleteListener:o.deleteListener,deleteAllListeners:o.deleteAllListeners});t.exports=v},{"./EventConstants":15,"./EventPluginHub":17,"./EventPluginRegistry":18,"./ReactEventEmitterMixin":53,"./ViewportMetrics":91,"./isEventSupported":119,"./merge":128}],30:[function(e,t){"use strict";function n(e,t){this.forEachFunction=e,this.forEachContext=t}function r(e,t,n,r){var o=e;o.forEachFunction.call(o.forEachContext,t,r)}function o(e,t,o){if(null==e)return e;var i=n.getPooled(t,o);p(e,r,i),n.release(i)}function i(e,t,n){this.mapResult=e,this.mapFunction=t,this.mapContext=n}function a(e,t,n,r){var o=e,i=o.mapResult,a=!i.hasOwnProperty(n);if(a){var s=o.mapFunction.call(o.mapContext,t,r);i[n]=s}}function s(e,t,n){if(null==e)return e;var r={},o=i.getPooled(r,t,n);return p(e,a,o),i.release(o),r}function u(){return null}function c(e){return p(e,u,null)}var l=e("./PooledClass"),p=e("./traverseAllChildren"),d=(e("./warning"),l.twoArgumentPooler),f=l.threeArgumentPooler;l.addPoolingTo(n,d),l.addPoolingTo(i,f);var h={forEach:o,map:s,count:c};t.exports=h},{"./PooledClass":26,"./traverseAllChildren":138,"./warning":139}],31:[function(e,t){"use strict";var n=e("./ReactDescriptor"),r=e("./ReactOwner"),o=e("./ReactUpdates"),i=e("./invariant"),a=e("./keyMirror"),s=e("./merge"),u=a({MOUNTED:null,UNMOUNTED:null}),c=!1,l=null,p=null,d={injection:{injectEnvironment:function(e){i(!c),p=e.mountImageIntoNode,l=e.unmountIDFromEnvironment,d.BackendIDOperations=e.BackendIDOperations,c=!0}},LifeCycle:u,BackendIDOperations:null,Mixin:{isMounted:function(){return this._lifeCycleState===u.MOUNTED},setProps:function(e,t){var n=this._pendingDescriptor||this._descriptor;this.replaceProps(s(n.props,e),t)},replaceProps:function(e,t){i(this.isMounted()),i(0===this._mountDepth),this._pendingDescriptor=n.cloneAndReplaceProps(this._pendingDescriptor||this._descriptor,e),o.enqueueUpdate(this,t)},_setPropsInternal:function(e,t){var r=this._pendingDescriptor||this._descriptor;this._pendingDescriptor=n.cloneAndReplaceProps(r,s(r.props,e)),o.enqueueUpdate(this,t)},construct:function(e){this.props=e.props,this._owner=e._owner,this._lifeCycleState=u.UNMOUNTED,this._pendingCallbacks=null,this._descriptor=e,this._pendingDescriptor=null},mountComponent:function(e,t,n){i(!this.isMounted());var o=this._descriptor.props;if(null!=o.ref){var a=this._descriptor._owner;r.addComponentAsRefTo(this,o.ref,a)}this._rootNodeID=e,this._lifeCycleState=u.MOUNTED,this._mountDepth=n},unmountComponent:function(){i(this.isMounted());var e=this.props;null!=e.ref&&r.removeComponentAsRefFrom(this,e.ref,this._owner),l(this._rootNodeID),this._rootNodeID=null,this._lifeCycleState=u.UNMOUNTED},receiveComponent:function(e,t){i(this.isMounted()),this._pendingDescriptor=e,this.performUpdateIfNecessary(t)},performUpdateIfNecessary:function(e){if(null!=this._pendingDescriptor){var t=this._descriptor,n=this._pendingDescriptor;this._descriptor=n,this.props=n.props,this._owner=n._owner,this._pendingDescriptor=null,this.updateComponent(e,t)}},updateComponent:function(e,t){var n=this._descriptor;(n._owner!==t._owner||n.props.ref!==t.props.ref)&&(null!=t.props.ref&&r.removeComponentAsRefFrom(this,t.props.ref,t._owner),null!=n.props.ref&&r.addComponentAsRefTo(this,n.props.ref,n._owner))},mountComponentIntoNode:function(e,t,n){var r=o.ReactReconcileTransaction.getPooled();r.perform(this._mountComponentIntoNode,this,e,t,r,n),o.ReactReconcileTransaction.release(r)},_mountComponentIntoNode:function(e,t,n,r){var o=this.mountComponent(e,n,0);p(o,t,r)},isOwnedBy:function(e){return this._owner===e},getSiblingByRef:function(e){var t=this._owner;return t&&t.refs?t.refs[e]:null}}};t.exports=d},{"./ReactDescriptor":49,"./ReactOwner":62,"./ReactUpdates":74,"./invariant":118,"./keyMirror":124,"./merge":128}],32:[function(e,t){"use strict";var n=e("./ReactDOMIDOperations"),r=e("./ReactMarkupChecksum"),o=e("./ReactMount"),i=e("./ReactPerf"),a=e("./ReactReconcileTransaction"),s=e("./getReactRootElementInContainer"),u=e("./invariant"),c=e("./setInnerHTML"),l=1,p=9,d={ReactReconcileTransaction:a,BackendIDOperations:n,unmountIDFromEnvironment:function(e){o.purgeID(e)},mountImageIntoNode:i.measure("ReactComponentBrowserEnvironment","mountImageIntoNode",function(e,t,n){if(u(t&&(t.nodeType===l||t.nodeType===p)),n){if(r.canReuseMarkup(e,s(t)))return;u(t.nodeType!==p)}u(t.nodeType!==p),c(t,e)})};t.exports=d},{"./ReactDOMIDOperations":40,"./ReactMarkupChecksum":58,"./ReactMount":59,"./ReactPerf":63,"./ReactReconcileTransaction":69,"./getReactRootElementInContainer":112,"./invariant":118,"./setInnerHTML":134}],33:[function(e,t){"use strict";function n(e){var t=e._owner||null;return t&&t.constructor&&t.constructor.displayName?" Check the render method of `"+t.constructor.displayName+"`.":""}function r(e,t){for(var n in t)t.hasOwnProperty(n)&&D("function"==typeof t[n])}function o(e,t){var n=N.hasOwnProperty(t)?N[t]:null;A.hasOwnProperty(t)&&D(n===_.OVERRIDE_BASE),e.hasOwnProperty(t)&&D(n===_.DEFINE_MANY||n===_.DEFINE_MANY_MERGED)}function i(e){var t=e._compositeLifeCycleState;D(e.isMounted()||t===S.MOUNTING),D(t!==S.RECEIVING_STATE),D(t!==S.UNMOUNTING)}function a(e,t){D(!h.isValidFactory(t)),D(!h.isValidDescriptor(t));var n=e.prototype;for(var r in t){var i=t[r];if(t.hasOwnProperty(r))if(o(n,r),w.hasOwnProperty(r))w[r](e,i);else{var a=N.hasOwnProperty(r),s=n.hasOwnProperty(r),u=i&&i.__reactDontBind,p="function"==typeof i,d=p&&!a&&!s&&!u;if(d)n.__reactAutoBindMap||(n.__reactAutoBindMap={}),n.__reactAutoBindMap[r]=i,n[r]=i;else if(s){var f=N[r];D(a&&(f===_.DEFINE_MANY_MERGED||f===_.DEFINE_MANY)),f===_.DEFINE_MANY_MERGED?n[r]=c(n[r],i):f===_.DEFINE_MANY&&(n[r]=l(n[r],i))}else n[r]=i}}}function s(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in e,i=r;if(o){var a=e[n],s=typeof a,u=typeof r;D("function"===s&&"function"===u),i=l(a,r)}e[n]=i}}}function u(e,t){return D(e&&t&&"object"==typeof e&&"object"==typeof t),P(t,function(t,n){D(void 0===e[n]),e[n]=t}),e}function c(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);return null==n?r:null==r?n:u(n,r)}}function l(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}var p=e("./ReactComponent"),d=e("./ReactContext"),f=e("./ReactCurrentOwner"),h=e("./ReactDescriptor"),v=(e("./ReactDescriptorValidator"),e("./ReactEmptyComponent")),m=e("./ReactErrorUtils"),g=e("./ReactOwner"),y=e("./ReactPerf"),C=e("./ReactPropTransferer"),E=e("./ReactPropTypeLocations"),R=(e("./ReactPropTypeLocationNames"),e("./ReactUpdates")),M=e("./instantiateReactComponent"),D=e("./invariant"),x=e("./keyMirror"),b=e("./merge"),O=e("./mixInto"),P=(e("./monitorCodeUse"),e("./mapObject")),I=e("./shouldUpdateReactComponent"),_=(e("./warning"),x({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null})),T=[],N={mixins:_.DEFINE_MANY,statics:_.DEFINE_MANY,propTypes:_.DEFINE_MANY,contextTypes:_.DEFINE_MANY,childContextTypes:_.DEFINE_MANY,getDefaultProps:_.DEFINE_MANY_MERGED,getInitialState:_.DEFINE_MANY_MERGED,getChildContext:_.DEFINE_MANY_MERGED,render:_.DEFINE_ONCE,componentWillMount:_.DEFINE_MANY,componentDidMount:_.DEFINE_MANY,componentWillReceiveProps:_.DEFINE_MANY,shouldComponentUpdate:_.DEFINE_ONCE,componentWillUpdate:_.DEFINE_MANY,componentDidUpdate:_.DEFINE_MANY,componentWillUnmount:_.DEFINE_MANY,updateComponent:_.OVERRIDE_BASE},w={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n",this.tagName=e.toUpperCase()}var i=e("./CSSPropertyOperations"),a=e("./DOMProperty"),s=e("./DOMPropertyOperations"),u=e("./ReactBrowserComponentMixin"),c=e("./ReactComponent"),l=e("./ReactBrowserEventEmitter"),p=e("./ReactMount"),d=e("./ReactMultiChild"),f=e("./ReactPerf"),h=e("./escapeTextForBrowser"),v=e("./invariant"),m=e("./keyOf"),g=e("./merge"),y=e("./mixInto"),C=l.deleteListener,E=l.listenTo,R=l.registrationNameModules,M={string:!0,number:!0},D=m({style:null}),x=1;o.Mixin={mountComponent:f.measure("ReactDOMComponent","mountComponent",function(e,t,r){return c.Mixin.mountComponent.call(this,e,t,r),n(this.props),this._createOpenTagMarkupAndPutListeners(t)+this._createContentMarkup(t)+this._tagClose}),_createOpenTagMarkupAndPutListeners:function(e){var t=this.props,n=this._tagOpen;for(var o in t)if(t.hasOwnProperty(o)){var a=t[o];if(null!=a)if(R.hasOwnProperty(o))r(this._rootNodeID,o,a,e);else{o===D&&(a&&(a=t.style=g(t.style)),a=i.createMarkupForStyles(a));var u=s.createMarkupForProperty(o,a);u&&(n+=" "+u)}}if(e.renderToStaticMarkup)return n+">";var c=s.createMarkupForID(this._rootNodeID);return n+" "+c+">"},_createContentMarkup:function(e){var t=this.props.dangerouslySetInnerHTML;if(null!=t){if(null!=t.__html)return t.__html}else{var n=M[typeof this.props.children]?this.props.children:null,r=null!=n?null:this.props.children;if(null!=n)return h(n);if(null!=r){var o=this.mountChildren(r,e);return o.join("")}}return""},receiveComponent:function(e,t){(e!==this._descriptor||null==e._owner)&&c.Mixin.receiveComponent.call(this,e,t)},updateComponent:f.measure("ReactDOMComponent","updateComponent",function(e,t){n(this._descriptor.props),c.Mixin.updateComponent.call(this,e,t),this._updateDOMProperties(t.props,e),this._updateDOMChildren(t.props,e)}),_updateDOMProperties:function(e,t){var n,o,i,s=this.props;for(n in e)if(!s.hasOwnProperty(n)&&e.hasOwnProperty(n))if(n===D){var u=e[n];for(o in u)u.hasOwnProperty(o)&&(i=i||{},i[o]="")}else R.hasOwnProperty(n)?C(this._rootNodeID,n):(a.isStandardName[n]||a.isCustomAttribute(n))&&c.BackendIDOperations.deletePropertyByID(this._rootNodeID,n);for(n in s){var l=s[n],p=e[n];if(s.hasOwnProperty(n)&&l!==p)if(n===D)if(l&&(l=s.style=g(l)),p){for(o in p)!p.hasOwnProperty(o)||l&&l.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in l)l.hasOwnProperty(o)&&p[o]!==l[o]&&(i=i||{},i[o]=l[o])}else i=l;else R.hasOwnProperty(n)?r(this._rootNodeID,n,l,t):(a.isStandardName[n]||a.isCustomAttribute(n))&&c.BackendIDOperations.updatePropertyByID(this._rootNodeID,n,l)}i&&c.BackendIDOperations.updateStylesByID(this._rootNodeID,i)},_updateDOMChildren:function(e,t){var n=this.props,r=M[typeof e.children]?e.children:null,o=M[typeof n.children]?n.children:null,i=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,a=n.dangerouslySetInnerHTML&&n.dangerouslySetInnerHTML.__html,s=null!=r?null:e.children,u=null!=o?null:n.children,l=null!=r||null!=i,p=null!=o||null!=a;null!=s&&null==u?this.updateChildren(null,t):l&&!p&&this.updateTextContent(""),null!=o?r!==o&&this.updateTextContent(""+o):null!=a?i!==a&&c.BackendIDOperations.updateInnerHTMLByID(this._rootNodeID,a):null!=u&&this.updateChildren(u,t)},unmountComponent:function(){this.unmountChildren(),l.deleteAllListeners(this._rootNodeID),c.Mixin.unmountComponent.call(this)}},y(o,c.Mixin),y(o,o.Mixin),y(o,d.Mixin),y(o,u),t.exports=o},{"./CSSPropertyOperations":4,"./DOMProperty":10,"./DOMPropertyOperations":11,"./ReactBrowserComponentMixin":28,"./ReactBrowserEventEmitter":29,"./ReactComponent":31,"./ReactMount":59,"./ReactMultiChild":60,"./ReactPerf":63,"./escapeTextForBrowser":102,"./invariant":118,"./keyOf":125,"./merge":128,"./mixInto":131}],39:[function(e,t){"use strict";var n=e("./EventConstants"),r=e("./LocalEventTrapMixin"),o=e("./ReactBrowserComponentMixin"),i=e("./ReactCompositeComponent"),a=e("./ReactDOM"),s=a.form,u=i.createClass({displayName:"ReactDOMForm",mixins:[o,r],render:function(){return this.transferPropsTo(s(null,this.props.children))},componentDidMount:function(){this.trapBubbledEvent(n.topLevelTypes.topReset,"reset"),this.trapBubbledEvent(n.topLevelTypes.topSubmit,"submit")}});t.exports=u},{"./EventConstants":15,"./LocalEventTrapMixin":24,"./ReactBrowserComponentMixin":28,"./ReactCompositeComponent":33,"./ReactDOM":36}],40:[function(e,t){"use strict";var n=e("./CSSPropertyOperations"),r=e("./DOMChildrenOperations"),o=e("./DOMPropertyOperations"),i=e("./ReactMount"),a=e("./ReactPerf"),s=e("./invariant"),u=e("./setInnerHTML"),c={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},l={updatePropertyByID:a.measure("ReactDOMIDOperations","updatePropertyByID",function(e,t,n){var r=i.getNode(e);s(!c.hasOwnProperty(t)),null!=n?o.setValueForProperty(r,t,n):o.deleteValueForProperty(r,t)}),deletePropertyByID:a.measure("ReactDOMIDOperations","deletePropertyByID",function(e,t,n){var r=i.getNode(e);s(!c.hasOwnProperty(t)),o.deleteValueForProperty(r,t,n)}),updateStylesByID:a.measure("ReactDOMIDOperations","updateStylesByID",function(e,t){var r=i.getNode(e);n.setValueForStyles(r,t)}),updateInnerHTMLByID:a.measure("ReactDOMIDOperations","updateInnerHTMLByID",function(e,t){var n=i.getNode(e);u(n,t)}),updateTextContentByID:a.measure("ReactDOMIDOperations","updateTextContentByID",function(e,t){var n=i.getNode(e);r.updateTextContent(n,t)}),dangerouslyReplaceNodeWithMarkupByID:a.measure("ReactDOMIDOperations","dangerouslyReplaceNodeWithMarkupByID",function(e,t){var n=i.getNode(e);r.dangerouslyReplaceNodeWithMarkup(n,t)}),dangerouslyProcessChildrenUpdates:a.measure("ReactDOMIDOperations","dangerouslyProcessChildrenUpdates",function(e,t){for(var n=0;nl;l++){var f=s[l];if(f!==i&&f.form===i.form){var h=u.getID(f);c(h);var v=d[h];c(v),v.setState({checked:!1})}}}return t}});t.exports=f},{"./AutoFocusMixin":1,"./DOMPropertyOperations":11,"./LinkedValueUtils":23,"./ReactBrowserComponentMixin":28,"./ReactCompositeComponent":33,"./ReactDOM":36,"./ReactMount":59,"./invariant":118,"./merge":128}],43:[function(e,t){"use strict";var n=e("./ReactBrowserComponentMixin"),r=e("./ReactCompositeComponent"),o=e("./ReactDOM"),i=(e("./warning"),o.option),a=r.createClass({displayName:"ReactDOMOption",mixins:[n],componentWillMount:function(){},render:function(){return i(this.props,this.props.children)}});t.exports=a},{"./ReactBrowserComponentMixin":28,"./ReactCompositeComponent":33,"./ReactDOM":36,"./warning":139}],44:[function(e,t){"use strict";function n(e,t){if(null!=e[t])if(e.multiple){if(!Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to must be a scalar value if `multiple` is false.")}function r(e,t){var n,r,o,i=e.props.multiple,a=null!=t?t:e.state.value,s=e.getDOMNode().options;if(i)for(n={},r=0,o=a.length;o>r;++r)n[""+a[r]]=!0;else n=""+a;for(r=0,o=s.length;o>r;r++){var u=i?n.hasOwnProperty(s[r].value):s[r].value===n;u!==s[r].selected&&(s[r].selected=u)}}var o=e("./AutoFocusMixin"),i=e("./LinkedValueUtils"),a=e("./ReactBrowserComponentMixin"),s=e("./ReactCompositeComponent"),u=e("./ReactDOM"),c=e("./merge"),l=u.select,p=s.createClass({displayName:"ReactDOMSelect",mixins:[o,i.Mixin,a],propTypes:{defaultValue:n,value:n},getInitialState:function(){return{value:this.props.defaultValue||(this.props.multiple?[]:"")}},componentWillReceiveProps:function(e){!this.props.multiple&&e.multiple?this.setState({value:[this.state.value]}):this.props.multiple&&!e.multiple&&this.setState({value:this.state.value[0]})},shouldComponentUpdate:function(){return!this._isChanging},render:function(){var e=c(this.props);return e.onChange=this._handleChange,e.value=null,l(e,this.props.children)},componentDidMount:function(){r(this,i.getValue(this))},componentDidUpdate:function(e){var t=i.getValue(this),n=!!e.multiple,o=!!this.props.multiple;(null!=t||n!==o)&&r(this,t)},_handleChange:function(e){var t,n=i.getOnChange(this);n&&(this._isChanging=!0,t=n.call(this,e),this._isChanging=!1);var r;if(this.props.multiple){r=[];for(var o=e.target.options,a=0,s=o.length;s>a;a++)o[a].selected&&r.push(o[a].value)}else r=e.target.value;return this.setState({value:r}),t}});t.exports=p},{"./AutoFocusMixin":1,"./LinkedValueUtils":23,"./ReactBrowserComponentMixin":28,"./ReactCompositeComponent":33,"./ReactDOM":36,"./merge":128}],45:[function(e,t){"use strict";function n(e,t,n,r){return e===n&&t===r}function r(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var i=o.text.length,a=i+r;return{start:i,end:a}}function o(e){var t=window.getSelection();if(0===t.rangeCount)return null;var r=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,s=t.getRangeAt(0),u=n(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),c=u?0:s.toString().length,l=s.cloneRange();l.selectNodeContents(e),l.setEnd(s.startContainer,s.startOffset);var p=n(l.startContainer,l.startOffset,l.endContainer,l.endOffset),d=p?0:l.toString().length,f=d+c,h=document.createRange();h.setStart(r,o),h.setEnd(i,a);var v=h.collapsed;return h.detach(),{start:v?f:d,end:v?d:f}}function i(e,t){var n,r,o=document.selection.createRange().duplicate();"undefined"==typeof t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function a(e,t){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i="undefined"==typeof t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=u(e,o),l=u(e,i);if(s&&l){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(l.node,l.offset)):(p.setEnd(l.node,l.offset),n.addRange(p)),p.detach()}}var s=e("./ExecutionEnvironment"),u=e("./getNodeForCharacterOffset"),c=e("./getTextContentAccessor"),l=s.canUseDOM&&document.selection,p={getOffsets:l?r:o,setOffsets:l?i:a};t.exports=p},{"./ExecutionEnvironment":21,"./getNodeForCharacterOffset":111,"./getTextContentAccessor":113}],46:[function(e,t){"use strict";var n=e("./AutoFocusMixin"),r=e("./DOMPropertyOperations"),o=e("./LinkedValueUtils"),i=e("./ReactBrowserComponentMixin"),a=e("./ReactCompositeComponent"),s=e("./ReactDOM"),u=e("./invariant"),c=e("./merge"),l=(e("./warning"),s.textarea),p=a.createClass({displayName:"ReactDOMTextarea",mixins:[n,o.Mixin,i],getInitialState:function(){var e=this.props.defaultValue,t=this.props.children;null!=t&&(u(null==e),Array.isArray(t)&&(u(t.length<=1),t=t[0]),e=""+t),null==e&&(e="");var n=o.getValue(this);return{initialValue:""+(null!=n?n:e)}},shouldComponentUpdate:function(){return!this._isChanging},render:function(){var e=c(this.props);return u(null==e.dangerouslySetInnerHTML),e.defaultValue=null,e.value=null,e.onChange=this._handleChange,l(e,this.state.initialValue)},componentDidUpdate:function(){var e=o.getValue(this); if(null!=e){var t=this.getDOMNode();r.setValueForProperty(t,"value",""+e)}},_handleChange:function(e){var t,n=o.getOnChange(this);return n&&(this._isChanging=!0,t=n.call(this,e),this._isChanging=!1),this.setState({value:e.target.value}),t}});t.exports=p},{"./AutoFocusMixin":1,"./DOMPropertyOperations":11,"./LinkedValueUtils":23,"./ReactBrowserComponentMixin":28,"./ReactCompositeComponent":33,"./ReactDOM":36,"./invariant":118,"./merge":128,"./warning":139}],47:[function(e,t){"use strict";function n(){this.reinitializeTransaction()}var r=e("./ReactUpdates"),o=e("./Transaction"),i=e("./emptyFunction"),a=e("./mixInto"),s={initialize:i,close:function(){p.isBatchingUpdates=!1}},u={initialize:i,close:r.flushBatchedUpdates.bind(r)},c=[u,s];a(n,o.Mixin),a(n,{getTransactionWrappers:function(){return c}});var l=new n,p={isBatchingUpdates:!1,batchedUpdates:function(e,t,n){var r=p.isBatchingUpdates;p.isBatchingUpdates=!0,r?e(t,n):l.perform(e,null,t,n)}};t.exports=p},{"./ReactUpdates":74,"./Transaction":90,"./emptyFunction":100,"./mixInto":131}],48:[function(e,t){"use strict";function n(){x.EventEmitter.injectReactEventListener(D),x.EventPluginHub.injectEventPluginOrder(s),x.EventPluginHub.injectInstanceHandle(b),x.EventPluginHub.injectMount(O),x.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:_,EnterLeaveEventPlugin:u,ChangeEventPlugin:o,CompositionEventPlugin:a,MobileSafariClickEventPlugin:p,SelectEventPlugin:P,BeforeInputEventPlugin:r}),x.DOM.injectComponentClasses({button:m,form:g,img:y,input:C,option:E,select:R,textarea:M,html:N(v.html),head:N(v.head),body:N(v.body)}),x.CompositeComponent.injectMixin(d),x.DOMProperty.injectDOMPropertyConfig(l),x.DOMProperty.injectDOMPropertyConfig(T),x.EmptyComponent.injectEmptyComponent(v.noscript),x.Updates.injectReconcileTransaction(f.ReactReconcileTransaction),x.Updates.injectBatchingStrategy(h),x.RootIndex.injectCreateReactRootIndex(c.canUseDOM?i.createReactRootIndex:I.createReactRootIndex),x.Component.injectEnvironment(f)}var r=e("./BeforeInputEventPlugin"),o=e("./ChangeEventPlugin"),i=e("./ClientReactRootIndex"),a=e("./CompositionEventPlugin"),s=e("./DefaultEventPluginOrder"),u=e("./EnterLeaveEventPlugin"),c=e("./ExecutionEnvironment"),l=e("./HTMLDOMPropertyConfig"),p=e("./MobileSafariClickEventPlugin"),d=e("./ReactBrowserComponentMixin"),f=e("./ReactComponentBrowserEnvironment"),h=e("./ReactDefaultBatchingStrategy"),v=e("./ReactDOM"),m=e("./ReactDOMButton"),g=e("./ReactDOMForm"),y=e("./ReactDOMImg"),C=e("./ReactDOMInput"),E=e("./ReactDOMOption"),R=e("./ReactDOMSelect"),M=e("./ReactDOMTextarea"),D=e("./ReactEventListener"),x=e("./ReactInjection"),b=e("./ReactInstanceHandles"),O=e("./ReactMount"),P=e("./SelectEventPlugin"),I=e("./ServerReactRootIndex"),_=e("./SimpleEventPlugin"),T=e("./SVGDOMPropertyConfig"),N=e("./createFullPageComponent");t.exports={inject:n}},{"./BeforeInputEventPlugin":2,"./ChangeEventPlugin":6,"./ClientReactRootIndex":7,"./CompositionEventPlugin":8,"./DefaultEventPluginOrder":13,"./EnterLeaveEventPlugin":14,"./ExecutionEnvironment":21,"./HTMLDOMPropertyConfig":22,"./MobileSafariClickEventPlugin":25,"./ReactBrowserComponentMixin":28,"./ReactComponentBrowserEnvironment":32,"./ReactDOM":36,"./ReactDOMButton":37,"./ReactDOMForm":39,"./ReactDOMImg":41,"./ReactDOMInput":42,"./ReactDOMOption":43,"./ReactDOMSelect":44,"./ReactDOMTextarea":46,"./ReactDefaultBatchingStrategy":47,"./ReactEventListener":54,"./ReactInjection":55,"./ReactInstanceHandles":57,"./ReactMount":59,"./SVGDOMPropertyConfig":75,"./SelectEventPlugin":76,"./ServerReactRootIndex":77,"./SimpleEventPlugin":78,"./createFullPageComponent":97}],49:[function(e,t){"use strict";function n(e,t){if("function"==typeof t)for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];if("function"==typeof r){var o=r.bind(t);for(var i in r)r.hasOwnProperty(i)&&(o[i]=r[i]);e[n]=o}else e[n]=r}}var r=e("./ReactContext"),o=e("./ReactCurrentOwner"),i=e("./merge"),a=(e("./warning"),function(){});a.createFactory=function(e){var t=Object.create(a.prototype),s=function(e,n){null==e?e={}:"object"==typeof e&&(e=i(e));var a=arguments.length-1;if(1===a)e.children=n;else if(a>1){for(var s=Array(a),u=0;a>u;u++)s[u]=arguments[u+1];e.children=s}var c=Object.create(t);return c._owner=o.current,c._context=r.current,c.props=e,c};return s.prototype=t,s.type=e,t.type=e,n(s,e),t.constructor=s,s},a.cloneAndReplaceProps=function(e,t){var n=Object.create(e.constructor.prototype);return n._owner=e._owner,n._context=e._context,n.props=t,n},a.isValidFactory=function(e){return"function"==typeof e&&e.prototype instanceof a},a.isValidDescriptor=function(e){return e instanceof a},t.exports=a},{"./ReactContext":34,"./ReactCurrentOwner":35,"./merge":128,"./warning":139}],50:[function(e,t){"use strict";function n(){var e=p.current;return e&&e.constructor.displayName||void 0}function r(e,t){e._store.validated||null!=e.props.key||(e._store.validated=!0,i("react_key_warning",'Each child in an array should have a unique "key" prop.',e,t))}function o(e,t,n){m.test(e)&&i("react_numeric_key_warning","Child objects should have non-numeric keys so ordering is preserved.",t,n)}function i(e,t,r,o){var i=n(),a=o.displayName,s=i||a,u=f[e];if(!u.hasOwnProperty(s)){u[s]=!0,t+=i?" Check the render method of "+i+".":" Check the renderComponent call using <"+a+">.";var c=null;r._owner&&r._owner!==p.current&&(c=r._owner.constructor.displayName,t+=" It was passed a child from "+c+"."),t+=" See http://fb.me/react-warning-keys for more information.",d(e,{component:s,componentOwner:c}),console.warn(t)}}function a(){var e=n()||"";h.hasOwnProperty(e)||(h[e]=!0,d("react_object_map_children"))}function s(e,t){if(Array.isArray(e))for(var n=0;no;o++){t=e.ancestors[o];var a=l.getID(t)||"";v._handleTopLevel(e.topLevelType,t,a,e.nativeEvent)}}function i(e){var t=f(window);e(t)}var a=e("./EventListener"),s=e("./ExecutionEnvironment"),u=e("./PooledClass"),c=e("./ReactInstanceHandles"),l=e("./ReactMount"),p=e("./ReactUpdates"),d=e("./getEventTarget"),f=e("./getUnboundedScrollPosition"),h=e("./mixInto");h(r,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),u.addPoolingTo(r,u.twoArgumentPooler);var v={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:s.canUseDOM?window:null,setHandleTopLevel:function(e){v._handleTopLevel=e},setEnabled:function(e){v._enabled=!!e},isEnabled:function(){return v._enabled},trapBubbledEvent:function(e,t,n){var r=n;return r?a.listen(r,t,v.dispatchEvent.bind(null,e)):void 0},trapCapturedEvent:function(e,t,n){var r=n;return r?a.capture(r,t,v.dispatchEvent.bind(null,e)):void 0},monitorScrollValue:function(e){var t=i.bind(null,e);a.listen(window,"scroll",t),a.listen(window,"resize",t)},dispatchEvent:function(e,t){if(v._enabled){var n=r.getPooled(e,t);try{p.batchedUpdates(o,n)}finally{r.release(n)}}}};t.exports=v},{"./EventListener":16,"./ExecutionEnvironment":21,"./PooledClass":26,"./ReactInstanceHandles":57,"./ReactMount":59,"./ReactUpdates":74,"./getEventTarget":109,"./getUnboundedScrollPosition":114,"./mixInto":131}],55:[function(e,t){"use strict";var n=e("./DOMProperty"),r=e("./EventPluginHub"),o=e("./ReactComponent"),i=e("./ReactCompositeComponent"),a=e("./ReactDOM"),s=e("./ReactEmptyComponent"),u=e("./ReactBrowserEventEmitter"),c=e("./ReactPerf"),l=e("./ReactRootIndex"),p=e("./ReactUpdates"),d={Component:o.injection,CompositeComponent:i.injection,DOMProperty:n.injection,EmptyComponent:s.injection,EventPluginHub:r.injection,DOM:a.injection,EventEmitter:u.injection,Perf:c.injection,RootIndex:l.injection,Updates:p.injection};t.exports=d},{"./DOMProperty":10,"./EventPluginHub":17,"./ReactBrowserEventEmitter":29,"./ReactComponent":31,"./ReactCompositeComponent":33,"./ReactDOM":36,"./ReactEmptyComponent":51,"./ReactPerf":63,"./ReactRootIndex":70,"./ReactUpdates":74}],56:[function(e,t){"use strict";function n(e){return o(document.documentElement,e)}var r=e("./ReactDOMSelection"),o=e("./containsNode"),i=e("./focusNode"),a=e("./getActiveElement"),s={hasSelectionCapabilities:function(e){return e&&("INPUT"===e.nodeName&&"text"===e.type||"TEXTAREA"===e.nodeName||"true"===e.contentEditable)},getSelectionInformation:function(){var e=a();return{focusedElem:e,selectionRange:s.hasSelectionCapabilities(e)?s.getSelection(e):null}},restoreSelection:function(e){var t=a(),r=e.focusedElem,o=e.selectionRange;t!==r&&n(r)&&(s.hasSelectionCapabilities(r)&&s.setSelection(r,o),i(r))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&"INPUT"===e.nodeName){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=r.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,o=t.end;if("undefined"==typeof o&&(o=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(o,e.value.length);else if(document.selection&&"INPUT"===e.nodeName){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",o-n),i.select()}else r.setOffsets(e,t)}};t.exports=s},{"./ReactDOMSelection":45,"./containsNode":94,"./focusNode":104,"./getActiveElement":106}],57:[function(e,t){"use strict";function n(e){return d+e.toString(36)}function r(e,t){return e.charAt(t)===d||t===e.length}function o(e){return""===e||e.charAt(0)===d&&e.charAt(e.length-1)!==d}function i(e,t){return 0===t.indexOf(e)&&r(t,e.length)}function a(e){return e?e.substr(0,e.lastIndexOf(d)):""}function s(e,t){if(p(o(e)&&o(t)),p(i(e,t)),e===t)return e;for(var n=e.length+f,a=n;a=a;a++)if(r(e,a)&&r(t,a))i=a;else if(e.charAt(a)!==t.charAt(a))break;var s=e.substr(0,i);return p(o(s)),s}function c(e,t,n,r,o,u){e=e||"",t=t||"",p(e!==t);var c=i(t,e);p(c||i(e,t));for(var l=0,d=c?a:s,f=e;;f=d(f,t)){var v;if(o&&f===e||u&&f===t||(v=n(f,c,r)),v===!1||f===t)break;p(l++1){var t=e.indexOf(d,1);return t>-1?e.substr(0,t):e}return null},traverseEnterLeave:function(e,t,n,r,o){var i=u(e,t);i!==e&&c(e,i,n,r,!1,!0),i!==t&&c(i,t,n,o,!0,!1)},traverseTwoPhase:function(e,t,n){e&&(c("",e,t,n,!0,!1),c(e,"",t,n,!1,!0))},traverseAncestors:function(e,t,n){c("",e,t,n,!0,!1)},_getFirstCommonAncestorID:u,_getNextDescendantID:s,isAncestorIDOf:i,SEPARATOR:d};t.exports=v},{"./ReactRootIndex":70,"./invariant":118}],58:[function(e,t){"use strict";var n=e("./adler32"),r={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=n(e);return e.replace(">"," "+r.CHECKSUM_ATTR_NAME+'="'+t+'">')},canReuseMarkup:function(e,t){var o=t.getAttribute(r.CHECKSUM_ATTR_NAME);o=o&&parseInt(o,10);var i=n(e);return i===o}};t.exports=r},{"./adler32":93}],59:[function(e,t){"use strict";function n(e){var t=g(e);return t&&T.getID(t)}function r(e){var t=o(e);if(t)if(D.hasOwnProperty(t)){var n=D[t];n!==e&&(C(!s(n,t)),D[t]=e)}else D[t]=e;return t}function o(e){return e&&e.getAttribute&&e.getAttribute(M)||""}function i(e,t){var n=o(e);n!==t&&delete D[n],e.setAttribute(M,t),D[t]=e}function a(e){return D.hasOwnProperty(e)&&s(D[e],e)||(D[e]=T.findReactNodeByID(e)),D[e]}function s(e,t){if(e){C(o(e)===t);var n=T.findReactContainerForID(t);if(n&&m(n,e))return!0}return!1}function u(e){delete D[e]}function c(e){var t=D[e];return t&&s(t,e)?void(_=t):!1}function l(e){_=null,h.traverseAncestors(e,c);var t=_;return _=null,t}var p=e("./DOMProperty"),d=e("./ReactBrowserEventEmitter"),f=(e("./ReactCurrentOwner"),e("./ReactDescriptor")),h=e("./ReactInstanceHandles"),v=e("./ReactPerf"),m=e("./containsNode"),g=e("./getReactRootElementInContainer"),y=e("./instantiateReactComponent"),C=e("./invariant"),E=e("./shouldUpdateReactComponent"),R=(e("./warning"),h.SEPARATOR),M=p.ID_ATTRIBUTE_NAME,D={},x=1,b=9,O={},P={},I=[],_=null,T={_instancesByReactRootID:O,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){var o=t.props;return T.scrollMonitor(n,function(){e.replaceProps(o,r)}),e},_registerComponent:function(e,t){C(t&&(t.nodeType===x||t.nodeType===b)),d.ensureScrollValueMonitoring();var n=T.registerContainer(t);return O[n]=e,n},_renderNewRootComponent:v.measure("ReactMount","_renderNewRootComponent",function(e,t,n){var r=y(e),o=T._registerComponent(r,t);return r.mountComponentIntoNode(o,t,n),r}),renderComponent:function(e,t,r){C(f.isValidDescriptor(e));var o=O[n(t)];if(o){var i=o._descriptor;if(E(i,e))return T._updateRootComponent(o,e,t,r);T.unmountComponentAtNode(t)}var a=g(t),s=a&&T.isRenderedByReact(a),u=s&&!o,c=T._renderNewRootComponent(e,t,u);return r&&r.call(c),c},constructAndRenderComponent:function(e,t,n){return T.renderComponent(e(t),n)},constructAndRenderComponentByID:function(e,t,n){var r=document.getElementById(n);return C(r),T.constructAndRenderComponent(e,t,r)},registerContainer:function(e){var t=n(e);return t&&(t=h.getReactRootIDFromNodeID(t)),t||(t=h.createReactRootID()),P[t]=e,t},unmountComponentAtNode:function(e){var t=n(e),r=O[t];return r?(T.unmountComponentFromNode(r,e),delete O[t],delete P[t],!0):!1},unmountComponentFromNode:function(e,t){for(e.unmountComponent(),t.nodeType===b&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)},findReactContainerForID:function(e){var t=h.getReactRootIDFromNodeID(e),n=P[t];return n},findReactNodeByID:function(e){var t=T.findReactContainerForID(e);return T.findComponentRoot(t,e)},isRenderedByReact:function(e){if(1!==e.nodeType)return!1;var t=T.getID(e);return t?t.charAt(0)===R:!1},getFirstReactDOM:function(e){for(var t=e;t&&t.parentNode!==t;){if(T.isRenderedByReact(t))return t;t=t.parentNode}return null},findComponentRoot:function(e,t){var n=I,r=0,o=l(t)||e;for(n[0]=o.firstChild,n.length=1;r>",E={array:r("array"),bool:r("boolean"),func:r("function"),number:r("number"),object:r("object"),string:r("string"),any:o(),arrayOf:i,component:a(),instanceOf:s,objectOf:c,oneOf:u,oneOfType:l,renderable:p(),shape:d};t.exports=E},{"./ReactDescriptor":49,"./ReactPropTypeLocationNames":65,"./emptyFunction":100}],68:[function(e,t){"use strict";function n(){this.listenersToPut=[]}var r=e("./PooledClass"),o=e("./ReactBrowserEventEmitter"),i=e("./mixInto");i(n,{enqueuePutListener:function(e,t,n){this.listenersToPut.push({rootNodeID:e,propKey:t,propValue:n})},putListeners:function(){for(var e=0;e"+i+""},receiveComponent:function(e){var t=e.props;t!==this.props&&(this.props=t,o.BackendIDOperations.updateTextContentByID(this._rootNodeID,t))}}),t.exports=i.createFactory(u)},{"./DOMPropertyOperations":11,"./ReactBrowserComponentMixin":28,"./ReactComponent":31,"./ReactDescriptor":49,"./escapeTextForBrowser":102,"./mixInto":131}],74:[function(e,t){"use strict";function n(){d(R.ReactReconcileTransaction&&v)}function r(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=u.getPooled(null),this.reconcileTransaction=R.ReactReconcileTransaction.getPooled()}function o(e,t,r){n(),v.batchedUpdates(e,t,r)}function i(e,t){return e._mountDepth-t._mountDepth}function a(e){var t=e.dirtyComponentsLength;d(t===h.length),h.sort(i);for(var n=0;t>n;n++){var r=h[n];if(r.isMounted()){var o=r._pendingCallbacks;if(r._pendingCallbacks=null,r.performUpdateIfNecessary(e.reconcileTransaction),o)for(var a=0;a":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;t.exports=r},{}],103:[function(e,t){"use strict";function n(e,t,n){var r=e,o=!r.hasOwnProperty(n);o&&null!=t&&(r[n]=t)}function r(e){if(null==e)return e;var t={};return o(e,n,t),t}{var o=e("./traverseAllChildren");e("./warning")}t.exports=r},{"./traverseAllChildren":138,"./warning":139}],104:[function(e,t){"use strict";function n(e){e.disabled||e.focus()}t.exports=n},{}],105:[function(e,t){"use strict";var n=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=n},{}],106:[function(e,t){function n(){try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=n},{}],107:[function(e,t){"use strict";function n(e){if(e.key){var t=o[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n="charCode"in e?e.charCode:e.keyCode;return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?i[e.keyCode]||"Unidentified":void r(!1)}var r=e("./invariant"),o={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},i={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=n},{"./invariant":118}],108:[function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=o[e];return r?!!n[r]:!1}function r(){return n}var o={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=r},{}],109:[function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return 3===t.nodeType?t.parentNode:t}t.exports=n},{}],110:[function(e,t){function n(e){return o(!!i),p.hasOwnProperty(e)||(e="*"),a.hasOwnProperty(e)||(i.innerHTML="*"===e?"":"<"+e+">",a[e]=!i.firstChild),a[e]?p[e]:null}var r=e("./ExecutionEnvironment"),o=e("./invariant"),i=r.canUseDOM?document.createElement("div"):null,a={circle:!0,defs:!0,ellipse:!0,g:!0,line:!0,linearGradient:!0,path:!0,polygon:!0,polyline:!0,radialGradient:!0,rect:!0,stop:!0,text:!0},s=[1,'"],u=[1,"","
"],c=[3,"","
"],l=[1,"",""],p={"*":[1,"?
","
"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:s,option:s,caption:u,colgroup:u,tbody:u,tfoot:u,thead:u,td:c,th:c,circle:l,defs:l,ellipse:l,g:l,line:l,linearGradient:l,path:l,polygon:l,polyline:l,radialGradient:l,rect:l,stop:l,text:l};t.exports=n},{"./ExecutionEnvironment":21,"./invariant":118}],111:[function(e,t){"use strict";function n(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function r(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function o(e,t){for(var o=n(e),i=0,a=0;o;){if(3==o.nodeType){if(a=i+o.textContent.length,t>=i&&a>=t)return{node:o,offset:t-i};i=a}o=n(r(o))}}t.exports=o},{}],112:[function(e,t){"use strict";function n(e){return e?e.nodeType===r?e.documentElement:e.firstChild:null}var r=9;t.exports=n},{}],113:[function(e,t){"use strict";function n(){return!o&&r.canUseDOM&&(o="textContent"in document.documentElement?"textContent":"innerText"),o}var r=e("./ExecutionEnvironment"),o=null;t.exports=n},{"./ExecutionEnvironment":21}],114:[function(e,t){"use strict";function n(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=n},{}],115:[function(e,t){function n(e){return e.replace(r,"-$1").toLowerCase()}var r=/([A-Z])/g;t.exports=n},{}],116:[function(e,t){"use strict";function n(e){return r(e).replace(o,"-ms-")}var r=e("./hyphenate"),o=/^ms-/;t.exports=n},{"./hyphenate":115}],117:[function(e,t){"use strict";function n(e){return e&&"function"==typeof e.type&&"function"==typeof e.type.prototype.mountComponent&&"function"==typeof e.type.prototype.receiveComponent}function r(e){return o(n(e)),new e.type(e)}var o=e("./invariant");t.exports=r},{"./invariant":118}],118:[function(e,t){"use strict";var n=function(e,t,n,r,o,i,a,s){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,s],l=0;u=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return c[l++]}))}throw u.framesToPop=1,u}};t.exports=n},{}],119:[function(e,t){"use strict";function n(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,i=n in document;if(!i){var a=document.createElement("div");a.setAttribute(n,"return;"),i="function"==typeof a[n]}return!i&&r&&"wheel"===e&&(i=document.implementation.hasFeature("Events.wheel","3.0")),i}var r,o=e("./ExecutionEnvironment");o.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=n},{"./ExecutionEnvironment":21}],120:[function(e,t){function n(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=n},{}],121:[function(e,t){"use strict";function n(e){return e&&("INPUT"===e.nodeName&&r[e.type]||"TEXTAREA"===e.nodeName)}var r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=n},{}],122:[function(e,t){function n(e){return r(e)&&3==e.nodeType}var r=e("./isNode");t.exports=n},{"./isNode":120}],123:[function(e,t){"use strict";function n(e){e||(e="");var t,n=arguments.length;if(n>1)for(var r=1;n>r;r++)t=arguments[r],t&&(e+=" "+t);return e}t.exports=n},{}],124:[function(e,t){"use strict";var n=e("./invariant"),r=function(e){var t,r={};n(e instanceof Object&&!Array.isArray(e));for(t in e)e.hasOwnProperty(t)&&(r[t]=t);return r};t.exports=r},{"./invariant":118}],125:[function(e,t){var n=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=n},{}],126:[function(e,t){"use strict";function n(e,t,n){if(!e)return null;var r=0,o={};for(var i in e)e.hasOwnProperty(i)&&(o[i]=t.call(n,e[i],i,r++));return o}t.exports=n},{}],127:[function(e,t){"use strict";function n(e){var t={};return function(n){return t.hasOwnProperty(n)?t[n]:t[n]=e.call(this,n)}}t.exports=n},{}],128:[function(e,t){"use strict";var n=e("./mergeInto"),r=function(e,t){var r={};return n(r,e),n(r,t),r};t.exports=r},{"./mergeInto":130}],129:[function(e,t){"use strict";var n=e("./invariant"),r=e("./keyMirror"),o=36,i=function(e){return"object"!=typeof e||null===e},a={MAX_MERGE_DEPTH:o,isTerminal:i,normalizeMergeArg:function(e){return void 0===e||null===e?{}:e},checkMergeArrayArgs:function(e,t){n(Array.isArray(e)&&Array.isArray(t))},checkMergeObjectArgs:function(e,t){a.checkMergeObjectArg(e),a.checkMergeObjectArg(t)},checkMergeObjectArg:function(e){n(!i(e)&&!Array.isArray(e))},checkMergeIntoObjectArg:function(e){n(!(i(e)&&"function"!=typeof e||Array.isArray(e)))},checkMergeLevel:function(e){n(o>e)},checkArrayStrategy:function(e){n(void 0===e||e in a.ArrayStrategies)},ArrayStrategies:r({Clobber:!0,IndexByIndex:!0})};t.exports=a},{"./invariant":118,"./keyMirror":124}],130:[function(e,t){"use strict";function n(e,t){if(i(e),null!=t){o(t);for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}}var r=e("./mergeHelpers"),o=r.checkMergeObjectArg,i=r.checkMergeIntoObjectArg;t.exports=n},{"./mergeHelpers":129}],131:[function(e,t){"use strict";var n=function(e,t){var n;for(n in t)t.hasOwnProperty(n)&&(e.prototype[n]=t[n])};t.exports=n},{}],132:[function(e,t){"use strict";function n(e){r(e&&!/[^a-z0-9_]/.test(e))}var r=e("./invariant");t.exports=n},{"./invariant":118}],133:[function(e,t){"use strict";function n(e){return o(r.isValidDescriptor(e)),e}var r=e("./ReactDescriptor"),o=e("./invariant");t.exports=n},{"./ReactDescriptor":49,"./invariant":118}],134:[function(e,t){"use strict";var n=e("./ExecutionEnvironment"),r=function(e,t){e.innerHTML=t};if(n.canUseDOM){var o=document.createElement("div");o.innerHTML=" ",""===o.innerHTML&&(r=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),t.match(/^[ \r\n\t\f]/)||"<"===t[0]&&(-1!==t.indexOf("i;i++)o[i]=e[i];return o}var r=e("./invariant");t.exports=n},{"./invariant":118}],138:[function(e,t){"use strict";function n(e){return d[e]}function r(e,t){return e&&e.props&&null!=e.props.key?i(e.props.key):t.toString(36)}function o(e){return(""+e).replace(f,n)}function i(e){return"$"+o(e)}function a(e,t,n){return null==e?0:h(e,"",0,t,n)}var s=e("./ReactInstanceHandles"),u=e("./ReactTextComponent"),c=e("./invariant"),l=s.SEPARATOR,p=":",d={"=":"=0",".":"=1",":":"=2"},f=/[=.:]/g,h=function(e,t,n,o,a){var s=0;if(Array.isArray(e))for(var d=0;d":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttribute(c.xmlNs.qualifiedName)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.getDataArray=function(a){for(var b,c,d=[],e=0;ed;d++)a[c][d]=0;return a},c.orderOfMagnitude=function(a){return Math.floor(Math.log(Math.abs(a))/Math.LN10)},c.projectLength=function(a,b,d,e){var f=c.getAvailableHeight(a,e);return b/d.range*f},c.getAvailableHeight=function(a,b){return Math.max((c.stripUnit(b.height)||a.height())-2*b.chartPadding-b.axisX.offset,0)},c.getHighLow=function(a){var b,c,d={high:-Number.MAX_VALUE,low:Number.MAX_VALUE};for(b=0;bd.high&&(d.high=a[b][c]),a[b][c]=d.axisY.scaleMinSpace))break;i.step/=2}for(g=i.min,h=i.max,f=i.min;f<=i.max;f+=i.step)f+i.step=i.high&&(h-=i.step);for(i.min=g,i.max=h,i.range=i.max-i.min,i.values=[],f=i.min;f<=i.max;f+=i.step)i.values.push(f);return i},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b){var d=b.axisY?b.axisY.offset:0,e=b.axisX?b.axisX.offset:0;return{x1:b.chartPadding+d,y1:Math.max((c.stripUnit(b.height)||a.height())-b.chartPadding-e,b.chartPadding),x2:Math.max((c.stripUnit(b.width)||a.width())-b.chartPadding,b.chartPadding+d),y2:b.chartPadding,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}}},c.createLabel=function(a,b,c,d,e){if(e){var f=''+b+"";return a.foreignObject(f,c)}return a.elem("text",c,d).text(b)},c.createXAxis=function(b,d,e,f,g,h,i){d.labels.forEach(function(j,k){var l=g.axisX.labelInterpolationFnc(j,k),m=b.width()/(d.labels.length-(g.fullWidth?1:0)),n=g.axisX.offset,o=b.x1+m*k;if(l||0===l){if(g.axisX.showGrid){var p=e.elem("line",{x1:o,y1:b.y1,x2:o,y2:b.y2},[g.classNames.grid,g.classNames.horizontal].join(" "));h.emit("draw",{type:"grid",axis:"x",index:k,group:e,element:p,x1:o,y1:b.y1,x2:o,y2:b.y2})}if(g.axisX.showLabel){var q={x:o+g.axisX.labelOffset.x,y:b.y1+g.axisX.labelOffset.y+(i?5:20)},r=c.createLabel(f,""+l,{x:q.x,y:q.y,width:m,height:n,style:"overflow: visible;"},[g.classNames.label,g.classNames.horizontal].join(" "),i);h.emit("draw",{type:"label",axis:"x",index:k,group:f,element:r,text:""+l,x:q.x,y:q.y,width:m,height:n,get space(){return a.console.warn("EventEmitter: space is deprecated, use width or height instead."),this.width}})}}})},c.createYAxis=function(b,d,e,f,g,h,i){d.values.forEach(function(j,k){var l=g.axisY.labelInterpolationFnc(j,k),m=g.axisY.offset,n=b.height()/d.values.length,o=b.y1-n*k;if(l||0===l){if(g.axisY.showGrid){var p=e.elem("line",{x1:b.x1,y1:o,x2:b.x2,y2:o},[g.classNames.grid,g.classNames.vertical].join(" "));h.emit("draw",{type:"grid",axis:"y",index:k,group:e,element:p,x1:b.x1,y1:o,x2:b.x2,y2:o})}if(g.axisY.showLabel){var q={x:g.chartPadding+g.axisY.labelOffset.x+(i?-10:0),y:o+g.axisY.labelOffset.y+(i?-15:0)},r=c.createLabel(f,""+l,{x:q.x,y:q.y,width:m,height:n,style:"overflow: visible;"},[g.classNames.label,g.classNames.vertical].join(" "),i);h.emit("draw",{type:"label",axis:"y",index:k,group:f,element:r,text:""+l,x:q.x,y:q.y,width:m,height:n,get space(){return a.console.warn("EventEmitter: space is deprecated, use width or height instead."),this.height}})}}})},c.projectPoint=function(a,b,c,d,e){return{x:a.x1+a.width()/(c.length-(c.length>1&&e.fullWidth?1:0))*d,y:a.y1-a.height()*(c[d]-b.min)/(b.range+b.step)}},c.optionsProvider=function(b,d,e){function f(){var b=h;if(h=c.extend({},j),d)for(i=0;id;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4===d?f[3]={x:+a[0],y:+a[1]}:e-2===d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4===d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push([(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}}(window,document,a),function(a,b,c){"use strict";c.EventEmitter=function(){function a(a,b){d[a]=d[a]||[],d[a].push(b)}function b(a,b){d[a]&&(b?(d[a].splice(d[a].indexOf(b),1),0===d[a].length&&delete d[a]):delete d[a])}function c(a,b){d[a]&&d[a].forEach(function(a){a(b)}),d["*"]&&d["*"].forEach(function(c){c(a,b)})}var d=[];return{addEventHandler:a,removeEventHandler:b,emit:c}}}(window,document,a),function(a,b,c){"use strict";function d(a){var b=[];if(a.length)for(var c=0;c4)for(var o=c.catmullRom2bezier(l),p=0;pa.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,g,h=[],i=a.startAngle,j=c.getDataArray(this.data);this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart),b=c.createChartRect(this.svg,a,0,0),e=Math.min(b.width()/2,b.height()/2),g=a.total||j.reduce(function(a,b){return a+b},0),e-=a.donut?a.donutWidth/2:0,f=a.donut?e:e/2,f+=a.labelOffset;for(var k={x:b.x1+b.width()/2,y:b.y2+b.height()/2},l=1===this.data.series.filter(function(a){return 0!==a}).length,m=0;m=n-i?"0":"1",r=["M",p.x,p.y,"A",e,e,0,q,0,o.x,o.y];a.donut===!1&&r.push("L",k.x,k.y);var s=h[m].elem("path",{d:r.join(" ")},a.classNames.slice+(a.donut?" "+a.classNames.donut:""));if(s.attr({value:j[m]},c.xmlNs.uri),a.donut===!0&&s.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:j[m],totalDataSum:g,index:m,group:h[m],element:s,center:k,radius:e,startAngle:i,endAngle:n}),a.showLabel){var t=c.polarToCartesian(k.x,k.y,f,i+(n-i)/2),u=a.labelInterpolationFnc(this.data.labels?this.data.labels[m]:j[m],m),v=h[m].elem("text",{dx:t.x,dy:t.y,"text-anchor":d(k,t,a.labelDirection)},a.classNames.label).text(""+u);this.eventEmitter.emit("draw",{type:"label",index:m,group:h[m],element:v,text:""+u,x:t.x,y:t.y})}i=n}this.eventEmitter.emit("created",{chartRect:b,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie.super.constructor.call(this,a,b,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chart:"ct-chart-pie",series:"ct-series",slice:"ct-slice",donut:"ct-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelInterpolationFnc:c.noop,labelDirection:"neutral"};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); +!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { + var a = { version: "0.11.0" }; return function (a, b, c) { "use strict"; c.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, c.noop = function (a) { return a }, c.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, c.extend = function (a) { var b, d, e; for (a = a || {}, b = 1; b < arguments.length; b++) { d = arguments[b]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = c.extend(a[f], e) } return a }, c.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, c.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, c.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, c.querySelector = function (a) { return a instanceof Node ? a : b.querySelector(a) }, c.times = function (a) { return Array.apply(null, new Array(a)) }, c.sum = function (a, b) { return a + (b ? b : 0) }, c.mapMultiply = function (a) { return function (b) { return b * a } }, c.mapAdd = function (a) { return function (b) { return b + a } }, c.serialMap = function (a, b) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return c.times(e).forEach(function (c, e) { var f = a.map(function (a) { return a[e] }); d[e] = b.apply(null, f) }), d }, c.roundWithPrecision = function (a, b) { var d = Math.pow(10, b || c.precision); return Math.round(a * d) / d }, c.precision = 8, c.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, c.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, b, c.escapingMap[b]) }, a)) }, c.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(c.escapingMap).reduce(function (a, b) { return c.replaceAll(a, c.escapingMap[b], b) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (b) { } return a }, c.createSvg = function (a, b, d, e) { var f; return b = b || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(c.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new c.Svg("svg").attr({ width: b, height: d }).addClass(e), f._node.style.width = b, f._node.style.height = d, a.appendChild(f._node), f }, c.normalizeData = function (a, b, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = c.getDataArray({ series: a.series || [] }, b, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, c.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), b && c.reverseData(f.normalized), f }, c.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, c.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, c.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, c.getDataArray = function (a, b, d) { function e(a) { if (c.safeHasProperty(a, "value")) return e(a.value); if (c.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!c.isDataHoleValue(a)) { if (d) { var b = {}; return "string" == typeof d ? b[d] = c.getNumberOrUndefined(a) : b.y = c.getNumberOrUndefined(a), b.x = a.hasOwnProperty("x") ? c.getNumberOrUndefined(a.x) : b.x, b.y = a.hasOwnProperty("y") ? c.getNumberOrUndefined(a.y) : b.y, b } return c.getNumberOrUndefined(a) } } return a.series.map(e) }, c.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, c.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, c.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, c.projectLength = function (a, b, c) { return b / c.range * a }, c.getAvailableHeight = function (a, b) { return Math.max((c.quantity(b.height).value || a.height()) - (b.chartPadding.top + b.chartPadding.bottom) - b.axisX.offset, 0) }, c.getHighLow = function (a, b, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } b = c.extend({}, b, d ? b["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === b.high ? -Number.MAX_VALUE : +b.high, low: void 0 === b.low ? Number.MAX_VALUE : +b.low }, g = void 0 === b.high, h = void 0 === b.low; return (g || h) && e(a), (b.referenceValue || 0 === b.referenceValue) && (f.high = Math.max(b.referenceValue, f.high), f.low = Math.min(b.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, c.isNumeric = function (a) { return null !== a && isFinite(a) }, c.isFalseyButZero = function (a) { return !a && 0 !== a }, c.getNumberOrUndefined = function (a) { return c.isNumeric(a) ? +a : void 0 }, c.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, c.getMultiValue = function (a, b) { return c.isMultiValue(a) ? c.getNumberOrUndefined(a[b || "y"]) : c.getNumberOrUndefined(a) }, c.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, c.getBounds = function (a, b, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: b.high, low: b.low }; k.valueRange = k.high - k.low, k.oom = c.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = c.projectLength(a, k.step, k), m = l < d, n = e ? c.rho(k.range) : 0; if (e && c.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && c.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && c.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(c.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = c.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, c.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, c.createChartRect = function (a, b, d) { var e = !(!b.axisX && !b.axisY), f = e ? b.axisY.offset : 0, g = e ? b.axisX.offset : 0, h = a.width() || c.quantity(b.width).value || 0, i = a.height() || c.quantity(b.height).value || 0, j = c.normalizePadding(b.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === b.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === b.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, c.createGrid = function (a, b, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", c.extend({ type: "grid", axis: d, index: b, group: g, element: k }, j)) }, c.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, c.createLabel = function (a, d, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = d, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = b.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", c.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, c.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", c.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, c.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, c.optionsProvider = function (b, d, e) { function f(b) { var f = h; if (h = c.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = a.matchMedia(d[i][0]); g.matches && (h = c.extend(h, d[i][1])) } e && b && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = c.extend({}, b), k = []; if (!a.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = a.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return c.extend({}, h) } } }, c.splitIntoSegments = function (a, b, d) { var e = { increasingX: !1, fillHoles: !1 }; d = c.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === c.getMultiValue(b[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(b[h / 2])); return f } }(window, document, a), function (a, b, c) { "use strict"; c.Interpolation = {}, c.Interpolation.none = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e = new c.Svg.Path, f = !0, g = 0; g < b.length; g += 2) { var h = b[g], i = b[g + 1], j = d[g / 2]; void 0 !== c.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, c.Interpolation.simple = function (a) { var b = { divisor: 2, fillHoles: !1 }; a = c.extend({}, b, a); var d = 1 / Math.max(1, a.divisor); return function (b, e) { for (var f, g, h, i = new c.Svg.Path, j = 0; j < b.length; j += 2) { var k = b[j], l = b[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, c.Interpolation.cardinal = function (a) { var b = { tension: 1, fillHoles: !1 }; a = c.extend({}, b, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(b, g) { var h = c.splitIntoSegments(b, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(i) } if (b = h[0].pathCoordinates, g = h[0].valueData, b.length <= 4) return c.Interpolation.none()(b, g); for (var j, k = (new c.Svg.Path).move(b[0], b[1], !1, g[0]), l = 0, m = b.length; m - 2 * !j > l; l += 2) { var n = [{ x: +b[l - 2], y: +b[l - 1] }, { x: +b[l], y: +b[l + 1] }, { x: +b[l + 2], y: +b[l + 3] }, { x: +b[l + 4], y: +b[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +b[0], y: +b[1] } : m - 2 === l && (n[2] = { x: +b[0], y: +b[1] }, n[3] = { x: +b[2], y: +b[3] }) : n[0] = { x: +b[m - 2], y: +b[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +b[l], y: +b[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return c.Interpolation.none()([]) } }, c.Interpolation.monotoneCubic = function (a) { var b = { fillHoles: !1 }; return a = c.extend({}, b, a), function d(b, e) { var f = c.splitIntoSegments(b, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), c.Svg.Path.join(g) } if (b = f[0].pathCoordinates, e = f[0].valueData, b.length <= 4) return c.Interpolation.none()(b, e); var h, i, j = [], k = [], l = b.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = b[2 * h], k[h] = b[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new c.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return c.Interpolation.none()([]) } }, c.Interpolation.step = function (a) { var b = { postpone: !0, fillHoles: !1 }; return a = c.extend({}, b, a), function (b, d) { for (var e, f, g, h = new c.Svg.Path, i = 0; i < b.length; i += 2) { var j = b[i], k = b[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(window, document, a), function (a, b, c) { "use strict"; c.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function e(a, b) { var d = b || this.prototype || c.Class, e = Object.create(d); c.Class.cloneDefinitions(e, a); var f = function () { var a, b = e.constructor || function () { }; return a = this === c ? Object.create(e) : this, b.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function f() { var a = d(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } c.Class = { extend: e, cloneDefinitions: f } }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), b && (this.options = c.extend({}, d ? this.options : this.defaultOptions, b), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function e() { return this.initializeTimeoutId ? a.clearTimeout(this.initializeTimeoutId) : (a.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function f(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function g(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function h() { a.addEventListener("resize", this.resizeListener), this.optionsProvider = c.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function i(a, b, d, e, f) { this.container = c.querySelector(a), this.data = b || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = c.EventEmitter(), this.supportsForeignObject = c.Svg.isSupported("Extensibility"), this.supportsAnimations = c.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(h.bind(this), 0) } c.Base = c.Class.extend({ constructor: i, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: d, detach: e, on: f, off: g, version: c.version, supportsForeignObject: !1 }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, d, e, f, g) { a instanceof Element ? this._node = a : (this._node = b.createElementNS(c.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": c.namespaces.ct })), d && this.attr(d), e && this.addClass(e), f && (g && f._node.firstChild ? f._node.insertBefore(this._node, f._node.firstChild) : f._node.appendChild(this._node)) } function e(a, b) { return "string" == typeof a ? b ? this._node.getAttributeNS(b, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (b) { if (void 0 !== a[b]) if (b.indexOf(":") !== -1) { var d = b.split(":"); this._node.setAttributeNS(c.namespaces[d[0]], b, a[b]) } else this._node.setAttribute(b, a[b]) }.bind(this)), this) } function f(a, b, d, e) { return new c.Svg(a, b, d, this, e) } function g() { return this._node.parentNode instanceof SVGElement ? new c.Svg(this._node.parentNode) : null } function h() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new c.Svg(a) } function i(a) { var b = this._node.querySelector(a); return b ? new c.Svg(b) : null } function j(a) { var b = this._node.querySelectorAll(a); return b.length ? new c.Svg.List(b) : null } function k() { return this._node } function l(a, d, e, f) { if ("string" == typeof a) { var g = b.createElement("div"); g.innerHTML = a, a = g.firstChild } a.setAttribute("xmlns", c.namespaces.xmlns); var h = this.elem("foreignObject", d, e, f); return h._node.appendChild(a), h } function m(a) { return this._node.appendChild(b.createTextNode(a)), this } function n() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function o() { return this._node.parentNode.removeChild(this._node), this.parent() } function p(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function q(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function r() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function s(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function t(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function u() { return this._node.setAttribute("class", ""), this } function v() { return this._node.getBoundingClientRect().height } function w() { return this._node.getBoundingClientRect().width } function x(a, b, d) { return void 0 === b && (b = !0), Object.keys(a).forEach(function (e) { function f(a, b) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : c.Svg.Easing[a.easing], delete a.easing), a.begin = c.ensureUnit(a.begin, "ms"), a.dur = c.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), b && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = c.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", c.extend({ attributeName: e }, a)), b && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), b && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], b) }.bind(this)), this } function y(a) { var b = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new c.Svg(a[d])); Object.keys(c.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { b[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return b.svgElements.forEach(function (b) { c.Svg.prototype[a].apply(b, d) }), b } }) } c.Svg = c.Class.extend({ constructor: d, attr: e, elem: f, parent: g, root: h, querySelector: i, querySelectorAll: j, getNode: k, foreignObject: l, text: m, empty: n, remove: o, replace: p, append: q, classes: r, addClass: s, removeClass: t, removeAllClasses: u, height: v, width: w, animate: x }), c.Svg.isSupported = function (a) { return b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; c.Svg.Easing = z, c.Svg.List = c.Class.extend({ constructor: y }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e, f, g) { var h = c.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, b, g ? { data: g } : {}); d.splice(e, 0, h) } function e(a, b) { a.forEach(function (c, d) { u[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function f(a, b) { this.pathElements = [], this.pos = 0, this.close = a, this.options = c.extend({}, v, b) } function g(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function h(a) { return this.pathElements.splice(this.pos, a), this } function i(a, b, c, e) { return d("M", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function j(a, b, c, e) { return d("L", { x: +a, y: +b }, this.pathElements, this.pos++, c, e), this } function k(a, b, c, e, f, g, h, i) { return d("C", { x1: +a, y1: +b, x2: +c, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function l(a, b, c, e, f, g, h, i, j) { return d("A", { rx: +a, ry: +b, xAr: +c, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function m(a) { var b = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === b[b.length - 1][0].toUpperCase() && b.pop(); var d = b.map(function (a) { var b = a.shift(), d = u[b.toLowerCase()]; return c.extend({ command: b }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function n() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = u[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function o(a, b) { return e(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function p(a, b) { return e(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function q(a) { return e(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function r(a) { var b = new c.Svg.Path(a || this.close); return b.pos = this.pos, b.pathElements = this.pathElements.slice().map(function (a) { return c.extend({}, a) }), b.options = c.extend({}, this.options), b } function s(a) { var b = [new c.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== b[b.length - 1].pathElements.length && b.push(new c.Svg.Path), b[b.length - 1].pathElements.push(d) }), b } function t(a, b, d) { for (var e = new c.Svg.Path(b, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var u = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, v = { accuracy: 3 }; c.Svg.Path = c.Class.extend({ constructor: f, position: g, remove: h, move: i, line: j, curve: k, arc: l, scale: o, translate: p, transform: q, parse: m, stringify: n, clone: r, splitByCommand: s }), c.Svg.Path.elementDescriptions = u, c.Svg.Path.join = t }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c, d) { this.units = a, this.counterUnits = a === f.x ? f.y : f.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function e(a, b, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), c.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && c.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && c.createLabel(j, l, k, i, this, g.offset, m, b, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var f = { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }; c.Axis = c.Class.extend({ constructor: d, createGridAndLabels: e, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), c.Axis.units = f }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.bounds = c.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, c.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } c.AutoScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { var f = e.highLow || c.getHighLow(b, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || c.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, c.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function e(a) { return this.axisLength * (+c.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } c.FixedScaleAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, d, e) { c.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function e(a, b) { return this.stepLength * b } c.StepAxis = c.Axis.extend({ constructor: d, projectValue: e }) }(window, document, a), function (a, b, c) { "use strict"; function d(a) { var b = c.normalizeData(this.data, a.reverseData, !0); this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, e, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = c.createChartRect(this.svg, a, f.padding); d = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, j, c.extend({}, a.axisX, { ticks: b.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, j, a.axisX), e = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, j, c.extend({}, a.axisY, { high: c.isNumeric(a.high) ? a.high : a.axisY.high, low: c.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), e.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (f, g) { var i = h.elem("g"); i.attr({ "ct:series-name": f.name, "ct:meta": c.serialize(f.meta) }), i.addClass([a.classNames.series, f.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var k = [], l = []; b.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, b.normalized.series[g]), y: j.y1 - e.projectValue(a, h, b.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: c.getMetaData(f, h) }) }.bind(this)); var m = { lineSmooth: c.getSeriesOption(f, a, "lineSmooth"), showPoint: c.getSeriesOption(f, a, "showPoint"), showLine: c.getSeriesOption(f, a, "showLine"), showArea: c.getSeriesOption(f, a, "showArea"), areaBase: c.getSeriesOption(f, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? c.Interpolation.monotoneCubic() : c.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (b) { var h = i.elem("line", { x1: b.x, y1: b.y, x2: b.x + .01, y2: b.y }, a.classNames.point).attr({ "ct:value": [b.data.value.x, b.data.value.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(b.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: b.data.value, index: b.data.valueIndex, meta: b.data.meta, series: f, seriesIndex: g, axisX: d, axisY: e, group: i, element: h, x: b.x, y: b.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: b.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: f, seriesIndex: g, seriesMeta: f.meta, axisX: d, axisY: e, group: i, element: p }) } if (m.showArea && e.range) { var q = Math.max(Math.min(m.areaBase, e.range.max), e.range.min), r = j.y1 - e.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (c) { var h = i.elem("path", { d: c.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: b.normalized.series[g], path: c.clone(), series: f, seriesIndex: g, axisX: d, axisY: e, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: e.bounds, chartRect: j, axisX: d, axisY: e, svg: this.svg, options: a }) } function e(a, b, d, e) { c.Line["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Line = c.Base.extend({ constructor: e, createChart: d }) }(window, document, a), function (a, b, c) { + "use strict"; function d(a) { + var b, d; a.distributeSeries ? (b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), b.normalized.series = b.normalized.series.map(function (a) { return [a] })) : b = c.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = c.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var e = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); if (a.stackBars && 0 !== b.normalized.series.length) { + var i = c.serialMap(b.normalized.series, function () { + return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) + }); d = c.getHighLow([i], a, a.horizontalBars ? "x" : "y") + } else d = c.getHighLow(b.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = c.createChartRect(this.svg, a, f.padding); k = a.distributeSeries && a.stackBars ? b.normalized.labels.slice(0, 1) : b.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new c.AutoScaleAxis(c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, c.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new c.StepAxis(c.Axis.units.y, b.normalized.series, o, { ticks: k }) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new c.StepAxis(c.Axis.units.x, b.normalized.series, o, { ticks: k }) : a.axisX.type.call(c, c.Axis.units.x, b.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new c.AutoScaleAxis(c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(c, c.Axis.units.y, b.normalized.series, o, c.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(e, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && c.createGridBackground(e, o, a.classNames.gridBackground, this.eventEmitter), b.raw.series.forEach(function (d, e) { var f, h, i = e - (b.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / b.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / b.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": c.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + c.alphaNumerate(e)].join(" ")), b.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, b.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, b.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, b.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, b.normalized.series[e]) }, l instanceof c.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = c.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(c.isNumeric).join(","), "ct:meta": c.serialize(w) }), this.eventEmitter.emit("draw", c.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) + } function e(a, b, d, e) { c.Bar["super"].constructor.call(this, a, b, f, c.extend({}, f, d), e) } var f = { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: c.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }; c.Bar = c.Base.extend({ constructor: e, createChart: d }) + }(window, document, a), function (a, b, c) { "use strict"; function d(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function e(a) { var b, e, f, h, i, j = c.normalizeData(this.data), k = [], l = a.startAngle; this.svg = c.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = c.createChartRect(this.svg, a, g.padding), f = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = c.quantity(a.donutWidth); "%" === m.unit && (m.value *= f / 100), f -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? f : "center" === a.labelPosition ? 0 : a.donutSolid ? f - m.value / 2 : f / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (b = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, g) { if (0 !== j.normalized.series[g] || !a.ignoreEmptyValues) { k[g].attr({ "ct:series-name": e.name }), k[g].addClass([a.classNames.series, e.className || a.classNames.series + "-" + c.alphaNumerate(g)].join(" ")); var p = i > 0 ? l + j.normalized.series[g] / i * 360 : 0, q = Math.max(0, l - (0 === g || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = c.polarToCartesian(n.x, n.y, f, q), v = c.polarToCartesian(n.x, n.y, f, p), w = new c.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(f, f, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = f - m.value, r = c.polarToCartesian(n.x, n.y, t, l - (0 === g || o ? 0 : .2)), s = c.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[g].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[g], "ct:meta": c.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[g], totalDataSum: i, index: g, meta: e.meta, series: e, group: k[g], element: y, path: w.clone(), center: n, radius: f, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : c.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !c.isFalseyButZero(j.normalized.labels[g]) ? j.normalized.labels[g] : j.normalized.series[g]; var B = a.labelInterpolationFnc(A, g); if (B || 0 === B) { var C = b.elem("text", { dx: z.x, dy: z.y, "text-anchor": d(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: g, group: b, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function f(a, b, d, e) { c.Pie["super"].constructor.call(this, a, b, g, c.extend({}, g, d), e) } var g = { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: c.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }; c.Pie = c.Base.extend({ constructor: f, createChart: e, determineAnchorPosition: d }) }(window, document, a), a +}); /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */ window.matchMedia || (window.matchMedia = function() { @@ -312,65 +323,74 @@ window.matchMedia || (window.matchMedia = function() { var assemblies = [ { - "name" : "Microsoft.EntityFrameworkCore.DynamicLinq", - "classes" : [ - { "name" : "Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm", "coveredLines" : 0, "uncoveredLines" : 0, "coverableLines" : 0, "totalLines" : 0, "coverageType" : "MethodCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm", "coveredLines" : 96, "uncoveredLines" : 42, "coverableLines" : 138, "totalLines" : 654, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 5, "totalBranches" : 10, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm", "coveredLines" : 0, "uncoveredLines" : 22, "coverableLines" : 22, "totalLines" : 51, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 6, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Res", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_Res.htm", "coveredLines" : 0, "uncoveredLines" : 0, "coverableLines" : 0, "totalLines" : 0, "coverageType" : "MethodCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Validation.Check", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm", "coveredLines" : 11, "uncoveredLines" : 60, "coverableLines" : 71, "totalLines" : 139, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 4, "totalBranches" : 20, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Validation.CoreStrings", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm", "coveredLines" : 0, "uncoveredLines" : 12, "coverableLines" : 12, "totalLines" : 41, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Reflection.CustomIntrospectionExtensions", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm", "coveredLines" : 0, "uncoveredLines" : 3, "coverableLines" : 3, "totalLines" : 39, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Reflection.CustomTypeBuilderExtensions", "reportPath" : "Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm", "coveredLines" : 0, "uncoveredLines" : 3, "coverableLines" : 3, "totalLines" : 35, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - ]}, + "name": "Microsoft.EntityFrameworkCore.DynamicLinq", + "classes": [ + { "name": "Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_DynamicFunctions.htm", "coveredLines": 0, "uncoveredLines": 2, "coverableLines": 2, "totalLines": 51, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_EntityFrameworkDynamicQueryableExtensions.htm", "coveredLines": 96, "uncoveredLines": 42, "coverableLines": 138, "totalLines": 654, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 7, "totalBranches": 12, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_LinqProviderExtensions.htm", "coveredLines": 0, "uncoveredLines": 22, "coverableLines": 22, "totalLines": 51, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 6, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Validation.Check", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_Check.htm", "coveredLines": 11, "uncoveredLines": 60, "coverableLines": 71, "totalLines": 139, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 4, "totalBranches": 24, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Validation.CoreStrings", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_CoreStrings.htm", "coveredLines": 0, "uncoveredLines": 12, "coverableLines": 12, "totalLines": 41, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Reflection.CustomIntrospectionExtensions", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_CustomIntrospectionExtensions.htm", "coveredLines": 0, "uncoveredLines": 3, "coverableLines": 3, "totalLines": 39, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Reflection.CustomTypeBuilderExtensions", "reportPath": "Microsoft.EntityFrameworkCore.DynamicLinq_CustomTypeBuilderExtensions.htm", "coveredLines": 0, "uncoveredLines": 3, "coverableLines": 3, "totalLines": 35, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + ]}, { - "name" : "System.Linq.Dynamic.Core", - "classes" : [ - { "name" : "System.Linq.Dynamic.Core.AssemblyBuilderFactory", "reportPath" : "System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 25, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider", "reportPath" : "System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm", "coveredLines" : 23, "uncoveredLines" : 2, "coverableLines" : 25, "totalLines" : 95, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 1, "totalBranches" : 2, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider", "reportPath" : "System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm", "coveredLines" : 0, "uncoveredLines" : 9, "coverableLines" : 9, "totalLines" : 34, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 2, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.CustomTypeProviders.DynamicLinqTypeAttribute", "reportPath" : "System.Linq.Dynamic.Core_DynamicLinqTypeAttribute.htm", "coveredLines" : 0, "uncoveredLines" : 0, "coverableLines" : 0, "totalLines" : 0, "coverageType" : "MethodCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DefaultAssemblyHelper", "reportPath" : "System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm", "coveredLines" : 0, "uncoveredLines" : 2, "coverableLines" : 2, "totalLines" : 44, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicClass", "reportPath" : "System.Linq.Dynamic.Core_DynamicClass.htm", "coveredLines" : 5, "uncoveredLines" : 60, "coverableLines" : 65, "totalLines" : 178, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 10, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicClassFactory", "reportPath" : "System.Linq.Dynamic.Core_DynamicClassFactory.htm", "coveredLines" : 204, "uncoveredLines" : 15, "coverableLines" : 219, "totalLines" : 390, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 27, "totalBranches" : 34, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions", "reportPath" : "System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm", "coveredLines" : 0, "uncoveredLines" : 32, "coverableLines" : 32, "totalLines" : 106, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicEnumerableExtensions", "reportPath" : "System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm", "coveredLines" : 37, "uncoveredLines" : 0, "coverableLines" : 37, "totalLines" : 135, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicExpressionParser", "reportPath" : "System.Linq.Dynamic.Core_DynamicExpressionParser.htm", "coveredLines" : 38, "uncoveredLines" : 16, "coverableLines" : 54, "totalLines" : 242, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicGetMemberBinder", "reportPath" : "System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm", "coveredLines" : 0, "uncoveredLines" : 11, "coverableLines" : 11, "totalLines" : 34, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 2, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicOrdering", "reportPath" : "System.Linq.Dynamic.Core_DynamicOrdering.htm", "coveredLines" : 0, "uncoveredLines" : 0, "coverableLines" : 0, "totalLines" : 0, "coverageType" : "MethodCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicProperty", "reportPath" : "System.Linq.Dynamic.Core_DynamicProperty.htm", "coveredLines" : 7, "uncoveredLines" : 0, "coverableLines" : 7, "totalLines" : 35, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.DynamicQueryableExtensions", "reportPath" : "System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm", "coveredLines" : 731, "uncoveredLines" : 18, "coverableLines" : 749, "totalLines" : 2048, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 28, "totalBranches" : 34, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Exceptions.ParseException", "reportPath" : "System.Linq.Dynamic.Core_ParseException.htm", "coveredLines" : 4, "uncoveredLines" : 4, "coverableLines" : 8, "totalLines" : 66, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.ExtensibilityPoint", "reportPath" : "System.Linq.Dynamic.Core_ExtensibilityPoint.htm", "coveredLines" : 1, "uncoveredLines" : 0, "coverableLines" : 1, "totalLines" : 17, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions", "reportPath" : "System.Linq.Dynamic.Core_LinqProviderExtensions.htm", "coveredLines" : 19, "uncoveredLines" : 3, "coverableLines" : 22, "totalLines" : 51, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 5, "totalBranches" : 6, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.GroupResult", "reportPath" : "System.Linq.Dynamic.Core_GroupResult.htm", "coveredLines" : 7, "uncoveredLines" : 0, "coverableLines" : 7, "totalLines" : 47, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.PagedResult", "reportPath" : "System.Linq.Dynamic.Core_PagedResult.htm", "coveredLines" : 5, "uncoveredLines" : 0, "coverableLines" : 5, "totalLines" : 64, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.PagedResult`1", "reportPath" : "System.Linq.Dynamic.Core_PagedResult_1.htm", "coveredLines" : 1, "uncoveredLines" : 0, "coverableLines" : 1, "totalLines" : 64, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.ParameterExpressionHelper", "reportPath" : "System.Linq.Dynamic.Core_ParameterExpressionHelper.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 12, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper", "reportPath" : "System.Linq.Dynamic.Core_ConstantExpressionHelper.htm", "coveredLines" : 14, "uncoveredLines" : 0, "coverableLines" : 14, "totalLines" : 29, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 2, "totalBranches" : 2, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.Constants", "reportPath" : "System.Linq.Dynamic.Core_Constants.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 11, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.ExpressionHelper", "reportPath" : "System.Linq.Dynamic.Core_ExpressionHelper.htm", "coveredLines" : 120, "uncoveredLines" : 5, "coverableLines" : 125, "totalLines" : 199, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 62, "totalBranches" : 88, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.ExpressionParser", "reportPath" : "System.Linq.Dynamic.Core_ExpressionParser.htm", "coveredLines" : 996, "uncoveredLines" : 194, "coverableLines" : 1190, "totalLines" : 1824, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 375, "totalBranches" : 497, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.ExpressionPromoter", "reportPath" : "System.Linq.Dynamic.Core_ExpressionPromoter.htm", "coveredLines" : 48, "uncoveredLines" : 3, "coverableLines" : 51, "totalLines" : 101, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 26, "totalBranches" : 28, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.KeywordsHelper", "reportPath" : "System.Linq.Dynamic.Core_KeywordsHelper.htm", "coveredLines" : 41, "uncoveredLines" : 0, "coverableLines" : 41, "totalLines" : 67, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 3, "totalBranches" : 4, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper", "reportPath" : "System.Linq.Dynamic.Core_PredefinedTypesHelper.htm", "coveredLines" : 45, "uncoveredLines" : 12, "coverableLines" : 57, "totalLines" : 99, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 2, "totalBranches" : 4, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData", "reportPath" : "System.Linq.Dynamic.Core_MethodData.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 12, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder", "reportPath" : "System.Linq.Dynamic.Core_MethodFinder.htm", "coveredLines" : 142, "uncoveredLines" : 6, "coverableLines" : 148, "totalLines" : 229, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 51, "totalBranches" : 56, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Parser.TypeHelper", "reportPath" : "System.Linq.Dynamic.Core_TypeHelper.htm", "coveredLines" : 194, "uncoveredLines" : 18, "coverableLines" : 212, "totalLines" : 506, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 108, "totalBranches" : 124, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.ParsingConfig", "reportPath" : "System.Linq.Dynamic.Core_ParsingConfig.htm", "coveredLines" : 12, "uncoveredLines" : 0, "coverableLines" : 12, "totalLines" : 52, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 1, "totalBranches" : 2, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Res", "reportPath" : "System.Linq.Dynamic.Core_Res.htm", "coveredLines" : 0, "uncoveredLines" : 0, "coverableLines" : 0, "totalLines" : 0, "coverageType" : "MethodCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Tokenizer.TextParser", "reportPath" : "System.Linq.Dynamic.Core_TextParser.htm", "coveredLines" : 303, "uncoveredLines" : 3, "coverableLines" : 306, "totalLines" : 447, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 128, "totalBranches" : 136, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.Tokenizer.Token", "reportPath" : "System.Linq.Dynamic.Core_Token.htm", "coveredLines" : 4, "uncoveredLines" : 0, "coverableLines" : 4, "totalLines" : 13, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Linq.Dynamic.Core.TypeConverterFactory", "reportPath" : "System.Linq.Dynamic.Core_TypeConverterFactory.htm", "coveredLines" : 4, "uncoveredLines" : 0, "coverableLines" : 4, "totalLines" : 36, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Reflection.CustomIntrospectionExtensions", "reportPath" : "System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 39, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - { "name" : "System.Reflection.CustomTypeBuilderExtensions", "reportPath" : "System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm", "coveredLines" : 3, "uncoveredLines" : 0, "coverableLines" : 3, "totalLines" : 35, "coverageType" : "LineCoverage", "methodCoverage" : "-", "coveredBranches" : 0, "totalBranches" : 0, "lineCoverageHistory" : [], "branchCoverageHistory" : [] }, - ]}, + "name": "System.Linq.Dynamic.Core", + "classes": [ + { "name": "System.Linq.Dynamic.Core.AssemblyBuilderFactory", "reportPath": "System.Linq.Dynamic.Core_AssemblyBuilderFactory.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 25, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider", "reportPath": "System.Linq.Dynamic.Core_AbstractDynamicLinqCustomTypeProvider.htm", "coveredLines": 34, "uncoveredLines": 4, "coverableLines": 38, "totalLines": 122, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 16, "totalBranches": 17, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider", "reportPath": "System.Linq.Dynamic.Core_DefaultDynamicLinqCustomTypeProvider.htm", "coveredLines": 0, "uncoveredLines": 10, "coverableLines": 10, "totalLines": 37, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DefaultAssemblyHelper", "reportPath": "System.Linq.Dynamic.Core_DefaultAssemblyHelper.htm", "coveredLines": 0, "uncoveredLines": 2, "coverableLines": 2, "totalLines": 44, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicClass", "reportPath": "System.Linq.Dynamic.Core_DynamicClass.htm", "coveredLines": 5, "uncoveredLines": 60, "coverableLines": 65, "totalLines": 178, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 12, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicClassFactory", "reportPath": "System.Linq.Dynamic.Core_DynamicClassFactory.htm", "coveredLines": 205, "uncoveredLines": 15, "coverableLines": 220, "totalLines": 388, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 44, "totalBranches": 50, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions", "reportPath": "System.Linq.Dynamic.Core_DynamicEnumerableAsyncExtensions.htm", "coveredLines": 0, "uncoveredLines": 32, "coverableLines": 32, "totalLines": 106, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicEnumerableExtensions", "reportPath": "System.Linq.Dynamic.Core_DynamicEnumerableExtensions.htm", "coveredLines": 37, "uncoveredLines": 0, "coverableLines": 37, "totalLines": 135, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicExpressionParser", "reportPath": "System.Linq.Dynamic.Core_DynamicExpressionParser.htm", "coveredLines": 41, "uncoveredLines": 13, "coverableLines": 54, "totalLines": 242, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicGetMemberBinder", "reportPath": "System.Linq.Dynamic.Core_DynamicGetMemberBinder.htm", "coveredLines": 9, "uncoveredLines": 2, "coverableLines": 11, "totalLines": 34, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 1, "totalBranches": 2, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicProperty", "reportPath": "System.Linq.Dynamic.Core_DynamicProperty.htm", "coveredLines": 7, "uncoveredLines": 0, "coverableLines": 7, "totalLines": 35, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.DynamicQueryableExtensions", "reportPath": "System.Linq.Dynamic.Core_DynamicQueryableExtensions.htm", "coveredLines": 731, "uncoveredLines": 20, "coverableLines": 751, "totalLines": 2046, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 74, "totalBranches": 87, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Exceptions.ParseException", "reportPath": "System.Linq.Dynamic.Core_ParseException.htm", "coveredLines": 4, "uncoveredLines": 4, "coverableLines": 8, "totalLines": 66, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.ExtensibilityPoint", "reportPath": "System.Linq.Dynamic.Core_ExtensibilityPoint.htm", "coveredLines": 1, "uncoveredLines": 0, "coverableLines": 1, "totalLines": 17, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions", "reportPath": "System.Linq.Dynamic.Core_LinqProviderExtensions.htm", "coveredLines": 19, "uncoveredLines": 3, "coverableLines": 22, "totalLines": 51, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 5, "totalBranches": 6, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.GroupResult", "reportPath": "System.Linq.Dynamic.Core_GroupResult.htm", "coveredLines": 7, "uncoveredLines": 0, "coverableLines": 7, "totalLines": 47, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.PagedResult", "reportPath": "System.Linq.Dynamic.Core_PagedResult.htm", "coveredLines": 5, "uncoveredLines": 0, "coverableLines": 5, "totalLines": 64, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.PagedResult`1", "reportPath": "System.Linq.Dynamic.Core_PagedResult_1.htm", "coveredLines": 1, "uncoveredLines": 0, "coverableLines": 1, "totalLines": 64, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.ParameterExpressionHelper", "reportPath": "System.Linq.Dynamic.Core_ParameterExpressionHelper.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 12, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper", "reportPath": "System.Linq.Dynamic.Core_ConstantExpressionHelper.htm", "coveredLines": 14, "uncoveredLines": 0, "coverableLines": 14, "totalLines": 29, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 2, "totalBranches": 2, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.Constants", "reportPath": "System.Linq.Dynamic.Core_Constants.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 11, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.ExpressionHelper", "reportPath": "System.Linq.Dynamic.Core_ExpressionHelper.htm", "coveredLines": 125, "uncoveredLines": 5, "coverableLines": 130, "totalLines": 205, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 89, "totalBranches": 120, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.ExpressionParser", "reportPath": "System.Linq.Dynamic.Core_ExpressionParser.htm", "coveredLines": 1021, "uncoveredLines": 189, "coverableLines": 1210, "totalLines": 1856, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 615, "totalBranches": 741, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.ExpressionPromoter", "reportPath": "System.Linq.Dynamic.Core_ExpressionPromoter.htm", "coveredLines": 48, "uncoveredLines": 3, "coverableLines": 51, "totalLines": 101, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 37, "totalBranches": 38, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.KeywordsHelper", "reportPath": "System.Linq.Dynamic.Core_KeywordsHelper.htm", "coveredLines": 41, "uncoveredLines": 0, "coverableLines": 41, "totalLines": 67, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 14, "totalBranches": 14, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper", "reportPath": "System.Linq.Dynamic.Core_PredefinedTypesHelper.htm", "coveredLines": 55, "uncoveredLines": 3, "coverableLines": 58, "totalLines": 99, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 6, "totalBranches": 6, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData", "reportPath": "System.Linq.Dynamic.Core_MethodData.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 12, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder", "reportPath": "System.Linq.Dynamic.Core_MethodFinder.htm", "coveredLines": 139, "uncoveredLines": 10, "coverableLines": 149, "totalLines": 229, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 68, "totalBranches": 76, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Parser.TypeHelper", "reportPath": "System.Linq.Dynamic.Core_TypeHelper.htm", "coveredLines": 193, "uncoveredLines": 19, "coverableLines": 212, "totalLines": 506, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 227, "totalBranches": 243, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.ParsingConfig", "reportPath": "System.Linq.Dynamic.Core_ParsingConfig.htm", "coveredLines": 18, "uncoveredLines": 0, "coverableLines": 18, "totalLines": 71, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 2, "totalBranches": 2, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Tokenizer.TextParser", "reportPath": "System.Linq.Dynamic.Core_TextParser.htm", "coveredLines": 303, "uncoveredLines": 3, "coverableLines": 306, "totalLines": 447, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 166, "totalBranches": 170, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Tokenizer.Token", "reportPath": "System.Linq.Dynamic.Core_Token.htm", "coveredLines": 4, "uncoveredLines": 0, "coverableLines": 4, "totalLines": 13, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.TypeConverterFactory", "reportPath": "System.Linq.Dynamic.Core_TypeConverterFactory.htm", "coveredLines": 4, "uncoveredLines": 0, "coverableLines": 4, "totalLines": 36, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Validation.Check", "reportPath": "System.Linq.Dynamic.Core_Check.htm", "coveredLines": 34, "uncoveredLines": 37, "coverableLines": 71, "totalLines": 139, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 12, "totalBranches": 24, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Linq.Dynamic.Core.Validation.CoreStrings", "reportPath": "System.Linq.Dynamic.Core_CoreStrings.htm", "coveredLines": 3, "uncoveredLines": 9, "coverableLines": 12, "totalLines": 41, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Reflection.CustomIntrospectionExtensions", "reportPath": "System.Linq.Dynamic.Core_CustomIntrospectionExtensions.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 39, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + { "name": "System.Reflection.CustomTypeBuilderExtensions", "reportPath": "System.Linq.Dynamic.Core_CustomTypeBuilderExtensions.htm", "coveredLines": 3, "uncoveredLines": 0, "coverableLines": 3, "totalLines": 35, "coverageType": "LineCoverage", "methodCoverage": "-", "coveredBranches": 0, "totalBranches": 0, "lineCoverageHistory": [], "branchCoverageHistory": [] }, + ]}, +]; + +var riskHotspotMetrics = [ ]; +var riskHotspots = [ +]; var branchCoverageAvailable = true; + var translations = { +'top': 'Top:', +'all': 'All', +'assembly': 'Assembly', +'class': 'Class', +'method': 'Method', 'lineCoverage': 'LineCoverage', 'noGrouping': 'No grouping', 'byAssembly': 'By assembly', @@ -387,10 +407,335 @@ var translations = { 'total': 'Total', 'coverage': 'Line coverage', 'branchCoverage': 'Branch coverage', -'history': 'History' +'history': 'Coverage History' }; +/* React components */ +var RiskHotspotsComponent = React.createClass({ + getRiskHotspots: function (riskHotspots, assembly, numberOfHotspots, filter, sortby, sortorder) { + var result, i, l, smaller = sortorder === 'asc' ? -1 : 1, bigger = sortorder === 'asc' ? 1 : -1; + + result = []; + + for (i = 0, l = riskHotspots.length; i < l; i++) { + if (filter !== '' && riskHotspots[i].class.toLowerCase().indexOf(filter) === -1) { + continue; + } + + if (assembly !== '' && riskHotspots[i].assembly !== assembly) { + continue; + } + + result.push(riskHotspots[i]); + } + + if (sortby === 'assembly') { + result.sort(function (left, right) { + return left.assembly === right.assembly ? + 0 + : (left.assembly < right.assembly ? smaller : bigger); + }); + } else if (sortby === 'class') { + result.sort(function (left, right) { + return left.class === right.class ? + 0 + : (left.class < right.class ? smaller : bigger); + }); + } else if (sortby === 'method') { + result.sort(function (left, right) { + return left.method === right.method ? + 0 + : (left.method < right.method ? smaller : bigger); + }); + } else if (sortby !== '') { + sortby = parseInt(sortby); + result.sort(function (left, right) { + return left.metrics[sortby].value === right.metrics[sortby].value ? + 0 + : (left.metrics[sortby].value < right.metrics[sortby].value ? smaller : bigger); + }); + } + + result.splice(numberOfHotspots); + + return result; + }, + updateSorting: function (sortby) { + var sortorder = 'asc', assemblies; + + if (sortby === this.state.sortby) { + sortorder = this.state.sortorder === 'asc' ? 'desc' : 'asc'; + } + + riskHotspots = this.getRiskHotspots(this.props.riskHotspots, this.state.assembly, this.state.numberOfHotspots, this.state.filter, sortby, sortorder); + this.setState({ sortby: sortby, sortorder: sortorder, riskHotspots: riskHotspots }); + }, + updateAssembly: function (assembly) { + riskHotspots = this.getRiskHotspots(this.props.riskHotspots, assembly, this.state.numberOfHotspots, this.state.filter, this.state.sortby, this.state.sortorder); + this.setState({ assembly: assembly, riskHotspots: riskHotspots }); + }, + updateNumberOfHotspots: function (numberOfHotspots) { + riskHotspots = this.getRiskHotspots(this.props.riskHotspots, this.state.assembly, numberOfHotspots, this.state.filter, this.state.sortby, this.state.sortorder); + this.setState({ numberOfHotspots: numberOfHotspots, riskHotspots: riskHotspots }); + }, + updateFilter: function (filter) { + filter = filter.toLowerCase(); + + if (filter === this.state.filter) { + return; + } + + riskHotspots = this.getRiskHotspots(this.props.riskHotspots, this.state.assembly, this.state.numberOfHotspots, filter, this.state.sortby, this.state.sortorder); + this.setState({ filter: filter, riskHotspots: riskHotspots }); + }, + getInitialState: function () { + var state, i; + + if (window.history !== undefined && window.history.replaceState !== undefined && window.history.state !== null && window.history.state.riskHotspotsHistoryState !== undefined) { + state = angular.copy(window.history.state.riskHotspotsHistoryState); + + // Delete from state + state.riskHotspots = null; + state.riskHotspotMetrics = this.props.riskHotspotMetrics; + state.assemblies = []; + } else { + state = { + riskHotspots: null, + riskHotspotMetrics: this.props.riskHotspotMetrics, + assemblies: [], + assembly: '', + sortby: '', + sortorder: 'asc', + numberOfHotspots: 10, + filter: '' + }; + } + + for (i = 0; i < this.props.riskHotspots.length; i++) { + if (state.assemblies.indexOf(this.props.riskHotspots[i].assembly) === -1) { + state.assemblies.push(this.props.riskHotspots[i].assembly); + } + } + + state.riskHotspots = this.getRiskHotspots(this.props.riskHotspots, state.assembly, state.numberOfHotspots, state.filter, state.sortby, state.sortorder); + + return state; + }, + render: function () { + if (window.history !== undefined && window.history.replaceState !== undefined) { + var riskHotspotsHistoryState, globalState, i; + riskHotspotsHistoryState = angular.copy(this.state); + + riskHotspotsHistoryState.riskHotspots = null; + riskHotspotsHistoryState.riskHotspotMetrics = null; + riskHotspotsHistoryState.assemblies = null; + + if (window.history.state !== null) { + globalState = angular.copy(window.history.state); + } else { + globalState = {}; + } + + globalState.riskHotspotsHistoryState = riskHotspotsHistoryState; + window.history.replaceState(globalState, null); + } + + return ( + React.DOM.div(null, + RiskHotspotsSearchBar({ + totalNumberOfRiskHotspots: this.props.riskHotspots.length, + assemblies: this.state.assemblies, + assembly: this.state.assembly, + numberOfHotspots: this.state.numberOfHotspots, + filter: this.state.filter, + updateAssembly: this.updateAssembly, + updateNumberOfHotspots: this.updateNumberOfHotspots, + updateFilter: this.updateFilter + }), + RiskHotspotsTable({ + riskHotspots: this.state.riskHotspots, + riskHotspotMetrics: this.props.riskHotspotMetrics, + sortby: this.state.sortby, + sortorder: this.state.sortorder, + updateSorting: this.updateSorting + })) + ); + } +}); + +var RiskHotspotsSearchBar = React.createClass({ + assemblyChangedHandler: function () { + this.props.updateAssembly(this.refs.assemblyInput.getDOMNode().value); + }, + numberOfHotspotsChangedHandler: function () { + this.props.updateNumberOfHotspots(this.refs.numberOfHotspotsInput.getDOMNode().value); + }, + filterChangedHandler: function () { + this.props.updateFilter(this.refs.filterInput.getDOMNode().value); + }, + render: function () { + var assemblyOptions = [React.DOM.option({ value: '' }, translations.assembly)], filterElements = [], numberOptions = [], i, l; + + if (this.props.assemblies.length > 1) { + for (i = 0, l = this.props.assemblies.length; i < l; i++) { + assemblyOptions.push(React.DOM.option({ value: this.props.assemblies[i] }, this.props.assemblies[i])); + } + + filterElements.push(React.DOM.div(null, + React.DOM.select( + { ref: 'assemblyInput', value: this.props.assembly, onChange: this.assemblyChangedHandler }, + assemblyOptions))); + } else { + filterElements.push(React.DOM.div(null)); + } + + if (this.props.totalNumberOfRiskHotspots > 10) { + numberOptions.push(React.DOM.option({ value: 10 }, 10)); + numberOptions.push(React.DOM.option({ value: 20 }, 20)); + } + + if (this.props.totalNumberOfRiskHotspots > 20) { + numberOptions.push(React.DOM.option({ value: 50 }, 50)); + } + + if (this.props.totalNumberOfRiskHotspots > 50) { + numberOptions.push(React.DOM.option({ value: 100 }, 100)); + } + + if (this.props.totalNumberOfRiskHotspots > 100) { + numberOptions.push(React.DOM.option({ value: this.props.totalNumberOfRiskHotspots }, translations.all)); + } + + if (numberOptions.length > 0) { + filterElements.push(React.DOM.div({ className: 'center' }, + React.DOM.span(null, translations.top + ' '), + React.DOM.select( + { ref: 'numberOfHotspotsInput', value: this.props.numberOfHotspots, onChange: this.numberOfHotspotsChangedHandler }, + numberOptions))); + } + + filterElements.push(React.DOM.div({ className: 'right' }, + React.DOM.span(null, translations.filter + ' '), + React.DOM.input({ + ref: 'filterInput', + type: 'text', + value: this.props.filter, + onChange: this.filterChangedHandler, + onInput: this.filterChangedHandler /* Handle text input immediately */ + }))); + + return ( + React.DOM.div({ className: 'customizebox' }, filterElements) + ); + } +}); + +var RiskHotspotsTable = React.createClass({ + render: function () { + var cols = [React.DOM.col(null), React.DOM.col(null), React.DOM.col(null)], rows = [], i, l; + + for (i = 0, l = this.props.riskHotspotMetrics.length; i < l; i++) { + cols.push(React.DOM.col({ className: 'column105' })); + } + + for (i = 0, l = this.props.riskHotspots.length; i < l; i++) { + rows.push(RiskHotspotRow({ + riskHotspot: this.props.riskHotspots[i] + })) + } + + return ( + React.DOM.table({ className: 'overview table-fixed stripped' }, + React.DOM.colgroup(null, cols), + RiskHotspotsTableHeader({ + sortby: this.props.sortby, + sortorder: this.props.sortorder, + updateSorting: this.props.updateSorting, + riskHotspotMetrics: this.props.riskHotspotMetrics + }), + React.DOM.tbody(null, rows) + ) + ); + } +}); +var RiskHotspotsTableHeader = React.createClass({ + sortingChangedHandler: function (event, sortby) { + // Click on explanation url should not trigger resorting + if (sortby !== null) { + event.nativeEvent.preventDefault(); + this.props.updateSorting(sortby); + } + }, + render: function () { + var ths, i, l, metricClass; + + var assemblyClass = this.props.sortby === 'assembly' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var classClass = this.props.sortby === 'class' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var methodClass = this.props.sortby === 'method' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + + ths = [ + React.DOM.th(null, + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'assembly'); }.bind(this) }, + React.DOM.i({ className: assemblyClass }), + translations.assembly)), + React.DOM.th(null, + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'class'); }.bind(this) }, + React.DOM.i({ className: classClass }), + translations.class)), + React.DOM.th(null, + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'method'); }.bind(this) }, + React.DOM.i({ className: methodClass }), + translations.method))]; + + for (i = 0, l = this.props.riskHotspotMetrics.length; i < l; i++) { + metricClass = this.props.sortby !== '' &&this.props.sortby == i ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + ths.push(React.DOM.th({ className: 'right' }, + React.DOM.a( + { href: '', 'data-metric': i, onClick: function (event) { this.sortingChangedHandler(event, $(event.nativeEvent.target).closest('a')[0].getAttribute('data-metric')); }.bind(this) }, + React.DOM.i({ className: metricClass }), + this.props.riskHotspotMetrics[i].name + ' ', + React.DOM.a({ href: this.props.riskHotspotMetrics[i].explanationUrl }, React.DOM.i({ className: 'icon-info-circled' }))))); + } + + return ( + React.DOM.thead(null, + React.DOM.tr(null, ths)) + ); + } +}); + +var RiskHotspotRow = React.createClass({ + render: function () { + var tds, nameElement, metrics; + + if (this.props.riskHotspot.reportPath === '') { + nameElement = React.DOM.span(null, this.props.riskHotspot.class); + } else { + nameElement = React.DOM.a({ href: this.props.riskHotspot.reportPath }, this.props.riskHotspot.class); + } + + tds = [ + React.DOM.td(null, this.props.riskHotspot.assembly), + React.DOM.td(null, nameElement), + React.DOM.td(null, this.props.riskHotspot.method) + ]; + + for (i = 0, l = this.props.riskHotspot.metrics.length; i < l; i++) { + tds.push(React.DOM.td({ className: this.props.riskHotspot.metrics[i].exceeded ? 'lightred' : 'lightgreen' }, + this.props.riskHotspot.metrics[i].value)); + } + + return ( + React.DOM.tr(null, tds) + ); + } +}); + + /* Helper methods */ function createRandomId(length) { var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', id = '', i; @@ -703,7 +1048,7 @@ var AssemblyComponent = React.createClass({ result.sort(function (left, right) { return left.name === right.name ? 0 : (left.name < right.name ? smaller : bigger); }); - + for (i = 0, l = result.length; i < l; i++) { result[i].changeSorting(sortby, sortorder === 'asc'); } @@ -731,8 +1076,8 @@ var AssemblyComponent = React.createClass({ getInitialState: function () { var state, collapseState; - if (window.history !== undefined && window.history.replaceState !== undefined && window.history.state !== null) { - state = angular.copy(window.history.state); + if (window.history !== undefined && window.history.replaceState !== undefined && window.history.state !== null && window.history.state.coverageTableHistoryState !== undefined) { + state = angular.copy(window.history.state.coverageTableHistoryState); collapseState = state.assemblies; } else { state = { @@ -746,7 +1091,7 @@ var AssemblyComponent = React.createClass({ }; } - state.assemblies = this.getAssemblies(this.props.assemblies, state.grouping, state.filter, state.sortby, state.sortorder); + state.assemblies = this.getAssemblies(this.props.assemblies, state.grouping, state.sortby, state.sortorder); if (collapseState !== undefined) { this.restoreCollapseState(collapseState, state.assemblies); @@ -838,12 +1183,19 @@ var AssemblyComponent = React.createClass({ }, render: function () { if (window.history !== undefined && window.history.replaceState !== undefined) { - var historyState, i; - historyState = angular.copy(this.state); + var coverageTableHistoryState, globalState, i; + coverageTableHistoryState = angular.copy(this.state); - historyState.assemblies = this.extractCollapseState(historyState.assemblies); + coverageTableHistoryState.assemblies = this.extractCollapseState(coverageTableHistoryState.assemblies); - window.history.replaceState(historyState, null); + if (window.history.state !== null) { + globalState = angular.copy(window.history.state); + } else { + globalState = {}; + } + + globalState.coverageTableHistoryState = coverageTableHistoryState; + window.history.replaceState(globalState, null); } return ( @@ -958,7 +1310,7 @@ var AssemblyTable = React.createClass({ } return ( - React.DOM.table({ className: 'overview table-fixed' }, + React.DOM.table({ className: 'overview table-fixed stripped' }, React.DOM.colgroup(null, React.DOM.col(null), React.DOM.col({ className: 'column90' }), @@ -986,31 +1338,52 @@ var TableHeader = React.createClass({ this.props.updateSorting(sortby); }, render: function () { - var nameClass = this.props.sortby === 'name' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var coveredClass = this.props.sortby === 'covered' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var uncoveredClass = this.props.sortby === 'uncovered' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var coverableClass = this.props.sortby === 'coverable' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var totalClass = this.props.sortby === 'total' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var coverageClass = this.props.sortby === 'coverage' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; - var branchCoverageClass = this.props.sortby === 'branchcoverage' ? 'sortactive' + '_' + this.props.sortorder : 'sortinactive_asc'; + var nameClass = this.props.sortby === 'name' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var coveredClass = this.props.sortby === 'covered' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var uncoveredClass = this.props.sortby === 'uncovered' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var coverableClass = this.props.sortby === 'coverable' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var totalClass = this.props.sortby === 'total' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var coverageClass = this.props.sortby === 'coverage' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; + var branchCoverageClass = this.props.sortby === 'branchcoverage' ? (this.props.sortorder === 'desc' ? 'icon-up-dir_active' : 'icon-down-dir_active') : 'icon-down-dir'; return ( React.DOM.thead(null, React.DOM.tr(null, React.DOM.th(null, - React.DOM.a({ className: nameClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'name'); }.bind(this) }, translations.name)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'name'); }.bind(this) }, + React.DOM.i({ className: nameClass }), + translations.name)), React.DOM.th({ className: 'right' }, - React.DOM.a({ className: coveredClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'covered'); }.bind(this) }, translations.covered)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'covered'); }.bind(this) }, + React.DOM.i({ className: coveredClass }), + translations.covered)), React.DOM.th({ className: 'right' }, - React.DOM.a({ className: uncoveredClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'uncovered'); }.bind(this) }, translations.uncovered)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'uncovered'); }.bind(this) }, + React.DOM.i({ className: uncoveredClass }), + translations.uncovered)), React.DOM.th({ className: 'right' }, - React.DOM.a({ className: coverableClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'coverable'); }.bind(this) }, translations.coverable)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'coverable'); }.bind(this) }, + React.DOM.i({ className: coverableClass }), + translations.coverable)), React.DOM.th({ className: 'right' }, - React.DOM.a({ className: totalClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'total'); }.bind(this) }, translations.total)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'total'); }.bind(this) }, + React.DOM.i({ className: totalClass }), + translations.total)), React.DOM.th({ className: 'center', colSpan: '2' }, - React.DOM.a({ className: coverageClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'coverage'); }.bind(this) }, translations.coverage)), + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'coverage'); }.bind(this) }, + React.DOM.i({ className: coverageClass }), + translations.coverage)), this.props.branchCoverageAvailable ? React.DOM.th({ className: 'center', colSpan: '2' }, - React.DOM.a({ className: branchCoverageClass, href: '', onClick: function (event) { this.sortingChangedHandler(event, 'branchcoverage'); }.bind(this) }, translations.branchCoverage)) : null)) + React.DOM.a( + { href: '', onClick: function (event) { this.sortingChangedHandler(event, 'branchcoverage'); }.bind(this) }, + React.DOM.i({ className: branchCoverageClass }), + translations.branchCoverage)) : null)) ); } }); @@ -1056,9 +1429,9 @@ var AssemblyRow = React.createClass({ { id: this.props.assembly.name + id, href: '', - onClick: this.toggleCollapseClickHandler, - className: this.props.assembly.collapsed ? 'collapsed' : 'expanded' + onClick: this.toggleCollapseClickHandler }, + React.DOM.i({ className: this.props.assembly.collapsed ? 'icon-plus' : 'icon-minus'}), this.props.assembly.name)), React.DOM.th({ className: 'right' }, this.props.assembly.coveredLines), React.DOM.th({ className: 'right' }, this.props.assembly.uncoveredLines), @@ -1205,20 +1578,24 @@ var CoverageHistoryChart = React.createClass({ function SummaryViewCtrl($scope, $window) { var self = this; - $scope.filteringEnabled = false; + $scope.coverageTableFilteringEnabled = false; $scope.assemblies = []; $scope.branchCoverageAvailable = branchCoverageAvailable; - $scope.enableFiltering = function () { + $scope.riskHotspots = riskHotspots; + $scope.riskHotspotMetrics = riskHotspotMetrics; + + $scope.enableCoverageTableFiltering = function () { console.log("Enabling filtering"); $scope.assemblies = assemblies; - $scope.filteringEnabled = true; + $scope.coverageTableFilteringEnabled = true; }; self.initialize = function () { var i, l, numberOfClasses; + // State is persisted in history. If API or history not available in browser reenable if ($window.history === undefined || $window.history.replaceState === undefined || $window.history.state === null) { numberOfClasses = 0; @@ -1233,7 +1610,7 @@ function SummaryViewCtrl($scope, $window) { console.log("Number of classes (filtering enabled): " + numberOfClasses); } - $scope.enableFiltering(); + $scope.enableCoverageTableFiltering(); }; self.initialize(); @@ -1283,7 +1660,25 @@ var coverageApp = angular.module('coverageApp', []); coverageApp.controller('SummaryViewCtrl', SummaryViewCtrl); coverageApp.controller('DetailViewCtrl', DetailViewCtrl); -coverageApp.directive('reactiveTable', function () { +coverageApp.directive('reactiveRiskHotspotTable', function () { + return { + restrict: 'A', + scope: { + riskHotspots: '=', + riskHotspotMetrics: '=' + }, + link: function (scope, el, attrs) { + scope.$watchCollection('riskHotspots', function (newValue, oldValue) { + React.renderComponent( + RiskHotspotsComponent({ riskHotspots: newValue, riskHotspotMetrics: scope.riskHotspotMetrics }), + el[0]); + }); + } + }; +}); + + +coverageApp.directive('reactiveCoverageTable', function () { return { restrict: 'A', scope: { @@ -1305,17 +1700,42 @@ coverageApp.directive('historyChart', function ($window) { restrict: 'A', link: function (scope, el, attrs) { var chartData = $window[attrs.data]; - new Chartist.Line('#' + el[0].id, { + var options = { + axisY: { + type: undefined, + onlyInteger: true + }, + lineSmooth: false, + low: 0, + high: 100, + scaleMinSpace: 20, + onlyInteger: true, + }; + var lineChart = new Chartist.Line('#' + el[0].id, { labels: [], series: chartData.series - }, { - lineSmooth: false, - low: 0, - high: 100 - }); + }, options); var chart = $(el[0]); + var toggleZoomButton = chart + .append('
') + .find('.toggleZoom'); + + toggleZoomButton.find('a').on('click', function (event) { + event.preventDefault(); + + if (options.axisY.type === undefined) { + options.axisY.type = Chartist.AutoScaleAxis; + } else { + options.axisY.type = undefined; + } + + toggleZoomButton.find('i').toggleClass('icon-search-plus icon-search-minus'); + + lineChart.update(null, options); + }); + var tooltip = chart .append('
') .find('.tooltip'); diff --git a/report/coverlet/icon_cube.svg b/report/coverlet/icon_cube.svg new file mode 100644 index 00000000..11b5cabf --- /dev/null +++ b/report/coverlet/icon_cube.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_down-dir_active.svg b/report/coverlet/icon_down-dir_active.svg new file mode 100644 index 00000000..d11cf041 --- /dev/null +++ b/report/coverlet/icon_down-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_fork.svg b/report/coverlet/icon_fork.svg new file mode 100644 index 00000000..f0148b3a --- /dev/null +++ b/report/coverlet/icon_fork.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_info-circled.svg b/report/coverlet/icon_info-circled.svg new file mode 100644 index 00000000..252166bb --- /dev/null +++ b/report/coverlet/icon_info-circled.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_minus.svg b/report/coverlet/icon_minus.svg new file mode 100644 index 00000000..3c30c365 --- /dev/null +++ b/report/coverlet/icon_minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_plus.svg b/report/coverlet/icon_plus.svg new file mode 100644 index 00000000..79327232 --- /dev/null +++ b/report/coverlet/icon_plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_search-minus.svg b/report/coverlet/icon_search-minus.svg new file mode 100644 index 00000000..c174eb5e --- /dev/null +++ b/report/coverlet/icon_search-minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_search-plus.svg b/report/coverlet/icon_search-plus.svg new file mode 100644 index 00000000..04b24ecc --- /dev/null +++ b/report/coverlet/icon_search-plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_up-dir.svg b/report/coverlet/icon_up-dir.svg new file mode 100644 index 00000000..567c11f3 --- /dev/null +++ b/report/coverlet/icon_up-dir.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_up-dir_active.svg b/report/coverlet/icon_up-dir_active.svg new file mode 100644 index 00000000..bb225544 --- /dev/null +++ b/report/coverlet/icon_up-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/coverlet/icon_wrench.svg b/report/coverlet/icon_wrench.svg new file mode 100644 index 00000000..0e9a8601 --- /dev/null +++ b/report/coverlet/icon_wrench.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/report/index.htm b/report/coverlet/index.htm similarity index 63% rename from report/index.htm rename to report/coverlet/index.htm index 8c61c99d..621e62f0 100644 --- a/report/index.htm +++ b/report/coverlet/index.htm @@ -3,6 +3,7 @@ + Summary - Coverage Report
@@ -13,25 +14,25 @@

Summary

-Generated on:2018-07-27 - 14:51:27 +Generated on:2018-10-23 - 18:43:55 Parser:OpenCoverParser Assemblies:2 -Classes:46 -Files:37 -Covered lines:3130 -Uncovered lines:555 -Coverable lines:3685 -Total lines:8345 -Line coverage:84.9% -Branch coverage:77.6% +Classes:44 +Files:38 +Covered lines:3233 +Uncovered lines:587 +Coverable lines:3820 +Total lines:8290 +Line coverage:84.6% +Branch coverage:84% -

Assemblies

-
-
-
+

Coverage

+
+
+
- +
@@ -45,30 +46,27 @@

Assemblies

- - - + + + - - + - + - - - + + - + - - - + + - + @@ -78,23 +76,24 @@

Assemblies

- - - - - + + + + + - - - - - + + + + + +
NameCoveredUncoveredCoverableTotalLine coverageBranch coverage
Microsoft.EntityFrameworkCore.DynamicLinq10714224995942.9%
  
25%
  
Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions0000
 
 
Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions964213865469.5%
  
50%
  
Microsoft.EntityFrameworkCore.DynamicLinq107144251101042.6%
  
26.1%
  
Microsoft.EntityFrameworkCore.DynamicLinq.DynamicFunctions022510%
 
 
Microsoft.EntityFrameworkCore.DynamicLinq.EntityFrameworkDynamicQueryableExtensions964213865469.5%
  
58.3%
  
System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions02222510%
 
0%
 
System.Linq.Dynamic.Core.Res0000
 
 
System.Linq.Dynamic.Core.Validation.Check11607113915.4%
  
20%
  
System.Linq.Dynamic.Core.Validation.Check11607113915.4%
  
16.6%
  
System.Linq.Dynamic.Core.Validation.CoreStrings01212410%
 
 
System.Reflection.CustomIntrospectionExtensions033390%
 
 
System.Reflection.CustomTypeBuilderExtensions033350%
 
 
System.Linq.Dynamic.Core30234133436738687.9%
  
79.4%
  
System.Linq.Dynamic.Core31264433569764987.5%
  
85.5%
  
System.Linq.Dynamic.Core.AssemblyBuilderFactory30325100%
 
 
System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider232259592%
  
50%
  
System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider099340%
 
0%
 
System.Linq.Dynamic.Core.CustomTypeProviders.DynamicLinqTypeAttribute0000
 
 
System.Linq.Dynamic.Core.CustomTypeProviders.AbstractDynamicLinqCustomTypeProvider3443812289.4%
  
94.1%
  
System.Linq.Dynamic.Core.CustomTypeProviders.DefaultDynamicLinqCustomTypeProvider01010370%
 
 
System.Linq.Dynamic.Core.DefaultAssemblyHelper022440%
 
 
System.Linq.Dynamic.Core.DynamicClass560651787.6%
  
0%
 
System.Linq.Dynamic.Core.DynamicClassFactory2041521939093.1%
  
79.4%
  
System.Linq.Dynamic.Core.DynamicClassFactory2051522038893.1%
  
88%
  
System.Linq.Dynamic.Core.DynamicEnumerableAsyncExtensions032321060%
 
 
System.Linq.Dynamic.Core.DynamicEnumerableExtensions37037135100%
 
 
System.Linq.Dynamic.Core.DynamicExpressionParser38165424270.3%
  
 
System.Linq.Dynamic.Core.DynamicGetMemberBinder01111340%
 
0%
 
System.Linq.Dynamic.Core.DynamicOrdering0000
 
 
System.Linq.Dynamic.Core.DynamicExpressionParser41135424275.9%
  
 
System.Linq.Dynamic.Core.DynamicGetMemberBinder92113481.8%
  
50%
  
System.Linq.Dynamic.Core.DynamicProperty70735100%
 
 
System.Linq.Dynamic.Core.DynamicQueryableExtensions73118749204897.5%
  
82.3%
  
System.Linq.Dynamic.Core.DynamicQueryableExtensions73120751204697.3%
  
85%
  
System.Linq.Dynamic.Core.Exceptions.ParseException4486650%
  
 
System.Linq.Dynamic.Core.ExtensibilityPoint10117100%
 
 
System.Linq.Dynamic.Core.Extensions.LinqProviderExtensions193225186.3%
  
83.3%
  
System.Linq.Dynamic.Core.ParameterExpressionHelper30312100%
 
 
System.Linq.Dynamic.Core.Parser.ConstantExpressionHelper1401429100%
 
100%
 
System.Linq.Dynamic.Core.Parser.Constants30311100%
 
 
System.Linq.Dynamic.Core.Parser.ExpressionHelper120512519996%
  
70.4%
  
System.Linq.Dynamic.Core.Parser.ExpressionParser9961941190182483.6%
  
75.4%
  
System.Linq.Dynamic.Core.Parser.ExpressionPromoter4835110194.1%
  
92.8%
  
System.Linq.Dynamic.Core.Parser.KeywordsHelper4104167100%
 
75%
  
System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper4512579978.9%
  
50%
  
System.Linq.Dynamic.Core.Parser.ExpressionHelper125513020596.1%
  
74.1%
  
System.Linq.Dynamic.Core.Parser.ExpressionParser10211891210185684.3%
  
82.9%
  
System.Linq.Dynamic.Core.Parser.ExpressionPromoter4835110194.1%
  
97.3%
  
System.Linq.Dynamic.Core.Parser.KeywordsHelper4104167100%
 
100%
 
System.Linq.Dynamic.Core.Parser.PredefinedTypesHelper553589994.8%
  
100%
 
System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodData30312100%
 
 
System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder142614822995.9%
  
91%
  
System.Linq.Dynamic.Core.Parser.TypeHelper1941821250691.5%
  
87%
  
System.Linq.Dynamic.Core.ParsingConfig1201252100%
 
50%
  
System.Linq.Dynamic.Core.Res0000
 
 
System.Linq.Dynamic.Core.Tokenizer.TextParser303330644799%
  
94.1%
  
System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder1391014922993.2%
  
89.4%
  
System.Linq.Dynamic.Core.Parser.TypeHelper1931921250691%
  
93.4%
  
System.Linq.Dynamic.Core.ParsingConfig1801871100%
 
100%
 
System.Linq.Dynamic.Core.Tokenizer.TextParser303330644799%
  
97.6%
  
System.Linq.Dynamic.Core.Tokenizer.Token40413100%
 
 
System.Linq.Dynamic.Core.TypeConverterFactory40436100%
 
 
System.Linq.Dynamic.Core.Validation.Check34377113947.8%
  
50%
  
System.Linq.Dynamic.Core.Validation.CoreStrings39124125%
  
 
System.Reflection.CustomIntrospectionExtensions30339100%
 
 
System.Reflection.CustomTypeBuilderExtensions30335100%
 
 
-
+
\ No newline at end of file diff --git a/report/coverlet/report.css b/report/coverlet/report.css new file mode 100644 index 00000000..1ea767aa --- /dev/null +++ b/report/coverlet/report.css @@ -0,0 +1,353 @@ +html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } +body { margin: 0; padding: 0; height: 100%; } +h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } +h1:first-of-type { margin-top: 0; } +h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } +h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } +a { color: #c00; text-decoration: none; } +a:hover { color: #000; text-decoration: none; } + +.container { margin: auto; max-width: 1500px; width: 90%; background-color: #fff; display: table; box-shadow: 0 0 60px #7d7d7d; height: 100%; } +.containerleft { display: table-cell; padding: 0 20px 20px 20px; } +.containerright { border-left: solid 1px #6f6f6f; display: table-cell; width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } +.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } +.containerrightfixed h1 { background-color: #c00; } +.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; max-width: 300px; text-overflow: ellipsis; } +.containerright a { margin-bottom: 3px; } + +@media screen and (max-width:1200px){ + .container { box-shadow: none; width: 100%; } + .containerright { display: none; } +} + +.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } + +th { text-align: left; } +.table-fixed { table-layout: fixed; } +.overview { border: solid 1px #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } +.overview th { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } +.overview tr.namespace th { background-color: #dcdcdc; } +.overview thead th { background-color: #d1d1d1; } +.overview th a { color: #000; } +.overview tr.namespace a { margin-left: 15px; } +.overview td { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } +.coverage { border: solid 1px #c1c1c1; border-collapse: collapse; font-size: 5px; height: 10px; } +.coverage td { padding: 0; border: none; } +.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } + +.customizebox { font-size: 0.75em; margin-bottom: 7px; } +.customizebox div { width: 33.33%; display: inline-block; } +.customizebox input { font-size: 0.8em; width: 150px; } +#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } + +.percentagebarundefined { + border-left: 2px solid #fff; + padding-left: 3px; +} +.percentagebar0 { + border-left: 2px solid #f00; + padding-left: 3px; +} +.percentagebar10 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 90%, #00ff21 90%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar20 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 80%, #00ff21 80%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar30 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 70%, #00ff21 70%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar40 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 60%, #00ff21 60%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar50 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 50%, #00ff21 50%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar60 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 40%, #00ff21 40%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar70 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 30%, #00ff21 30%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar80 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 20%, #00ff21 20%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar90 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #f00 10%, #00ff21 10%, #00ff21 100%) 1; + padding-left: 3px; +} +.percentagebar100 { + border-left: 2px solid #00ff21; + padding-left: 3px; +} + +.hidden, .ng-hide { display: none; } +.right { text-align: right; } +.center { text-align: center; } +.rightmargin { padding-right: 8px; } +.leftmargin { padding-left: 5px; } +.green { background-color: #00ff21; } +.lightgreen { background-color: #dcf4dc; } +.red { background-color: #f00; } +.lightred { background-color: #f7dede; } +.orange { background-color: #FFA500; } +.lightorange { background-color: #FFEFD5; } +.gray { background-color: #dcdcdc; } +.lightgray { color: #888888; } + +.toggleZoom { text-align:right; } + +.ct-chart { position: relative; } +.ct-chart .ct-line { stroke-width: 2px !important; } +.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } +.ct-chart .ct-point:hover { stroke-width: 10px !important; } +.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} +.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} + +.tinylinecoveragechart, .tinybranchcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: solid 1px #c1c1c1; width: 30px; height: 18px; } + +.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } +.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } + +.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } +.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } + +.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D;color: #453D3F; pointer-events: none; z-index: 1; } +.tooltip:after { content: ""; position: absolute; top: 100%; left: 50%; width: 0; height: 0; margin-left: -15px; border: 15px solid transparent; border-top-color: #F4C63D; } + +.column1324 { max-width: 1324px; } +.column674 { max-width: 674px; } +.column60 { width: 60px; } +.column70 { width: 70px; } +.column90 { width: 90px; } +.column98 { width: 98px; } +.column100 { width: 100px; } +.column105 { width: 105px; } +.column112 { width: 112px; } +.column135 { width: 135px; } + +.covered0 { width: 0px; } +.covered1 { width: 1px; } +.covered2 { width: 2px; } +.covered3 { width: 3px; } +.covered4 { width: 4px; } +.covered5 { width: 5px; } +.covered6 { width: 6px; } +.covered7 { width: 7px; } +.covered8 { width: 8px; } +.covered9 { width: 9px; } +.covered10 { width: 10px; } +.covered11 { width: 11px; } +.covered12 { width: 12px; } +.covered13 { width: 13px; } +.covered14 { width: 14px; } +.covered15 { width: 15px; } +.covered16 { width: 16px; } +.covered17 { width: 17px; } +.covered18 { width: 18px; } +.covered19 { width: 19px; } +.covered20 { width: 20px; } +.covered21 { width: 21px; } +.covered22 { width: 22px; } +.covered23 { width: 23px; } +.covered24 { width: 24px; } +.covered25 { width: 25px; } +.covered26 { width: 26px; } +.covered27 { width: 27px; } +.covered28 { width: 28px; } +.covered29 { width: 29px; } +.covered30 { width: 30px; } +.covered31 { width: 31px; } +.covered32 { width: 32px; } +.covered33 { width: 33px; } +.covered34 { width: 34px; } +.covered35 { width: 35px; } +.covered36 { width: 36px; } +.covered37 { width: 37px; } +.covered38 { width: 38px; } +.covered39 { width: 39px; } +.covered40 { width: 40px; } +.covered41 { width: 41px; } +.covered42 { width: 42px; } +.covered43 { width: 43px; } +.covered44 { width: 44px; } +.covered45 { width: 45px; } +.covered46 { width: 46px; } +.covered47 { width: 47px; } +.covered48 { width: 48px; } +.covered49 { width: 49px; } +.covered50 { width: 50px; } +.covered51 { width: 51px; } +.covered52 { width: 52px; } +.covered53 { width: 53px; } +.covered54 { width: 54px; } +.covered55 { width: 55px; } +.covered56 { width: 56px; } +.covered57 { width: 57px; } +.covered58 { width: 58px; } +.covered59 { width: 59px; } +.covered60 { width: 60px; } +.covered61 { width: 61px; } +.covered62 { width: 62px; } +.covered63 { width: 63px; } +.covered64 { width: 64px; } +.covered65 { width: 65px; } +.covered66 { width: 66px; } +.covered67 { width: 67px; } +.covered68 { width: 68px; } +.covered69 { width: 69px; } +.covered70 { width: 70px; } +.covered71 { width: 71px; } +.covered72 { width: 72px; } +.covered73 { width: 73px; } +.covered74 { width: 74px; } +.covered75 { width: 75px; } +.covered76 { width: 76px; } +.covered77 { width: 77px; } +.covered78 { width: 78px; } +.covered79 { width: 79px; } +.covered80 { width: 80px; } +.covered81 { width: 81px; } +.covered82 { width: 82px; } +.covered83 { width: 83px; } +.covered84 { width: 84px; } +.covered85 { width: 85px; } +.covered86 { width: 86px; } +.covered87 { width: 87px; } +.covered88 { width: 88px; } +.covered89 { width: 89px; } +.covered90 { width: 90px; } +.covered91 { width: 91px; } +.covered92 { width: 92px; } +.covered93 { width: 93px; } +.covered94 { width: 94px; } +.covered95 { width: 95px; } +.covered96 { width: 96px; } +.covered97 { width: 97px; } +.covered98 { width: 98px; } +.covered99 { width: 99px; } +.covered100 { width: 100px; } + + @media print { + html, body { background-color: #fff; } + .container { max-width: 100%; width: 100%; padding: 0; } + .overview colgroup col:first-child { width: 300px; } +} + +.icon-up-dir_active { + background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir_active { + background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir { + background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-info-circled { + background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; +} +.icon-plus { + background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-minus { + background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 1em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-wrench { + background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNlNWU1ZTUiIC8+PHBhdGggZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 1em; + display: inline-block; +} +.icon-fork { + background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 1em; + display: inline-block; +} +.icon-cube { + background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNlNWU1ZTUiIC8+PHBhdGggZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 1em; + display: inline-block; +} +.icon-search-plus { + background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 1em; + display: inline-block; +} +.icon-search-minus { + background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 1em; + display: inline-block; +} + +.ct-double-octave:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-grid-background,.ct-line{fill:none}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{content:"";display:table;clear:both}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/report/pic_branch0.png b/report/pic_branch0.png deleted file mode 100644 index 7d61df08..00000000 Binary files a/report/pic_branch0.png and /dev/null differ diff --git a/report/pic_branch10.png b/report/pic_branch10.png deleted file mode 100644 index 23480a97..00000000 Binary files a/report/pic_branch10.png and /dev/null differ diff --git a/report/pic_branch100.png b/report/pic_branch100.png deleted file mode 100644 index 5c5d8ad8..00000000 Binary files a/report/pic_branch100.png and /dev/null differ diff --git a/report/pic_branch20.png b/report/pic_branch20.png deleted file mode 100644 index 181b2093..00000000 Binary files a/report/pic_branch20.png and /dev/null differ diff --git a/report/pic_branch30.png b/report/pic_branch30.png deleted file mode 100644 index 68bef4c9..00000000 Binary files a/report/pic_branch30.png and /dev/null differ diff --git a/report/pic_branch40.png b/report/pic_branch40.png deleted file mode 100644 index 066b8965..00000000 Binary files a/report/pic_branch40.png and /dev/null differ diff --git a/report/pic_branch50.png b/report/pic_branch50.png deleted file mode 100644 index 7f36e791..00000000 Binary files a/report/pic_branch50.png and /dev/null differ diff --git a/report/pic_branch60.png b/report/pic_branch60.png deleted file mode 100644 index 60565e86..00000000 Binary files a/report/pic_branch60.png and /dev/null differ diff --git a/report/pic_branch70.png b/report/pic_branch70.png deleted file mode 100644 index 13a8d1bf..00000000 Binary files a/report/pic_branch70.png and /dev/null differ diff --git a/report/pic_branch80.png b/report/pic_branch80.png deleted file mode 100644 index fad3d435..00000000 Binary files a/report/pic_branch80.png and /dev/null differ diff --git a/report/pic_branch90.png b/report/pic_branch90.png deleted file mode 100644 index d31be85c..00000000 Binary files a/report/pic_branch90.png and /dev/null differ diff --git a/report/pic_collapsed.png b/report/pic_collapsed.png deleted file mode 100644 index aa92c479..00000000 Binary files a/report/pic_collapsed.png and /dev/null differ diff --git a/report/pic_expanded.png b/report/pic_expanded.png deleted file mode 100644 index f4cd5a26..00000000 Binary files a/report/pic_expanded.png and /dev/null differ diff --git a/report/pic_info.png b/report/pic_info.png deleted file mode 100644 index 48a406db..00000000 Binary files a/report/pic_info.png and /dev/null differ diff --git a/report/pic_method.png b/report/pic_method.png deleted file mode 100644 index 0347467a..00000000 Binary files a/report/pic_method.png and /dev/null differ diff --git a/report/pic_property.png b/report/pic_property.png deleted file mode 100644 index c223c660..00000000 Binary files a/report/pic_property.png and /dev/null differ diff --git a/report/pic_sortactive_asc.png b/report/pic_sortactive_asc.png deleted file mode 100644 index 21b1c26d..00000000 Binary files a/report/pic_sortactive_asc.png and /dev/null differ diff --git a/report/pic_sortactive_desc.png b/report/pic_sortactive_desc.png deleted file mode 100644 index 6dcef5d6..00000000 Binary files a/report/pic_sortactive_desc.png and /dev/null differ diff --git a/report/pic_sortinactive.png b/report/pic_sortinactive.png deleted file mode 100644 index 31ef9ce5..00000000 Binary files a/report/pic_sortinactive.png and /dev/null differ diff --git a/report/report.css b/report/report.css deleted file mode 100644 index 1942b526..00000000 --- a/report/report.css +++ /dev/null @@ -1,222 +0,0 @@ -html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } -body { margin: 0; padding: 0; height: 100%; } -h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } -h1:first-of-type { margin-top: 0; } -h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } -h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } -a { color: #c00; text-decoration: none; } -a:hover { color: #000; text-decoration: none; } - -.container { margin: auto; max-width: 1500px; width: 90%; background-color: #fff; display: table; box-shadow: 0 0 60px #7d7d7d; height: 100%; } -.containerleft { display: table-cell; padding: 0 20px 20px 20px; } -.containerright { border-left: solid 1px #6f6f6f; display: table-cell; width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } -.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } -.containerrightfixed h1 { background-color: #c00; } -.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; max-width: 300px; text-overflow: ellipsis; } -.containerright a { margin-bottom: 3px; } - -a.method {background-image: url(pic_method.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAANCAIAAAD5fKMWAAAAuUlEQVR4Ab2RK6KEMAwAOUsVqoozoFCoqnUo1KoqDoBCoap6AVRVVFUVqioKt+d4+034I9/IZNIkTfJYMY3edlUhhSyqzvpxWqcTssA0L+slNQZe0i5AdrQq3Ty1b5YqGz82aCH4iS3UQwgNbBNpprRxAScMzmiVUdNBH9mMLO/9EJBawLX9yhH/Y9MPXtkR+jqX9IOfiGtLubMxDK+wLFsX+ToMelPnvza39v1gXhuP+8sz1IYeXPMEYaxaFbw7zkwAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 20px;} -a.property {background-image: url(pic_property.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAANCAIAAAD5fKMWAAAArUlEQVR4AYWQGRTEMBCG4+4wVIpjaGkpVKotlUqh+istlUprpVBoqFQqDZVidae9pvf54f++OUV3ALksUhIApIry2nO4b3s0Cv5InTka812bipDdxHFwaqMBxuDYoKrbq97BLc6xcpmWEBa0ZzdlnL4s7z2iDHreZKX+tCB82nL4yf2RY7vee1QZFVvq1ogDtWy6HcS1urQ9pur3Wu+SUb2yz7suNiFrtE5YPeMDx52bD7+xo9IAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 20px;} - -@media screen and (max-width:1200px){ - .container { box-shadow:none; width:100%; } - .containerright { display:none; } -} - -.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } - -th { text-align: left; } -.table-fixed { table-layout: fixed; } -.overview { border: solid 1px #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } -.overview th { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; background-color: #ddd; } -.overview tr.namespace th { background-color: #dcdcdc; } -.overview thead th { background-color: #d1d1d1; } -.overview th a { color: #000; } -.overview tr.namespace a, .overview tr.namespace span { margin-left: 15px; } -.overview td { border: solid 1px #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } -.coverage { border: solid 1px #c1c1c1; border-collapse: collapse; font-size: 5px; height: 10px; } -.coverage td { padding: 0; border: none; } - -.customizebox { font-size: 0.75em; margin-bottom: 7px; } -.customizebox div { width: 33.33%; display: inline-block; } -.customizebox input { font-size: 0.8em; width: 150px; } -#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } - -a.sortactive_asc { background-image: url(pic_sortactive_asc.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC5SURBVCiRlZGrbgJRFEXXgVF8Cwoa/gFDCAmyKAS+tpZvqW/CR5AQFIrKagSmAiazEFyaAW5IZpvz2PvkvEKlCVqN1EABsInomvwaYQWVYBuqM5QD3RepzUhY1guqZCP5LfgElqFCRGxhJQxzYwR892CMet1BLeEd+M3of4QZ6Tr/Sw/0AEyBU038J0z6erwl7q7U17XwcYuFxZvu7sbL/WEb8QUce7p45Ion9TU570CZ47IdXqHxpy+g6Uhxn5HjPwAAAABJRU5ErkJggg==); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } -a.sortactive_desc { background-image: url(pic_sortactive_desc.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACESURBVAiZbcw9jkEBGEbh53MlU/lJ0M+sQTQKnUZtBXpbEWuRybSjvi6djVAp+DRGromTvNU5eSMz1akiFkF3mLl6EZn53IFJxaXiumNWd/H3WEZ8FZToPz5ON8ajzCM0YB/RKfiuRdBusCkjehC/NFv8YOo92zPTYska85qIf+HnB4M7auMxO7A99QMAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } -a.sortinactive_asc { background-image: url(pic_sortinactive.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACKSURBVCiRlZExCgIxEEXfFzsLC6+xvaext/AEeiDrbTzMlt7AwmJB/DaTZdQ1mIGQCf89GDKyTUstmmhgCSCpK30qA890P2wPxEjHCGrnZJsiCLhU4B7QJIS0Aa4z8ACsJ640IW2BMcF3oHtj8iOkQxJ2n7nm9iDpDNxs77+yH8IqvnH8S6hV86ZfVkN9/+MF4OEAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } - -a.expanded { background-image: url(pic_expanded.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAClJREFUKFNj+P//PwMpmCTFIIMHo4YzQFeRghlIUQxSOxg9TUoskxVxAAc+kbB1wVv5AAAAAElFTkSuQmCC); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } -a.collapsed { background-image: url(pic_collapsed.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAACdJREFUKFNj+P//PwM6ZmBg+A/CWOWGgwaYB0mgISFCNB4OoUSqHwDx71a4nIsouAAAAABJRU5ErkJggg==); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } - -.info { width: 15px; display: inline-block; background-repeat: no-repeat; background-image: url(pic_info.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAA2UlEQVR4AaWTtUHFUBiFY5ugCzAHC6RijizAHjh0uEOLU6VCn+Jt9B7+uHvxvRc7co0DEDK7DImQiX3ij4D/v+8/l+Lfx4WTxD2BEpz3kwmxLxwRmCsXO4wCg6BqJnFhh2HxiEHZKmwgOWI5+5Jho69D13UMLllRA9kR77cU73PBrLbgj8s83LBx/WHiy+fxvDAZ2eRVBuXIMSivHSQftxzzcefZlgg1fLhl41l3hDHe7LRQJaRgh80GO8xhfoMlWc3ssNn03p4NGpSgBkKHolN1nDpVx3mn6h+ViXov2qxPjwAAAABJRU5ErkJggg==); } - -.branch0 { width: 13px; background-repeat: no-repeat; background-repeat: no-repeat; background-image: url(pic_branch0.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAAP1BMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiJGRkb/AAArKyuJiYlPT08eHh5+fn4lJSVxcXE+Pj5hYWHbSELyAAAAAXRSTlMAQObYZgAAAGJJREFUeAF1z0mKw0AMhtGnKs+Ohwz3P2swJoWg6W/3VvpFbl2p5czuRnN2YYHpdbvvphnl3HeXPQMGyu1HcKEfsrc4ZIt3tjm25s9QI6rmqwW/e9GDtqf83fv/P7pjzIbkLwNnA3Y85ZObAAAAAElFTkSuQmCC); } -.branch10 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch10.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiL/AAA9wRj3BwEA/yGJiYlPT08eHh5+fn4lJSVGRkZxcXErKys+Pj5hYWGqWMNpAAAAAXRSTlMAQObYZgAAAGdJREFUeAFtz0kOwjAUBNHq7yFx5oHA/W+KcIRlS6nd23XTNAzgbK/tO1JtgxOgf90Ovk+A7euazSGACHb7yjZCrL1oozZ6N05aij/RSY7iXyd/H1LIKHvsae/jn2kCv3XF40jTPH8BKiQDwdoE+8kAAAAASUVORK5CYII=); } -.branch20 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch20.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEREREZGRlKSko3NzdpaWkxMTGDg4NdXV1olhMiIiKJiYlPT08A/yH/AABGRkYeHh5+fn4lJSUrKys+Pj5xcXFhYWF0ULtDAAAAAXRSTlMAQObYZgAAAGVJREFUeAFdz0cSgzAQRNHfowCIjMP9j+qyKKtG/ru366Zr2yDb6R0HirfBDjC+bqc4FsDOZanmEkAAu/2oNlLwnnXgjZ6di+bmd8hSpvnbzs+XlCraHvvf2zxN/Z91hXgMnQHnD2B+BBMy/cNnAAAAAElFTkSuQmCC); } -.branch30 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch30.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiL/AAAA/yFGRkaDg4NdXV2WaA2JiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWEgqDmeAAAAAXRSTlMAQObYZgAAAGZJREFUeAFNz0cOwzAMRNFPqrgXy0nuf9SAEGzM3z1wMwRtHKHapc4Lg9pgBli/3SmvcbfrOAjTHKCAdd8OgVTUu5+o8Q/qwffXv1LdK6+jmcfNPUFv22KP8TRNfa84/lGTz0Uthf/9tgNxOP/NUQAAAABJRU5ErkJggg==); } -.branch40 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch40.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiIA/yH/AABGRkaDg4NdXV3APggH9x+JiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWFonEahAAAAAXRSTlMAQObYZgAAAGhJREFUeAFNz0eORDEMA9GyHPxz+B3m/jcdEAYarN1bicJjnqGlx11WujvBArB9h3PZOpCe65LhFQAV0vA7QMjVfcaNm/i46XH+/FdbRAPYd1ktqOPQvciMmCbtSZi1161/3JR7dSvzPx4tA5oZXK5zAAAAAElFTkSuQmCC); } -.branch50 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch50.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRlpaWk3NzdKSkoxMTFGRkYiIiIA/yH/AACDg4NdXV0d4R3hHQOJiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWFLWFD2AAAAAXRSTlMAQObYZgAAAGlJREFUeAFNz0kKw1AMBNHSH77n2Unuf9PQGEPX7qFNC49xhJZOd5no3Qk6gPn7OJdZ93TuuwxXAFRIj+8AIVf3Fgdu4gOs6+s+NmBZ5F9tEQ1gGGTV8fqKyChk7UmYtdft/8iUY3Ir8x8pawOmgEiktgAAAABJRU5ErkJggg==); } -.branch60 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch60.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRk3NzdpaWkxMTFKSkpdXV0+wBgiIiL/AAAA/yFGRkaDg4P3BwGJiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWHS0KQCAAAAAXRSTlMAQObYZgAAAGlJREFUeAFNz0cOw0AMQ9EvTbHHvaTc/6bJwCCgv3s7EmLTBMWv6LTSoh0WgOHzOKehAX4dRzfcBlDBH78MOnKFbZN3O4FxlLE3MM9ysx35W4tZAbm3IN9mGZD/e5xg7ZX1RyadazRA8A8wiQPJIy0rHgAAAABJRU5ErkJggg==); } -.branch70 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch70.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEREREZGRlpaWk3NzcxMTFKSkpGRkYiIiKDg4NdXV3/AAAA/yFolhOJiYlPT08eHh5+fn4lJSU+Pj4rKytxcXFhYWEH3YW7AAAAAXRSTlMAQObYZgAAAGdJREFUeAFVz0cWhDAQA9HqdsDkMOH+Rx0Ynnh27f5OomkcIfleO/aU2g4dwPC5HeJQAN/X9W8OA8jgMM/wvnwiZJgmebGN2tircbHl8Tcns8Tjqw75MAuAfO5xKmuvrD8ycesb38k/NDwDzrEiRywAAAAASUVORK5CYII=); } -.branch80 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch80.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAARVBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiIA/yFdXV3/AACDg4OWaA2JiYlPT08eHh5+fn4lJSVGRkYrKys+Pj5xcXFhYWEQqOEsAAAAAXRSTlMAQObYZgAAAGRJREFUeAFNz0kOwkAMRcFqZ55DGO5/VNQSRH67Wvmb3DzTlzO7XQzZhQumN9ZV004DyrnvjCOPgI5C9TOoaLrsLQ7Z4pVtiO32p+sjerdrF/73osHPdU+RXLiy8z/V2mORjeQvDAcDdiAsiv4AAAAASUVORK5CYII=); } -.branch90 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch90.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAASFBMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4MiIiJdXV3/AADBPQgH9x+JiYkA/yFPT08eHh5+fn5GRkYrKyslJSVxcXE+Pj5hYWEblV3lAAAAAXRSTlMAQObYZgAAAGdJREFUeAFNz0cOwzAMRcGh3HtJyf1vGhiGBb3drPhJ2ThSpSN7mtSdPnueJU4YPlhXTT30SMe2XeYd0JJuv4ILTVt6iV1p8VW6jyX711YRleyrE8+9aEDekxS+92bnfx6r9640FP4DXWwEJsNw3ucAAAAASUVORK5CYII=); } -.branch100 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch100.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAP1BMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiJGRkYA/yErKyuJiYlPT08eHh5+fn4lJSVxcXE+Pj5hYWFOIeuDAAAAAXRSTlMAQObYZgAAAGJJREFUeAF1z0mKw0AMhtGnKs+Ohwz3P2swJoWg6W/3VvpFbl2p5czuRnN2YYHpdbvvphnl3HeXPQMGyu1HcKEfsrc4ZIt3tjm25s9QI6rmqwW/e9GDtqf83fv/P7pjzIbkLwNnA3Y85ZObAAAAAElFTkSuQmCC); } - -.hidden, .ng-hide { display: none; } -.right { text-align: right; } -.center { text-align: center; } -.rightmargin { padding-right: 8px; } -.leftmargin { padding-left: 5px; } -.green { background-color: #00ff21; } -.lightgreen { background-color: #dcf4dc; } -.red { background-color: #f00; } -.lightred { background-color: #f7dede; } -.orange { background-color: #FFA500; } -.lightorange { background-color: #FFEFD5; } -.gray { background-color: #dcdcdc; } -.lightgray { color: #888888; } - -.ct-chart { position: relative; } -.ct-chart .ct-line { stroke-width: 2px !important; } -.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } -.ct-chart .ct-point:hover { stroke-width: 10px !important; } -.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} -.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} - -.tinylinecoveragechart, .tinybranchcoveragechart { margin-left: -3px; float: left; border: solid 1px #c1c1c1; width: 30px; height: 18px; } - -.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } -.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } - -.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } -.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } - -.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D;color: #453D3F; pointer-events: none; z-index: 1; } -.tooltip:after { content: ""; position: absolute; top: 100%; left: 50%; width: 0; height: 0; margin-left: -15px; border: 15px solid transparent; border-top-color: #F4C63D; } - -.column1324 { max-width: 1324px; } -.column674 { max-width: 674px; } -.column60 { width: 60px; } -.column70 { width: 70px; } -.column90 { width: 90px; } -.column98 { width: 98px; } -.column100 { width: 100px; } -.column105 { width: 105px; } -.column112 { width: 112px; } -.column135 { width: 135px; } - -.covered0 { width: 0px; } -.covered1 { width: 1px; } -.covered2 { width: 2px; } -.covered3 { width: 3px; } -.covered4 { width: 4px; } -.covered5 { width: 5px; } -.covered6 { width: 6px; } -.covered7 { width: 7px; } -.covered8 { width: 8px; } -.covered9 { width: 9px; } -.covered10 { width: 10px; } -.covered11 { width: 11px; } -.covered12 { width: 12px; } -.covered13 { width: 13px; } -.covered14 { width: 14px; } -.covered15 { width: 15px; } -.covered16 { width: 16px; } -.covered17 { width: 17px; } -.covered18 { width: 18px; } -.covered19 { width: 19px; } -.covered20 { width: 20px; } -.covered21 { width: 21px; } -.covered22 { width: 22px; } -.covered23 { width: 23px; } -.covered24 { width: 24px; } -.covered25 { width: 25px; } -.covered26 { width: 26px; } -.covered27 { width: 27px; } -.covered28 { width: 28px; } -.covered29 { width: 29px; } -.covered30 { width: 30px; } -.covered31 { width: 31px; } -.covered32 { width: 32px; } -.covered33 { width: 33px; } -.covered34 { width: 34px; } -.covered35 { width: 35px; } -.covered36 { width: 36px; } -.covered37 { width: 37px; } -.covered38 { width: 38px; } -.covered39 { width: 39px; } -.covered40 { width: 40px; } -.covered41 { width: 41px; } -.covered42 { width: 42px; } -.covered43 { width: 43px; } -.covered44 { width: 44px; } -.covered45 { width: 45px; } -.covered46 { width: 46px; } -.covered47 { width: 47px; } -.covered48 { width: 48px; } -.covered49 { width: 49px; } -.covered50 { width: 50px; } -.covered51 { width: 51px; } -.covered52 { width: 52px; } -.covered53 { width: 53px; } -.covered54 { width: 54px; } -.covered55 { width: 55px; } -.covered56 { width: 56px; } -.covered57 { width: 57px; } -.covered58 { width: 58px; } -.covered59 { width: 59px; } -.covered60 { width: 60px; } -.covered61 { width: 61px; } -.covered62 { width: 62px; } -.covered63 { width: 63px; } -.covered64 { width: 64px; } -.covered65 { width: 65px; } -.covered66 { width: 66px; } -.covered67 { width: 67px; } -.covered68 { width: 68px; } -.covered69 { width: 69px; } -.covered70 { width: 70px; } -.covered71 { width: 71px; } -.covered72 { width: 72px; } -.covered73 { width: 73px; } -.covered74 { width: 74px; } -.covered75 { width: 75px; } -.covered76 { width: 76px; } -.covered77 { width: 77px; } -.covered78 { width: 78px; } -.covered79 { width: 79px; } -.covered80 { width: 80px; } -.covered81 { width: 81px; } -.covered82 { width: 82px; } -.covered83 { width: 83px; } -.covered84 { width: 84px; } -.covered85 { width: 85px; } -.covered86 { width: 86px; } -.covered87 { width: 87px; } -.covered88 { width: 88px; } -.covered89 { width: 89px; } -.covered90 { width: 90px; } -.covered91 { width: 91px; } -.covered92 { width: 92px; } -.covered93 { width: 93px; } -.covered94 { width: 94px; } -.covered95 { width: 95px; } -.covered96 { width: 96px; } -.covered97 { width: 97px; } -.covered98 { width: 98px; } -.covered99 { width: 99px; } -.covered100 { width: 100px; } - - @media print { - html, body { background-color: #fff; } - .container { max-width: 100%; width: 100%; padding: 0; } - .overview colgroup col:first-child { width: 300px; } -} - -/* Chartist.js 0.6.0 - * Copyright © 2015 Gion Kunz - * Free to use under the WTFPL license. - * http://www.wtfpl.net/ - */ - .ct-chart .ct-label,.ct-chart .ct-label.ct-horizontal{display:block;width:100%;height:100%;fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;text-align:left}.ct-chart .ct-label.ct-vertical{display:block;width:100%;height:100%;fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;text-align:right}.ct-chart .ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-chart .ct-point{stroke-width:10px;stroke-linecap:round}.ct-chart .ct-line{fill:none;stroke-width:4px}.ct-chart .ct-area{stroke:none;fill-opacity:.1}.ct-chart .ct-bar{fill:none;stroke-width:10px}.ct-chart .ct-slice.ct-donut{fill:none;stroke-width:60px}.ct-chart .ct-series.ct-series-a .ct-bar,.ct-chart .ct-series.ct-series-a .ct-line,.ct-chart .ct-series.ct-series-a .ct-point,.ct-chart .ct-series.ct-series-a .ct-slice.ct-donut{stroke:#d70206}.ct-chart .ct-series.ct-series-a .ct-area,.ct-chart .ct-series.ct-series-a .ct-slice:not(.ct-donut){fill:#d70206}.ct-chart .ct-series.ct-series-b .ct-bar,.ct-chart .ct-series.ct-series-b .ct-line,.ct-chart .ct-series.ct-series-b .ct-point,.ct-chart .ct-series.ct-series-b .ct-slice.ct-donut{stroke:#f05b4f}.ct-chart .ct-series.ct-series-b .ct-area,.ct-chart .ct-series.ct-series-b .ct-slice:not(.ct-donut){fill:#f05b4f}.ct-chart .ct-series.ct-series-c .ct-bar,.ct-chart .ct-series.ct-series-c .ct-line,.ct-chart .ct-series.ct-series-c .ct-point,.ct-chart .ct-series.ct-series-c .ct-slice.ct-donut{stroke:#f4c63d}.ct-chart .ct-series.ct-series-c .ct-area,.ct-chart .ct-series.ct-series-c .ct-slice:not(.ct-donut){fill:#f4c63d}.ct-chart .ct-series.ct-series-d .ct-bar,.ct-chart .ct-series.ct-series-d .ct-line,.ct-chart .ct-series.ct-series-d .ct-point,.ct-chart .ct-series.ct-series-d .ct-slice.ct-donut{stroke:#d17905}.ct-chart .ct-series.ct-series-d .ct-area,.ct-chart .ct-series.ct-series-d .ct-slice:not(.ct-donut){fill:#d17905}.ct-chart .ct-series.ct-series-e .ct-bar,.ct-chart .ct-series.ct-series-e .ct-line,.ct-chart .ct-series.ct-series-e .ct-point,.ct-chart .ct-series.ct-series-e .ct-slice.ct-donut{stroke:#453d3f}.ct-chart .ct-series.ct-series-e .ct-area,.ct-chart .ct-series.ct-series-e .ct-slice:not(.ct-donut){fill:#453d3f}.ct-chart .ct-series.ct-series-f .ct-bar,.ct-chart .ct-series.ct-series-f .ct-line,.ct-chart .ct-series.ct-series-f .ct-point,.ct-chart .ct-series.ct-series-f .ct-slice.ct-donut{stroke:#59922b}.ct-chart .ct-series.ct-series-f .ct-area,.ct-chart .ct-series.ct-series-f .ct-slice:not(.ct-donut){fill:#59922b}.ct-chart .ct-series.ct-series-g .ct-bar,.ct-chart .ct-series.ct-series-g .ct-line,.ct-chart .ct-series.ct-series-g .ct-point,.ct-chart .ct-series.ct-series-g .ct-slice.ct-donut{stroke:#0544d3}.ct-chart .ct-series.ct-series-g .ct-area,.ct-chart .ct-series.ct-series-g .ct-slice:not(.ct-donut){fill:#0544d3}.ct-chart .ct-series.ct-series-h .ct-bar,.ct-chart .ct-series.ct-series-h .ct-line,.ct-chart .ct-series.ct-series-h .ct-point,.ct-chart .ct-series.ct-series-h .ct-slice.ct-donut{stroke:#6b0392}.ct-chart .ct-series.ct-series-h .ct-area,.ct-chart .ct-series.ct-series-h .ct-slice:not(.ct-donut){fill:#6b0392}.ct-chart .ct-series.ct-series-i .ct-bar,.ct-chart .ct-series.ct-series-i .ct-line,.ct-chart .ct-series.ct-series-i .ct-point,.ct-chart .ct-series.ct-series-i .ct-slice.ct-donut{stroke:#f05b4f}.ct-chart .ct-series.ct-series-i .ct-area,.ct-chart .ct-series.ct-series-i .ct-slice:not(.ct-donut){fill:#f05b4f}.ct-chart .ct-series.ct-series-j .ct-bar,.ct-chart .ct-series.ct-series-j .ct-line,.ct-chart .ct-series.ct-series-j .ct-point,.ct-chart .ct-series.ct-series-j .ct-slice.ct-donut{stroke:#dda458}.ct-chart .ct-series.ct-series-j .ct-area,.ct-chart .ct-series.ct-series-j .ct-slice:not(.ct-donut){fill:#dda458}.ct-chart .ct-series.ct-series-k .ct-bar,.ct-chart .ct-series.ct-series-k .ct-line,.ct-chart .ct-series.ct-series-k .ct-point,.ct-chart .ct-series.ct-series-k .ct-slice.ct-donut{stroke:#eacf7d}.ct-chart .ct-series.ct-series-k .ct-area,.ct-chart .ct-series.ct-series-k .ct-slice:not(.ct-donut){fill:#eacf7d}.ct-chart .ct-series.ct-series-l .ct-bar,.ct-chart .ct-series.ct-series-l .ct-line,.ct-chart .ct-series.ct-series-l .ct-point,.ct-chart .ct-series.ct-series-l .ct-slice.ct-donut{stroke:#86797d}.ct-chart .ct-series.ct-series-l .ct-area,.ct-chart .ct-series.ct-series-l .ct-slice:not(.ct-donut){fill:#86797d}.ct-chart .ct-series.ct-series-m .ct-bar,.ct-chart .ct-series.ct-series-m .ct-line,.ct-chart .ct-series.ct-series-m .ct-point,.ct-chart .ct-series.ct-series-m .ct-slice.ct-donut{stroke:#b2c326}.ct-chart .ct-series.ct-series-m .ct-area,.ct-chart .ct-series.ct-series-m .ct-slice:not(.ct-donut){fill:#b2c326}.ct-chart .ct-series.ct-series-n .ct-bar,.ct-chart .ct-series.ct-series-n .ct-line,.ct-chart .ct-series.ct-series-n .ct-point,.ct-chart .ct-series.ct-series-n .ct-slice.ct-donut{stroke:#6188e2}.ct-chart .ct-series.ct-series-n .ct-area,.ct-chart .ct-series.ct-series-n .ct-slice:not(.ct-donut){fill:#6188e2}.ct-chart .ct-series.ct-series-o .ct-bar,.ct-chart .ct-series.ct-series-o .ct-line,.ct-chart .ct-series.ct-series-o .ct-point,.ct-chart .ct-series.ct-series-o .ct-slice.ct-donut{stroke:#a748ca}.ct-chart .ct-series.ct-series-o .ct-area,.ct-chart .ct-series.ct-series-o .ct-slice:not(.ct-donut){fill:#a748ca}.ct-chart.ct-square{display:block;position:relative;width:100%}.ct-chart.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-chart.ct-square:after{content:"";display:table;clear:both}.ct-chart.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-second{display:block;position:relative;width:100%}.ct-chart.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-chart.ct-minor-second:after{content:"";display:table;clear:both}.ct-chart.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-second{display:block;position:relative;width:100%}.ct-chart.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-chart.ct-major-second:after{content:"";display:table;clear:both}.ct-chart.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-third{display:block;position:relative;width:100%}.ct-chart.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-chart.ct-minor-third:after{content:"";display:table;clear:both}.ct-chart.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-third{display:block;position:relative;width:100%}.ct-chart.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-chart.ct-major-third:after{content:"";display:table;clear:both}.ct-chart.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-chart.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-chart.ct-perfect-fourth:after{content:"";display:table;clear:both}.ct-chart.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-chart.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-chart.ct-perfect-fifth:after{content:"";display:table;clear:both}.ct-chart.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-sixth{display:block;position:relative;width:100%}.ct-chart.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-chart.ct-minor-sixth:after{content:"";display:table;clear:both}.ct-chart.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-golden-section{display:block;position:relative;width:100%}.ct-chart.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-chart.ct-golden-section:after{content:"";display:table;clear:both}.ct-chart.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-sixth{display:block;position:relative;width:100%}.ct-chart.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-chart.ct-major-sixth:after{content:"";display:table;clear:both}.ct-chart.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-seventh{display:block;position:relative;width:100%}.ct-chart.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-chart.ct-minor-seventh:after{content:"";display:table;clear:both}.ct-chart.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-seventh{display:block;position:relative;width:100%}.ct-chart.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-chart.ct-major-seventh:after{content:"";display:table;clear:both}.ct-chart.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-octave{display:block;position:relative;width:100%}.ct-chart.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-chart.ct-octave:after{content:"";display:table;clear:both}.ct-chart.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-tenth{display:block;position:relative;width:100%}.ct-chart.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-chart.ct-major-tenth:after{content:"";display:table;clear:both}.ct-chart.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-eleventh{display:block;position:relative;width:100%}.ct-chart.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-chart.ct-major-eleventh:after{content:"";display:table;clear:both}.ct-chart.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-twelfth{display:block;position:relative;width:100%}.ct-chart.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-chart.ct-major-twelfth:after{content:"";display:table;clear:both}.ct-chart.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-double-octave{display:block;position:relative;width:100%}.ct-chart.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-chart.ct-double-octave:after{content:"";display:table;clear:both}.ct-chart.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/report/run-coverlet-local.cmd b/report/run-coverlet-local.cmd new file mode 100644 index 00000000..a6a233c9 --- /dev/null +++ b/report/run-coverlet-local.cmd @@ -0,0 +1,6 @@ +set buildType=azure-pipelines-ci +dotnet test ..\test\System.Linq.Dynamic.Core.Tests\System.Linq.Dynamic.Core.Tests.csproj -c Debug -f netcoreapp2.1 /p:CollectCoverage=true /p:CoverletOutputFormat=\"opencover,lcov\" /p:CoverletOutput="../../report/" + +%USERPROFILE%\.nuget\packages\ReportGenerator\3.1.2\tools\ReportGenerator.exe -reports:"coverage.opencover.xml" -targetdir:"coverlet" + +start coverlet\index.htm diff --git a/src/EntityFramework.DynamicLinq/EntityFramework.DynamicLinq.csproj b/src/EntityFramework.DynamicLinq/EntityFramework.DynamicLinq.csproj index 80870edc..fef55efc 100644 --- a/src/EntityFramework.DynamicLinq/EntityFramework.DynamicLinq.csproj +++ b/src/EntityFramework.DynamicLinq/EntityFramework.DynamicLinq.csproj @@ -1,60 +1,60 @@  - - Dynamic Linq extensions for EntityFramework which adds Async support - EntityFramework.DynamicLinq - 1.0.9.0 - Stef Heyenrath - net45;net46 - EF - true - EntityFramework.DynamicLinq - EntityFramework.DynamicLinq.snk - true - true - system;linq;dynamic;entityframework;core;async - Bugfixes and new Features. For details see CHANGELOG.md - https://github.com/StefH/System.Linq.Dynamic.Core - https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt - git - https://github.com/StefH/System.Linq.Dynamic.Core - false - false - false - false - false - false - false - en-us - {D3804228-91F4-4502-9595-39584E510000} - full - + + Dynamic Linq extensions for EntityFramework which adds Async support + EntityFramework.DynamicLinq + + Stef Heyenrath + net45;net46 + EF + true + EntityFramework.DynamicLinq + EntityFramework.DynamicLinq.snk + true + true + system;linq;dynamic;entityframework;core;async + Bugfixes and new Features. For details see CHANGELOG.md + https://github.com/StefH/System.Linq.Dynamic.Core + https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt + git + https://github.com/StefH/System.Linq.Dynamic.Core + false + false + false + false + false + false + false + en-us + {D3804228-91F4-4502-9595-39584E510000} + full + - - True - True - $(MSBuildProjectDirectory)=/ - true - - - - - - - - - - - - - - - - - - - - - - - + + True + True + $(MSBuildProjectDirectory)=/ + true + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Microsoft.EntityFrameworkCore.DynamicLinq/Microsoft.EntityFrameworkCore.DynamicLinq.csproj b/src/Microsoft.EntityFrameworkCore.DynamicLinq/Microsoft.EntityFrameworkCore.DynamicLinq.csproj index 44a4c215..7b190ee4 100644 --- a/src/Microsoft.EntityFrameworkCore.DynamicLinq/Microsoft.EntityFrameworkCore.DynamicLinq.csproj +++ b/src/Microsoft.EntityFrameworkCore.DynamicLinq/Microsoft.EntityFrameworkCore.DynamicLinq.csproj @@ -1,113 +1,117 @@  - - Dynamic Linq extensions for Microsoft.EntityFrameworkCore which adds Async support - Microsoft.EntityFrameworkCore.DynamicLinq - 1.0.9.0 - Stef Heyenrath - net451;net46;netstandard1.3;netstandard2.0;uap10.0 - $(DefineConstants);EFCORE - true - Microsoft.EntityFrameworkCore.DynamicLinq - Microsoft.EntityFrameworkCore.DynamicLinq.snk - true - true - system;linq;dynamic;entityframework;core;async - Bugfixes and new Features. For details see CHANGELOG.md - https://github.com/StefH/System.Linq.Dynamic.Core - https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt - git - https://github.com/StefH/System.Linq.Dynamic.Core - $(PackageTargetFallback);dotnet5.4;portable-win81+wp81;portable-net45+wp8;portable-net45+win8+wp8;portable-wp81+wpa81;portable-win81+wp81+wpa81;portable-net45+win8+wpa81+wp8;portable-net45+win8;portable-net45+win8+wpa81;portable-win81+wpa81;portable-net451+win81;portable-net451+win81+wpa81 - false - false - false - false - false - false - false - en-us - {D3804228-91F4-4502-9595-39584E510001} - full - + + Dynamic Linq extensions for Microsoft.EntityFrameworkCore which adds Async support + Microsoft.EntityFrameworkCore.DynamicLinq + + Stef Heyenrath + net451;net46;netstandard1.3;netstandard2.0;uap10.0 + $(DefineConstants);EFCORE + true + Microsoft.EntityFrameworkCore.DynamicLinq + Microsoft.EntityFrameworkCore.DynamicLinq.snk + true + true + system;linq;dynamic;entityframework;core;async + Bugfixes and new Features. For details see CHANGELOG.md + https://github.com/StefH/System.Linq.Dynamic.Core + https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt + git + https://github.com/StefH/System.Linq.Dynamic.Core + $(PackageTargetFallback);dotnet5.4;portable-win81+wp81;portable-net45+wp8;portable-net45+win8+wp8;portable-wp81+wpa81;portable-win81+wp81+wpa81;portable-net45+win8+wpa81+wp8;portable-net45+win8;portable-net45+win8+wpa81;portable-win81+wpa81;portable-net451+win81;portable-net451+win81+wpa81 + false + false + false + false + false + false + false + en-us + {D3804228-91F4-4502-9595-39584E510001} + full + - - True - True - $(MSBuildProjectDirectory)=/ - true - + + net451;net46;netstandard1.3;netstandard2.0 + - - false - UAP,Version=v10.0 - UAP - 10.0.14393.0 - 10.0.10240.0 - .NETCore - v5.0 - $(DefineConstants);WINDOWS_UWP;UAP10_0 - $(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets - + + True + True + $(MSBuildProjectDirectory)=/ + true + - - $(DefineConstants);NETSTANDARD - + + false + UAP,Version=v10.0 + UAP + 10.0.14393.0 + 10.0.10240.0 + .NETCore + v5.0 + $(DefineConstants);WINDOWS_UWP;UAP10_0 + $(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + $(DefineConstants);NETSTANDARD + - - - + + + + + + - - - + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.AppVeyor.csproj b/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.AppVeyor.csproj index 0417c66c..f9c25d6d 100644 --- a/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.AppVeyor.csproj +++ b/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.AppVeyor.csproj @@ -2,9 +2,9 @@ This is a .NETStandard/ .NET Core port of the the Microsoft assembly for the .Net 4.0 Dynamic language functionality. System.Linq.Dynamic.Core - 1.0.8.15 + 1.0.9.0 Microsoft;Scott Guthrie;King Wilder;Nathan Arnott;Stef Heyenrath - net35;net40;net45;net46;netstandard1.3;netstandard2.0 + net40;net45;net46;netstandard1.3;netstandard2.0 true System.Linq.Dynamic.Core System.Linq.Dynamic.Core.snk @@ -16,15 +16,6 @@ https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt git https://github.com/StefH/System.Linq.Dynamic.Core - false - false - false - false - false - false - false - false - false en-us {D3804228-91F4-4502-9595-39584E510002} full diff --git a/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.csproj b/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.csproj index 0e64eb85..ab8934c3 100644 --- a/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.csproj +++ b/src/System.Linq.Dynamic.Core/System.Linq.Dynamic.Core.csproj @@ -1,122 +1,100 @@  - - This is a .NETStandard/ .NET Core port of the the Microsoft assembly for the .Net 4.0 Dynamic language functionality. - System.Linq.Dynamic.Core - 1.0.9.0 - Microsoft;Scott Guthrie;King Wilder;Nathan Arnott;Stef Heyenrath - net35;net40;net45;net46;netstandard1.3;netstandard2.0;uap10.0 - true - System.Linq.Dynamic.Core - System.Linq.Dynamic.Core.snk - true - true - system;linq;dynamic;core;dotnet;NETCoreApp;NETStandard - Bugfixes and new Features. For details see CHANGELOG.md - https://github.com/StefH/System.Linq.Dynamic.Core - https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt - git - https://github.com/StefH/System.Linq.Dynamic.Core - en-us - {D3804228-91F4-4502-9595-39584E510002} - full - - - - True - True - $(MSBuildProjectDirectory)=/ - true - - - - NET35 - - - - NETSTANDARD - - - - false - UAP,Version=v10.0 - UAP - 10.0.14393.0 - 10.0.10240.0 - .NETCore - v5.0 - $(DefineConstants);WINDOWS_UWP;UAP10_0 - $(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets - - - - Silverlight,Version=v5.0 - Silverlight - v5.0 - SL50;SILVERLIGHT - $(MSBuildProgramFiles32)\MSBuild\Microsoft\Silverlight\v5.0\Microsoft.Silverlight.CSharp.targets - - - - - - - - - - - - - - 1.1.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + This is a .NETStandard/ .NET Core port of the the Microsoft assembly for the .Net 4.0 Dynamic language functionality. + System.Linq.Dynamic.Core + + Microsoft;Scott Guthrie;King Wilder;Nathan Arnott;Stef Heyenrath + net35;net40;net45;net46;netstandard1.3;netstandard2.0;uap10.0 + true + System.Linq.Dynamic.Core + System.Linq.Dynamic.Core.snk + true + true + system;linq;dynamic;core;dotnet;NETCoreApp;NETStandard + Bugfixes and new Features. For details see CHANGELOG.md + https://github.com/StefH/System.Linq.Dynamic.Core + https://github.com/StefH/System.Linq.Dynamic.Core/blob/master/licence.txt + git + https://github.com/StefH/System.Linq.Dynamic.Core + en-us + {D3804228-91F4-4502-9595-39584E510002} + full + + + + net40;net45;net46;netstandard1.3;netstandard2.0 + + + + True + True + $(MSBuildProjectDirectory)=/ + true + + + + NETSTANDARD + + + + false + UAP,Version=v10.0 + UAP + 10.0.14393.0 + 10.0.10240.0 + .NETCore + v5.0 + $(DefineConstants);WINDOWS_UWP;UAP10_0 + $(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets + + + + + + + + + 1.1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/System.Linq.Dynamic.Core.Tests/DefaultDynamicLinqCustomTypeProviderTests.cs b/test/System.Linq.Dynamic.Core.Tests/DefaultDynamicLinqCustomTypeProviderTests.cs index 06381028..1195af40 100644 --- a/test/System.Linq.Dynamic.Core.Tests/DefaultDynamicLinqCustomTypeProviderTests.cs +++ b/test/System.Linq.Dynamic.Core.Tests/DefaultDynamicLinqCustomTypeProviderTests.cs @@ -1,4 +1,4 @@ -#if !NETSTANDARD +#if NET452 using System.Linq.Dynamic.Core.CustomTypeProviders; using NFluent; using Xunit; diff --git a/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs b/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs index 5fd4b004..6ef56bc5 100644 --- a/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs +++ b/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs @@ -525,7 +525,7 @@ public void ExpressionTests_DoubleQualifiers_Negative() public void ExpressionTests_Enum() { var config = new ParsingConfig(); -#if NETSTANDARD +#if NETCOREAPP config.CustomTypeProvider = new NetStandardCustomTypeProvider(); #endif @@ -582,7 +582,7 @@ public void ExpressionTests_Enum() public void ExpressionTests_ConfigExtensions() { var config = new ParsingConfig(); -#if NETSTANDARD +#if NETCOREAPP config.CustomTypeProvider = new NetStandardCustomTypeProvider(); #endif diff --git a/test/System.Linq.Dynamic.Core.Tests/NetStandardCustomTypeProvider.cs b/test/System.Linq.Dynamic.Core.Tests/NetStandardCustomTypeProvider.cs index 43d5981f..c903e0d2 100644 --- a/test/System.Linq.Dynamic.Core.Tests/NetStandardCustomTypeProvider.cs +++ b/test/System.Linq.Dynamic.Core.Tests/NetStandardCustomTypeProvider.cs @@ -9,7 +9,7 @@ public HashSet GetCustomTypes() { var thisType = GetType(); -#if NETSTANDARD +#if NETCORE1_1 var assemblies = AppDomain.NetCoreApp.AppDomain.CurrentDomain.GetAssemblies(thisType).Where(x => !x.IsDynamic).ToArray(); #else var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray(); @@ -21,7 +21,7 @@ public Type ResolveType(string typeName) { var thisType = GetType(); -#if NETSTANDARD +#if NETCORE1_1 var assemblies = AppDomain.NetCoreApp.AppDomain.CurrentDomain.GetAssemblies(thisType).ToArray(); #else var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray(); diff --git a/test/System.Linq.Dynamic.Core.Tests/QueryableTests.Select.cs b/test/System.Linq.Dynamic.Core.Tests/QueryableTests.Select.cs index 7d601bac..307dfbd4 100644 --- a/test/System.Linq.Dynamic.Core.Tests/QueryableTests.Select.cs +++ b/test/System.Linq.Dynamic.Core.Tests/QueryableTests.Select.cs @@ -7,7 +7,7 @@ using Xunit; using NFluent; #if EFCORE -using Microsoft.AspNetCore.Identity.EntityFrameworkCore; +using Microsoft.AspNetCore.Identity; #else using Microsoft.AspNet.Identity.EntityFramework; #endif @@ -269,7 +269,7 @@ public void Select_Dynamic_IntoTypeWithNullableProperties2() public void Select_Dynamic_IntoKnownNestedType() { var config = new ParsingConfig { AllowNewToEvaluateAnyType = true }; -#if NETSTANDARD +#if NETCOREAPP config.CustomTypeProvider = new NetStandardCustomTypeProvider(); #endif // Assign @@ -287,7 +287,7 @@ public void Select_Dynamic_IntoKnownNestedType() public void Select_Dynamic_IntoKnownNestedTypeSecondLevel() { var config = new ParsingConfig { AllowNewToEvaluateAnyType = true }; -#if NETSTANDARD +#if NETCOREAPP config.CustomTypeProvider = new NetStandardCustomTypeProvider(); #endif diff --git a/test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj b/test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj index f09d1ec2..303e42b2 100644 --- a/test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj +++ b/test/System.Linq.Dynamic.Core.Tests/System.Linq.Dynamic.Core.Tests.csproj @@ -1,7 +1,7 @@  Stef Heyenrath - netcoreapp1.1 + net452;netcoreapp2.1 System.Linq.Dynamic.Core.Tests full True @@ -15,55 +15,41 @@ - - + + all + runtime; build; native; contentfiles; analyzers + + - - - - - 10.0.3 - - - 1.0.4 - - - 1.0.6 + + + all + runtime; build; native; contentfiles; analyzers - - 2.3.1 + + all + runtime; build; native; contentfiles; analyzers + + + + - + + - - - - - 4.3.0 - - - 4.3.0 - - - 1.1.1 - - - 1.1.1 - - - 1.1.1 - - - 1.1.1 - + + + + + @@ -72,7 +58,7 @@ - - $(DefineConstants);NETSTANDARD;EFCORE + + $(DefineConstants);NETCOREAPP;EFCORE \ No newline at end of file