示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
    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;
    }