public static Jint_Function jintFunction(this Jint_Visitor jintVisitor, MethodCall methodCall)
        {
            var jintFunction = new Jint_Function();
            var previous     = jintVisitor.previous_All <Identifier>(methodCall);

            if (previous.size() > 0)
            {
                jintFunction.Name = previous.first().Text;
                previous.Reverse();
                var className = "";
                foreach (var item in previous)
                {
                    className = "{0}.{1}".format(className, item.Text);
                }
                className          = className.removeFirstChar();
                jintFunction.Class = className;
            }
            else
            {
                jintFunction.Name = "[anonymous]";
            }
            jintFunction.Arguments = methodCall.Arguments;
            //foreach(var argument in methodCall.Arguments)
            //	jintFunction.Arguments.Add(argument.str());
            return(jintFunction);
        }
 public static Jint_Visitor map <T>(this Jint_Visitor jintVisitor, T statement)
     where T : Statement
 {
     jintVisitor.RootStatement = statement;
     statement.Accept(jintVisitor);
     return(jintVisitor);
 }
        public static string name(this Jint_Visitor jintVisitor, MethodCall methodCall)
        {
            var previous = jintVisitor.previous(methodCall);

            return(previous.notNull()
                                        ? previous.str()
                                        : null);
        }
 public static List <MethodCall> methods(this Jint_Visitor jintVisitor)
 {
     if (jintVisitor.Statements_byType.hasKey("MethodCall"))
     {
         return(jintVisitor.Statements_byType["MethodCall"].Cast <MethodCall>().toList());
     }
     return(new List <MethodCall>());
 }
        public static Statement previous(this Jint_Visitor jintVisitor, Statement startStatement)
        {
            var match = jintVisitor.previous(startStatement, false);

            if (match.notNull() && match.size() > 0)
            {
                return(match[0]);
            }
            return(null);
        }
        public static List <Statement> previous(this Jint_Visitor jintVisitor, Statement startStatement, bool recursiveSearch)
        {
            if (recursiveSearch)
            {
                return(jintVisitor.previous_All(startStatement));
            }

            if (jintVisitor.PreviousMappings.hasKey(startStatement))
            {
                return(jintVisitor.PreviousMappings[startStatement].wrapOnList());
            }
            ;
            return(null);
        }
        public static List <T> previous_All <T>(this Jint_Visitor jintVisitor, Statement startStatement, Type untilStatement)
            where T : Statement
        {
            var allPrevious = new List <T>();
            var previous    = jintVisitor.previous(startStatement);

            while (previous.notNull())
            {
                if (untilStatement.notNull() && previous.type() == untilStatement)
                {
                    break;
                }
                if (previous is T)
                {
                    allPrevious.add((T)previous);
                }
                previous = jintVisitor.previous(previous);
            }
            return(allPrevious);
        }
 public static List <T> previous_All_Until <T, T1>(this Jint_Visitor jintVisitor, Statement startStatement)
     where T : Statement
     where T1 : Statement
 {
     return(jintVisitor.previous_All <T>(startStatement, typeof(T1)));
 }
 public static List <T> previous_All <T>(this Jint_Visitor jintVisitor, Statement startStatement)
     where T : Statement
 {
     return(jintVisitor.previous_All <T>(startStatement, null));
 }
 public static List <Statement> previous_All(this Jint_Visitor jintVisitor, Statement startStatement)
 {
     return(jintVisitor.previous_All <Statement>(startStatement));
 }