private Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember[] GetSignatureOverloads(Microsoft.RestrictedUsage.CSharp.Semantics.CSharpType declType, IList <ISignature> signatures, Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember semanticMember) { Contract.Requires(signatures != null); Contract.Requires(declType != null); Contract.Requires(semanticMember != null); if (signatures.Count == 1 || declType.Members == null) { return(new[] { semanticMember }); } var result = new Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember[signatures.Count]; for (int i = 0; i < declType.Members.Count; i++) { var mem = declType.Members[i]; if (mem == null || !(mem.IsMethod || mem.IsConstructor || mem.IsIndexer)) { continue; } if (mem.Name != semanticMember.Name) { continue; } if (mem.IsStatic != semanticMember.IsStatic) { continue; } FuzzyIdentifySignature(mem, result, signatures); } return(result); }
private void FuzzyIdentifySignature(Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember mem, Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember[] result, [Pure] IList <ISignature> signatures) { Contract.Requires(signatures != null); Contract.Requires(result != null); Contract.Requires(result.Length >= signatures.Count); Contract.Requires(mem != null); for (int i = 0; i < signatures.Count; i++) { if (result[i] != null) { continue; } var sig = signatures[i]; if (sig == null) { continue; } if (sig.Parameters == null) { continue; } if (mem.Parameters == null) { continue; } if (sig.Parameters.Count != mem.Parameters.Count) { continue; } var match = true; for (int j = 0; j < mem.Parameters.Count; j++) { var p = mem.Parameters[j]; var s = sig.Parameters[j]; if (p == null || p.Name == null || s == null || p.Name.Text != s.Name) { match = false; break; } // need to compare types, but how. Sig doesn't seem to give it to us } if (!match) { continue; } result[i] = mem; break; } }
private Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember[] GetSignatureOverloads(Microsoft.RestrictedUsage.CSharp.Semantics.CSharpType declType, IList<ISignature> signatures, Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember semanticMember) { Contract.Requires(signatures != null); Contract.Requires(declType != null); Contract.Requires(semanticMember != null); if (signatures.Count == 1 || declType.Members == null) { return new[] { semanticMember }; } var result = new Microsoft.RestrictedUsage.CSharp.Semantics.CSharpMember[signatures.Count]; for (int i = 0; i < declType.Members.Count; i++) { var mem = declType.Members[i]; if (mem == null || !(mem.IsMethod || mem.IsConstructor || mem.IsIndexer)) continue; if (mem.Name != semanticMember.Name) continue; if (mem.IsStatic != semanticMember.IsStatic) continue; FuzzyIdentifySignature(mem, result, signatures); } return result; }