< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 19
Coverable lines: 19
Total lines: 50
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
ConvertToHandle(...)0%440%
ConvertToTag(...)0%660%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/Internal/HasDeclSecurityTag.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Runtime.CompilerServices;
 5
 6namespace System.Reflection.Metadata.Ecma335
 7{
 8    internal static class HasDeclSecurityTag
 9    {
 10        internal const int NumberOfBits = 2;
 11        internal const int LargeRowSize = 0x00000001 << (16 - NumberOfBits);
 12        internal const uint TypeDef = 0x00000000;
 13        internal const uint MethodDef = 0x00000001;
 14        internal const uint Assembly = 0x00000002;
 15        internal const uint TagMask = 0x00000003;
 16        internal const TableMask TablesReferenced =
 17          TableMask.TypeDef
 18          | TableMask.MethodDef
 19          | TableMask.Assembly;
 20        internal const uint TagToTokenTypeByteVector = (TokenTypeIds.TypeDef >> 24) | (TokenTypeIds.MethodDef >> 16) | (
 21
 22        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 23        internal static EntityHandle ConvertToHandle(uint hasDeclSecurity)
 024        {
 025            uint tokenType = (TagToTokenTypeByteVector >> ((int)(hasDeclSecurity & TagMask) << 3)) << TokenTypeIds.RowId
 026            uint rowId = (hasDeclSecurity >> NumberOfBits);
 27
 028            if (tokenType == 0 || (rowId & ~TokenTypeIds.RIDMask) != 0)
 029            {
 030                Throw.InvalidCodedIndex();
 31            }
 32
 033            return new EntityHandle(tokenType | rowId);
 034        }
 35
 36        internal static uint ConvertToTag(EntityHandle handle)
 037        {
 038            uint tokenType = handle.Type;
 039            uint rowId = (uint)handle.RowId;
 040            return (tokenType >> TokenTypeIds.RowIdBitCount) switch
 041            {
 042                TokenTypeIds.TypeDef >> TokenTypeIds.RowIdBitCount => rowId << NumberOfBits | TypeDef,
 043                TokenTypeIds.MethodDef >> TokenTypeIds.RowIdBitCount => rowId << NumberOfBits | MethodDef,
 044                TokenTypeIds.Assembly >> TokenTypeIds.RowIdBitCount => rowId << NumberOfBits | Assembly,
 045                _ => 0,
 046            };
 047        }
 48    }
 49}
 50