예제 #1
0
        /// <summary>
        /// Parses the master output.
        /// </summary>
        /// <param name="message">The message.</param>
        private void ParseMasterOutput(string message)
        {
            if (message == null)
            {
                return;
            }

            // Parse the message
            string[] parsed = message.Split("~".ToCharArray(), 5);
            if (parsed.Length == 5)
            {
                string    module       = parsed[0];
                string    warninglevel = parsed[1];
                string    filename     = parsed[2];
                string    line         = parsed[3];
                string    msg          = parsed[4];
                DebugMode mode;

                try
                {
                    mode = (DebugMode)DebugMode.Parse(typeof(DebugMode), warninglevel, true);
                }
                catch (Exception)
                {
                    mode = DebugMode.Warning;
                }

                int linenumber = 0;
                try
                {
                    linenumber = Convert.ToInt32(parsed[3]);
                }
                catch (Exception) { linenumber = 0; }

                if (this.BuildErrorsEncountered && message.Equals(""))
                {
                    this.BuildErrorsEncountered = false;
                }

                // Check for compilation errors
                if (msg != null && msg.StartsWith("RECOMACOMERROR:"))
                {
                    this.BuildErrorsEncountered = true;
                }
                else
                {
                    this.BuildErrorsEncountered = false;
                }

                // Update task list with compilation errors
                if (this.BuildErrorsEncountered)
                {
                    try
                    {
                        string comError   = "RECOMACOMERROR:";
                        string file       = msg.Substring(comError.Length, msg.IndexOf("(") - comError.Length).Replace("/", "\\");
                        string rest       = msg.Substring(file.Length + 1 + comError.Length);
                        int    lineRecoma = 0;

                        lineRecoma = int.Parse((rest.Substring(0, rest.IndexOf(","))));

                        rest = rest.Substring(rest.IndexOf(")") + 2).TrimStart();
                        DebugMode dm;
                        if (rest.StartsWith("warning"))
                        {
                            dm = DebugMode.Warning;
                        }
                        else
                        {
                            dm = DebugMode.Error;
                        }
                        this.LogMessage(dm, "RECOMA", rest, file, lineRecoma);
                    }
                    catch (Exception)
                    {
                        Log.LogError(msg);
                    }
                }
                else
                {
                    this.LogMessage(mode, module, msg, filename, linenumber);
                }
            }
            else
            {
                this.LogMessage(message);
            }
        }