2008-11-05 Francisco Figueiredo Jr. <francisco@npgsql.org>
[mono.git] / mcs / mcs / report.cs
index 2b28f7a061f696665b03b250f17b39ec9ebc529a..8122aa13dfb75603ceb91e5c4abbe3815455dcd0 100644 (file)
@@ -4,7 +4,7 @@
 // Author: Miguel de Icaza (miguel@ximian.com)
 //         Marek Safar (marek.safar@seznam.cz)         
 //
-// (C) 2001 Ximian, Inc. (http://www.ximian.com)
+// Copyright 2001 Ximian, Inc. (http://www.ximian.com)
 //
 
 using System;
@@ -99,9 +99,13 @@ namespace Mono.CSharp {
                        1717, 1718, 1720,
                        1901,
                        2002, 2023, 2029,
-                       3005, 3012, 3018, 3019, 3021, 3022, 3023, 3026, 3027,
+                       3000, 3001, 3002, 3003, 3005, 3006, 3007, 3008, 3009,
+                       3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019,
+                       3021, 3022, 3023, 3026, 3027,
+                       
+                       414,    // Non ISO-1 warnings
 #if GMCS_SOURCE
-                       402, 414, 458, 464, 693, 1058, 1700, 3024
+                       402, 458, 464, 693, 1058, 1700, 3024
 #endif
                };
 
@@ -138,7 +142,7 @@ namespace Mono.CSharp {
 
                public static void EnableReporting ()
                {
-                       if (warning_stack != null)
+                       if (warning_stack != null && warning_stack.Count > 0)
                                Warnings = (int) warning_stack.Pop ();
                        else
                                Warnings = 0;
@@ -160,6 +164,7 @@ namespace Mono.CSharp {
 
                public interface IMessageRecorder
                {
+                       bool IsEmpty { get; }
                        void EndSession ();
                        void AddMessage (AbstractMessage msg);
                        bool PrintMessages ();
@@ -241,6 +246,12 @@ namespace Mono.CSharp {
                                session_messages.Add (msg);
                        }
 
+                       public bool IsEmpty {
+                               get {
+                                       return merged_messages == null && common_messages == null;
+                               }
+                       }
+
                        //
                        // Prints collected messages, common messages have a priority
                        //
@@ -469,18 +480,6 @@ namespace Mono.CSharp {
                {
                        static string prefix, postfix;
 
-                       [System.Runtime.InteropServices.DllImport ("libc", EntryPoint="isatty")]
-                       extern static int _isatty (int fd);
-                       
-                       static bool isatty (int fd)
-                       {
-                               try {
-                                       return _isatty (fd) == 1;
-                               } catch {
-                                       return false;
-                               }
-                       }
-                       
                        static ErrorMessage ()
                        {
                                string term = Environment.GetEnvironmentVariable ("TERM");
@@ -502,7 +501,7 @@ namespace Mono.CSharp {
                                if (!xterm_colors)
                                        return;
 
-                               if (!(isatty (1) && isatty (2)))
+                               if (!(UnixUtils.isatty (1) && UnixUtils.isatty (2)))
                                        return;
                                
                                string config = Environment.GetEnvironmentVariable ("MCS_COLORS");
@@ -672,8 +671,10 @@ namespace Mono.CSharp {
                                        return;
                                }
 
+                               // FIXME: Completely wrong, it has to use FindMembers
                                MemberCore mc = temp_ds.GetDefinition (mi.Name);
-                               SymbolRelatedToPreviousError (mc);
+                               if (mc != null)
+                                       SymbolRelatedToPreviousError (mc);
                        }
                }
 
@@ -709,7 +710,11 @@ namespace Mono.CSharp {
 
                static void SymbolRelatedToPreviousError (string loc, string symbol)
                {
-                       extra_information.Add (String.Format ("{0} (Location of the symbol related to previous ", loc));
+                       string msg = String.Format ("{0} (Location of the symbol related to previous ", loc);
+                       if (extra_information.Contains (msg))
+                               return;
+
+                       extra_information.Add (msg);
                }
 
                public static void ExtraInformation (Location loc, string msg)