private string CompareFieldSignatures(FieldSignature sourceSignature, FieldSignature targetSignature)
        {
            if (!sourceSignature.CustomModifiers.IsEmpty || !targetSignature.CustomModifiers.IsEmpty)
            {
                throw new NotImplementedException();
            }

            return(CompareTypeSignatures(sourceSignature.Type, targetSignature.Type));
        }
        private Mapping <FieldDefinitionHandle> MapFieldDefinitionImpl(FieldDefinitionHandle handle)
        {
            FieldDefinition fieldDefinition = _sourceMetadata.GetFieldDefinition(handle);

            // Map the parent
            Mapping <TypeDefinitionHandle> declaringTypeMapping = MapTypeDefinition(fieldDefinition.GetDeclaringType());

            if (declaringTypeMapping.Target.IsNil)
            {
                return(new Mapping <FieldDefinitionHandle>());
            }

            string fieldName = _sourceMetadata.GetString(fieldDefinition.Name);

            TypeDefinition targetDeclaringType = _targetMetadata.GetTypeDefinition(declaringTypeMapping.Target);

            foreach (var targetHandle in targetDeclaringType.GetFields())
            {
                var targetField = _targetMetadata.GetFieldDefinition(targetHandle);
                if (!_targetMetadata.StringComparer.Equals(targetField.Name, fieldName))
                {
                    continue;
                }

                // The name matches. If the signature matches, return in Target; otherwise, return in CandidateTargets.
                FieldSignature sourceSignature = _sourceMetadata.GetSignature(fieldDefinition);
                FieldSignature targetSignature = _targetMetadata.GetSignature(targetField);
                string         candidateReason = CompareFieldSignatures(sourceSignature, targetSignature);
                if (candidateReason == null)
                {
                    return(new Mapping <FieldDefinitionHandle>(targetHandle));
                }

                var candidateTargets = ImmutableArray.Create(targetHandle);
                var candidateReasons = ImmutableArray.Create(candidateReason);
                return(new Mapping <FieldDefinitionHandle>(candidateTargets, candidateReasons));
            }

            // No field with this name was located.
            return(new Mapping <FieldDefinitionHandle>());
        }
        private string CompareFieldSignatures(FieldSignature sourceSignature, FieldSignature targetSignature)
        {
            if (!sourceSignature.CustomModifiers.IsEmpty || !targetSignature.CustomModifiers.IsEmpty)
                throw new NotImplementedException();

            return CompareTypeSignatures(sourceSignature.Type, targetSignature.Type);
        }
        private bool IsSameFieldSignature(MetadataReader referenceMetadata, MetadataReader newMetadata, FieldSignature referenceSignature, FieldSignature newSignature)
        {
            if (!referenceSignature.CustomModifiers.IsEmpty || !newSignature.CustomModifiers.IsEmpty)
                throw new NotImplementedException();

            return IsSameTypeSignature(referenceMetadata, newMetadata, referenceSignature.Type, newSignature.Type);
        }