private class ImportingVisitor()

in src/Refasmer/Importer/SignatureImport.cs [21:47]


    private class ImportingVisitor(
        MetadataReader metadataReader,
        MetadataImporter metadataImporter) : ISignatureVisitor<BlobHandle>
    {
        private BlobBuilder? _blobBuilder;
        private BlobBuilder BlobBuilder =>
            _blobBuilder ?? throw new InvalidOperationException("Blob builder is not defined yet.");
        public void VisitReader(BlobReader reader)
        {
            _blobBuilder = new BlobBuilder(reader.Length);
        }

        public void WriteByte(byte @byte) => BlobBuilder.WriteByte(@byte);
        public void WriteCompressedInteger(int integer) => BlobBuilder.WriteCompressedInteger(integer);
        public void WriteCompressedSignedInteger(int integer) => BlobBuilder.WriteCompressedSignedInteger(integer);

        public void VisitTypeHandle(EntityHandle srcHandle)
        {
            var dstHandle = metadataImporter.Import(srcHandle);
            if (dstHandle.IsNil)
                throw new UnknownTypeInSignature(srcHandle, $"Unknown type in signature: {metadataReader.ToString(srcHandle)}");

            WriteCompressedInteger(CodedIndex.TypeDefOrRefOrSpec(dstHandle));
        }

        public BlobHandle GetResult() => metadataImporter._builder.GetOrAddBlob(BlobBuilder);
    }