AjTalk.Model.MessageExpression.AsString C# (CSharp) Method

AsString() public method

public AsString ( ) : string
return string
        public string AsString()
        {
            // TODO Use String Builder
            string result = this.target.AsString();

            if (this.target is MessageExpression)
            {
                MessageExpression mexpr = (MessageExpression)this.target;

                if ((this.IsUnaryMessage && (mexpr.IsBinaryMessage || mexpr.IsKeywordMessage)) ||
                    (this.IsBinaryMessage && mexpr.IsKeywordMessage) ||
                    (this.IsKeywordMessage && mexpr.IsKeywordMessage))
                    result = "(" + result + ")";
            }

            // TODO Use string.Format
            if (this.arguments.Count() == 0)
                if (this.selector == "-")
                    return "-" + result;
                else
                    return result + " " + this.selector;

            if (this.IsBinaryMessage)
            {
                IExpression arg = this.arguments.First();
                string argresult = arg.AsString();

                if (arg is MessageExpression && (((MessageExpression)arg).IsBinaryMessage || ((MessageExpression)arg).IsKeywordMessage))
                    argresult = "(" + argresult + ")";

                return result + " " + this.selector + " " + argresult;
            }

            string[]names = this.selector.Split(':');

            int k = 0;

            foreach (IExpression expr in this.arguments)
            {
                string exprresult = expr.AsString();

                if (expr is MessageExpression && ((MessageExpression)expr).IsKeywordMessage)
                    exprresult = "(" + exprresult + ")";

                result += " " + names[k] + ": " + exprresult;
                k++;
            }

            return result;
        }