示例#1
0
文件: Finder.cs 项目: QsCompany/Qs
        public Heritachy <Class> GetClass(IList <string> hers)
        {
            HeritachyType tmp;

            if (hers == null || hers.Count == 0)
            {
                return(null);
            }
            if (hers.Count == 1)
            {
                return(new Heritachy <Class>(tmp = new HeritachyType(hers[0], GetClass(hers[0])), (Class)tmp.Scop));
            }
            var space = GetSpace(hers[0]);

            if (space == null)
            {
                return(null);
            }
            var h = new Heritachy <Class>(tmp = new HeritachyType(null, hers[0], space), null);

            for (var i = 1; i < hers.Count - 1; i++)
            {
                space = space.GetSpace(hers[i], SearcheMode.Flaten);
                if (space == null)
                {
                    return(null);
                }
                tmp = tmp.Add(hers[i], space);
            }
            var @class = space.GetClass(hers[hers.Count - 1], SearcheMode.Flaten);

            if (@class != null)
            {
                tmp.Add(hers[hers.Count - 1], @class);
            }
            else
            {
                return(null);
            }
            h.main = @class;
            return(h);
        }
示例#2
0
文件: Finder.cs 项目: QsCompany/Qs
        public MethodCallHiretachy GetMethod(IList <string> hers, IList <Class> @params)
        {
            if (hers == null || hers.Count == 0)
            {
                return(null);
            }
            var           deb = hers[0];
            HeritachyType tmp;

            if (hers.Count == 1)
            {
                var method = GetMethod(deb, @params);
                return(new MethodCallHiretachy(new HeritachyType(deb, method), method));
            }
            Var var;
            MethodCallHiretachy h = null;
            Scop scop;

            if ((var = GetVariable(deb)) != null)
            {
                h    = new MethodCallHiretachy(tmp = new HeritachyType(deb, var), null);
                scop = var.Return;
                for (var i = 1; i < hers.Count - 1; i++)
                {
                    var t = scop.GetField(hers[i], SearcheMode.Flaten);
                    if (t == null)
                    {
                        return(null);
                    }
                    var.Push(t);
                    scop = t.Return;
                    tmp  = tmp.Add(hers[i], t);
                }
                if (scop == null)
                {
                    return(null);
                }
                tmp.Add(hers[hers.Count - 1], h.main = scop.GetMethod(hers[hers.Count - 1], @params));
            }
            else if ((scop = GetClass(deb)) != null)
            {
                h = new MethodCallHiretachy(tmp = new HeritachyType(deb, scop));
                tmp.Add(hers[hers.Count - 1], h.main = hers.Count != 2 ? null : scop.GetMethod(hers[1], @params));
            }
            else if ((scop = GetSpace(deb)) != null)
            {
                h = new MethodCallHiretachy(tmp = new HeritachyType(deb, scop));
                for (var i = 1; i < hers.Count - 2; i++)
                {
                    if ((scop = scop.GetSpace(hers[i], SearcheMode.Flaten)) == null)
                    {
                        return(null);
                    }
                    else
                    {
                        tmp = tmp.Add(hers[i], scop);
                    }
                }
                tmp = tmp.Add(hers[hers.Count - 2], scop = scop.GetClass(hers[hers.Count - 2], SearcheMode.Flaten));
                if (scop == null)
                {
                    return(null);
                }
                tmp.Add(hers[hers.Count - 1], h.main = scop.GetMethod(hers[hers.Count - 1], @params));
            }
            return(h);
        }