private MethodDefinitionHandle CreateCustomReferenceAssemblyAttributeCtor()

in src/Refasmer/Importer/ReferenceAssemblyAttr.cs [31:69]


    private MethodDefinitionHandle CreateCustomReferenceAssemblyAttributeCtor()
    {
        MethodDefinitionHandle ctorHandle = default;
            
        EntityHandle objectHandle = default;
                
        if (IsNil(objectHandle))
            objectHandle = _reader.TypeReferences
                .FirstOrDefault(h => _reader.GetFullname(h) == FullNames.Object);

        if (IsNil(objectHandle))
            objectHandle = _reader.TypeDefinitions
                .FirstOrDefault(h => _reader.GetFullname(h) == FullNames.Object);

        if (!IsNil(objectHandle))
        {
            Trace?.Invoke($"Found System::Object type {_reader.ToString(objectHandle)}");
            objectHandle = Import(objectHandle);
                    
            _builder.AddTypeDefinition(TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.NotPublic,
                _builder.GetOrAddString(FullNames.CompilerServices),
                _builder.GetOrAddString("ReferenceAssemblyAttribute"),
                objectHandle, NextFieldHandle(), NextMethodHandle());

            ctorHandle = _builder.AddMethodDefinition(
                MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName |
                MethodAttributes.RTSpecialName,
                MethodImplAttributes.Managed, _builder.GetOrAddString(".ctor"), _builder.GetOrAddBlob(VoidCtorSignatureBlob), -1,
                NextParameterHandle());

            Trace?.Invoke($"Created attribute constructor with void signature {RowId(ctorHandle)}");
        }
        else
        {
            Trace?.Invoke("Not found System::Object type");
        }

        return ctorHandle;
    }