< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 71
Coverable lines: 71
Total lines: 151
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
GetEnumerator()100%110%
System.Collections.Generic.IEnumerable<System.Reflection.Metadata.ImportDefinition>.GetEnumerator()100%110%
System.Collections.IEnumerable.GetEnumerator()100%110%
.ctor(...)100%110%
MoveNext()0%12120%
Reset()100%110%
System.IDisposable.Dispose()100%110%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/PortablePdb/ImportDefinitionCollection.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.Collections;
 5using System.Collections.Generic;
 6using System.Diagnostics;
 7using System.Reflection.Internal;
 8using System.Reflection.Metadata.Ecma335;
 9
 10namespace System.Reflection.Metadata
 11{
 12    public readonly struct ImportDefinitionCollection : IEnumerable<ImportDefinition>
 13    {
 14        private readonly MemoryBlock _block;
 15
 16        internal ImportDefinitionCollection(MemoryBlock block)
 017        {
 018            _block = block;
 019        }
 20
 21        public Enumerator GetEnumerator()
 022        {
 023            return new Enumerator(_block);
 024        }
 25
 26        IEnumerator<ImportDefinition> IEnumerable<ImportDefinition>.GetEnumerator()
 027        {
 028            return GetEnumerator();
 029        }
 30
 31        IEnumerator IEnumerable.GetEnumerator()
 032        {
 033            return GetEnumerator();
 034        }
 35
 36        public struct Enumerator : IEnumerator<ImportDefinition>
 37        {
 38            private BlobReader _reader;
 39            private ImportDefinition _current;
 40
 41            internal Enumerator(MemoryBlock block)
 042            {
 043                _reader = new BlobReader(block);
 044                _current = default(ImportDefinition);
 045            }
 46
 47            /// <exception cref="BadImageFormatException">Invalid blob format.</exception>
 48            public bool MoveNext()
 049            {
 050                if (_reader.RemainingBytes == 0)
 051                {
 052                    return false;
 53                }
 54
 055                var kind = (ImportDefinitionKind)_reader.ReadByte();
 56
 057                switch (kind)
 58                {
 59                    case ImportDefinitionKind.ImportType:
 060                        _current = new ImportDefinition(
 061                            kind,
 062                            typeOrNamespace: _reader.ReadTypeHandle());
 63
 064                        break;
 65
 66                    case ImportDefinitionKind.ImportNamespace:
 067                        _current = new ImportDefinition(
 068                            kind,
 069                            typeOrNamespace: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()));
 70
 071                        break;
 72
 73                    case ImportDefinitionKind.ImportAssemblyNamespace:
 074                        _current = new ImportDefinition(
 075                            kind,
 076                            assembly: MetadataTokens.AssemblyReferenceHandle(_reader.ReadCompressedInteger()),
 077                            typeOrNamespace: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()));
 78
 079                        break;
 80
 81                    case ImportDefinitionKind.ImportAssemblyReferenceAlias:
 082                        _current = new ImportDefinition(
 083                            kind,
 084                            alias: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()));
 85
 086                        break;
 87
 88                    case ImportDefinitionKind.AliasAssemblyReference:
 089                        _current = new ImportDefinition(
 090                            kind,
 091                            alias: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()),
 092                            assembly: MetadataTokens.AssemblyReferenceHandle(_reader.ReadCompressedInteger()));
 93
 094                        break;
 95
 96                    case ImportDefinitionKind.AliasType:
 097                        _current = new ImportDefinition(
 098                            kind,
 099                            alias: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()),
 0100                            typeOrNamespace: _reader.ReadTypeHandle());
 101
 0102                        break;
 103
 104                    case ImportDefinitionKind.ImportXmlNamespace:
 105                    case ImportDefinitionKind.AliasNamespace:
 0106                        _current = new ImportDefinition(
 0107                            kind,
 0108                            alias: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()),
 0109                            typeOrNamespace: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()));
 110
 0111                        break;
 112
 113                    case ImportDefinitionKind.AliasAssemblyNamespace:
 0114                        _current = new ImportDefinition(
 0115                            kind,
 0116                            alias: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()),
 0117                            assembly: MetadataTokens.AssemblyReferenceHandle(_reader.ReadCompressedInteger()),
 0118                            typeOrNamespace: MetadataTokens.BlobHandle(_reader.ReadCompressedInteger()));
 119
 0120                        break;
 121
 122                    default:
 0123                        throw new BadImageFormatException(SR.Format(SR.InvalidImportDefinitionKind, kind));
 124                }
 125
 0126                return true;
 0127            }
 128
 129            public ImportDefinition Current
 130            {
 0131                get { return _current; }
 132            }
 133
 134            object IEnumerator.Current
 135            {
 0136                get { return _current; }
 137            }
 138
 139            public void Reset()
 0140            {
 0141                _reader.Reset();
 0142                _current = default(ImportDefinition);
 0143            }
 144
 145            void IDisposable.Dispose()
 0146            {
 0147            }
 148        }
 149    }
 150}
 151