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); }