[mcs] Do member declaration obsolete types references check after all members are...
authorMarek Safar <marek.safar@gmail.com>
Tue, 28 Jul 2015 12:56:45 +0000 (14:56 +0200)
committerMarek Safar <marek.safar@gmail.com>
Tue, 28 Jul 2015 13:04:05 +0000 (15:04 +0200)
mcs/errors/cs0619-58.cs [new file with mode: 0644]
mcs/mcs/class.cs
mcs/mcs/const.cs
mcs/mcs/delegate.cs
mcs/mcs/ecore.cs
mcs/mcs/method.cs
mcs/mcs/parameter.cs
mcs/mcs/property.cs
mcs/mcs/typespec.cs

diff --git a/mcs/errors/cs0619-58.cs b/mcs/errors/cs0619-58.cs
new file mode 100644 (file)
index 0000000..ca274ff
--- /dev/null
@@ -0,0 +1,25 @@
+// CS0619: `Program.TestEventArgs' is obsolete: `FooBar'
+// Line: 10
+
+using System;
+
+namespace Program
+{
+       public class TestClass
+       {
+               public EventHandler<TestEventArgs> Foo;
+       }
+
+       [Obsolete(Messages.Test, true)]
+       public sealed class TestEventArgs : EventArgs
+       {
+       }
+}
+
+namespace Program
+{
+       public static class Messages
+       {
+               public const string Test = "FooBar";
+       }
+}
\ No newline at end of file
index 67ee2a9ba097e99ef9ea694803ca8d0e4819e5b3..787853a619af95c9efa300fa1d2019915707fa59 100644 (file)
@@ -1729,21 +1729,9 @@ namespace Mono.CSharp
                                return;
 
                        foreach (var member in members) {
-                               var pbm = member as PropertyBasedMember;
-                               if (pbm != null) {
+                               var pbm = member as MemberBase;
+                               if (pbm != null)
                                        pbm.PrepareEmit ();
-                                       continue;
-                               }
-
-                               var mc = member as MethodCore;
-                               if (mc != null) {
-                                       mc.PrepareEmit ();
-                                       continue;
-                               }
-
-                               var c = member as Const;
-                               if (c != null)
-                                       c.DefineValue ();
                        }
 
                        base.PrepareEmit ();
@@ -3769,6 +3757,9 @@ namespace Mono.CSharp
                        get {
                                return type_expr;
                        }
+                       set {
+                               type_expr = value;
+                       }
                }
 
                #endregion
@@ -3874,6 +3865,12 @@ namespace Mono.CSharp
                        return Parent.GetSignatureForDocumentation () + "." + MemberName.Basename;
                }
 
+               public virtual void PrepareEmit ()
+               {
+                       if (member_type != null && type_expr != null)
+                               member_type.CheckObsoleteness (this, type_expr.Location);
+               }
+
                protected virtual bool ResolveMemberType ()
                {
                        if (member_type != null)
index eef90b34603c80175df19f75373cc6c0502e6b62..046aec24c1b18b8bb3619e23a5a899bbb074f27a 100644 (file)
@@ -111,6 +111,12 @@ namespace Mono.CSharp {
                {
                        visitor.Visit (this);
                }
+
+               public override void PrepareEmit ()
+               {
+                       base.PrepareEmit ();
+                       DefineValue ();
+               }
        }
 
        public class ConstSpec : FieldSpec
index 56fb8d6d43cf8f7f936f162408d63f139d06c034..1abb9b5387f225667fd2a236b417dc2969c335e4 100644 (file)
@@ -308,6 +308,8 @@ namespace Mono.CSharp {
 
                        InvokeBuilder.PrepareEmit ();
                        if (BeginInvokeBuilder != null) {
+                               BeginInvokeBuilder.TypeExpression = null;
+                               EndInvokeBuilder.TypeExpression = null;
                                BeginInvokeBuilder.PrepareEmit ();
                                EndInvokeBuilder.PrepareEmit ();
                        }
index 83a56ae71cd3064c45002865680176712979b8e9..68e0551bb04fa6d0d620e4421914eed02ffed2d2 100644 (file)
@@ -3078,8 +3078,10 @@ namespace Mono.CSharp {
                        // Obsolete checks cannot be done when resolving base context as they
                        // require type dependencies to be set but we are in process of resolving them
                        //
-                       if (!(mc is TypeDefinition.BaseContext) && !(mc is UsingAliasNamespace.AliasContext)) {
-                               type.CheckObsoleteness (mc, fne.StartLocation);
+                       if (mc is ResolveContext) {
+                               var oa = type.GetAttributeObsolete ();
+                               if (oa != null && !mc.IsObsolete)
+                                       AttributeTester.Report_ObsoleteMessage (oa, type.GetSignatureForError (), fne.Location, mc.Module.Compiler.Report);
                        }
 
                        return type;
index 8ac79aeec605dc83ea4637349600bc419193fa4f..d1e0b3e2b83027c080f3cd70b615ba25f28411b2 100644 (file)
@@ -165,8 +165,9 @@ namespace Mono.CSharp {
                        return s + parameters.GetSignatureForDocumentation ();
                }
 
-               public virtual void PrepareEmit ()
+               public override void PrepareEmit ()
                {
+                       base.PrepareEmit ();
                        parameters.ResolveDefaultValues (this);
                }
 
index 20339cf7adb9a796a82660e0de7f4c7e05f0455b..275f1013e8b9dfb533215ddeaeb466e4d4a8faf9 100644 (file)
@@ -1336,6 +1336,9 @@ namespace Mono.CSharp {
                        for (int i = 0; i < parameters.Length; ++i) {
                                Parameter p = (Parameter) parameters [i];
 
+                               if (p.Type != null)
+                                       p.Type.CheckObsoleteness (m, p.Location);
+
                                //
                                // Try not to enter default values resolution if there are is not any default value possible
                                //
index 718fe669922f885d4191817f1de83d06e4543221..cdd1d15172598491583019f1d437a8d4d7d7517d 100644 (file)
@@ -82,8 +82,6 @@ namespace Mono.CSharp
                        }
                }
 
-               public abstract void PrepareEmit ();
-
                protected override bool VerifyClsCompliance ()
                {
                        if (!base.VerifyClsCompliance ())
@@ -1451,6 +1449,8 @@ namespace Mono.CSharp
 
                public override void PrepareEmit ()
                {
+                       base.PrepareEmit ();
+
                        add.PrepareEmit ();
                        remove.PrepareEmit ();
 
@@ -1760,9 +1760,8 @@ namespace Mono.CSharp
 
                public override void PrepareEmit ()
                {
-                       parameters.ResolveDefaultValues (this);
-
                        base.PrepareEmit ();
+                       parameters.ResolveDefaultValues (this);
                }
 
                protected override bool VerifyClsCompliance ()
index aec01995e2f975870262b8212b6a003deb5468b7..81894f06c762ea1d6146e2e9d99905b2d3a7f4e1 100644 (file)
@@ -1627,6 +1627,11 @@ namespace Mono.CSharp
 
                #endregion
 
+               public override void CheckObsoleteness (IMemberContext mc, Location loc)
+               {
+                       Element.CheckObsoleteness (mc, loc);
+               }
+
                public override ObsoleteAttribute GetAttributeObsolete ()
                {
                        return Element.GetAttributeObsolete ();