static void AddMethodToTypeDeclaration(CodeTypeDeclaration typeDeclaration, MethodDefinition member, AttributeFilter attributeFilter) { var attributes = member.GetMethodAttributes(); if (!ShouldIncludeMember(attributes)) { return; } if (member.IsSpecialName && !member.Name.StartsWith("op_")) { return; } var returnType = member.ReturnType.CreateCodeTypeReference(member.MethodReturnType); if (member.ReturnType.IsUnsafeSignatureType() || member.Parameters.Any(p => p.ParameterType.IsUnsafeSignatureType())) { returnType = returnType.MakeUnsafe(); } var method = new CodeMemberMethod { Name = CSharpOperatorKeyword.Get(member.Name), Attributes = attributes, CustomAttributes = CreateCustomAttributes(member, attributeFilter), ReturnType = returnType, }; PopulateCustomAttributes(member.MethodReturnType, method.ReturnTypeCustomAttributes, attributeFilter); PopulateGenericParameters(member, method.TypeParameters, attributeFilter, _ => true); PopulateMethodParameters(member, method.Parameters, attributeFilter, member.IsExtensionMethod()); typeDeclaration.Members.Add(method); }
public static string AugmentMethodNameWithMethodModifierMarkerTemplate(MethodDefinition methodDefinition, MemberAttributes attributes) { var name = CSharpOperatorKeyword.Get(methodDefinition.Name); if (methodDefinition.DeclaringType.IsInterface) { return(name); } var isNew = methodDefinition.IsNew(typeDef => typeDef?.Methods, e => e.Name.Equals(methodDefinition.Name, StringComparison.Ordinal) && e.Parameters.Count == methodDefinition.Parameters.Count && e.Parameters.SequenceEqual(methodDefinition.Parameters, new ParameterTypeComparer())); return(ModifierMarkerNameBuilder.Build(methodDefinition, attributes, isNew, name, CodeNormalizer.MethodModifierMarkerTemplate)); }