diff options
author | Marek Safar <marek.safar@gmail.com> | 2016-08-22 18:04:11 +0300 |
---|---|---|
committer | Marek Safar <marek.safar@gmail.com> | 2016-08-22 18:21:09 +0300 |
commit | 8ca772d7f96de8230c07a75ae4f195c9cb554588 (patch) | |
tree | 3030b3a67b8b3485b24a448f178bacff29a4a871 | |
parent | 5e7c20ad819ff2df1ca4c7b6fdd4800f9f6d492d (diff) |
[mcs] Move more eager references version mismatch checks. Fixes #30821
-rw-r--r-- | mcs/mcs/assembly.cs | 15 | ||||
-rw-r--r-- | mcs/mcs/ikvm.cs | 63 |
2 files changed, 43 insertions, 35 deletions
diff --git a/mcs/mcs/assembly.cs b/mcs/mcs/assembly.cs index 4c7777a1753..53ec6e22c5b 100644 --- a/mcs/mcs/assembly.cs +++ b/mcs/mcs/assembly.cs @@ -45,18 +45,16 @@ namespace Mono.CSharp bool IsFriendAssemblyTo (IAssemblyDefinition assembly); } - public class AssemblyReferenceErrorInfo + public class AssemblyReferenceMessageInfo { - public AssemblyReferenceErrorInfo (AssemblyName dependencyName, string location, string message) + public AssemblyReferenceMessageInfo (AssemblyName dependencyName, Action<Report> reportMessage) { this.DependencyName = dependencyName; - this.RequestingAssemblyLocation = location; - this.Message = message; + this.ReportMessage = reportMessage; } public AssemblyName DependencyName { get; private set; } - public string RequestingAssemblyLocation { get; private set; } - public string Message { get; private set; } + public Action<Report> ReportMessage { get; private set; } } public abstract class AssemblyDefinition : IAssemblyDefinition @@ -456,8 +454,7 @@ namespace Mono.CSharp // due to type-forwarding // if (references.Any (l => l.Name == r.DependencyName.Name)) { - Report.SymbolRelatedToPreviousError (r.RequestingAssemblyLocation); - Report.Error (1705, r.Message); + r.ReportMessage (Report); } } } @@ -592,7 +589,7 @@ namespace Mono.CSharp return public_key_token; } - protected virtual List<AssemblyReferenceErrorInfo> GetNotUnifiedReferences (AssemblyName assemblyName) + protected virtual List<AssemblyReferenceMessageInfo> GetNotUnifiedReferences (AssemblyName assemblyName) { return null; } diff --git a/mcs/mcs/ikvm.cs b/mcs/mcs/ikvm.cs index b2cb90a0478..a7a0cc5e129 100644 --- a/mcs/mcs/ikvm.cs +++ b/mcs/mcs/ikvm.cs @@ -220,7 +220,7 @@ namespace Mono.CSharp return Builder.__AddModule (moduleFile); } - protected override List<AssemblyReferenceErrorInfo> GetNotUnifiedReferences (AssemblyName assemblyName) + protected override List<AssemblyReferenceMessageInfo> GetNotUnifiedReferences (AssemblyName assemblyName) { return loader.GetNotUnifiedReferences (assemblyName); } @@ -238,7 +238,7 @@ namespace Mono.CSharp Assembly corlib; readonly List<Tuple<AssemblyName, string, Assembly>> loaded_names; static readonly Dictionary<string, string[]> sdk_directory; - Dictionary<AssemblyName, List<AssemblyReferenceErrorInfo>> resolved_version_mismatches; + Dictionary<AssemblyName, List<AssemblyReferenceMessageInfo>> resolved_version_mismatches; static StaticLoader () { @@ -363,33 +363,30 @@ namespace Mono.CSharp var v2 = version_mismatch.GetName ().Version; if (v1 > v2) { - if (resolved_version_mismatches == null) - resolved_version_mismatches = new Dictionary<AssemblyName, List<AssemblyReferenceErrorInfo>> (); - - var an = args.RequestingAssembly.GetName (); - List<AssemblyReferenceErrorInfo> names; - if (!resolved_version_mismatches.TryGetValue (an, out names)) { - names = new List<AssemblyReferenceErrorInfo> (); - resolved_version_mismatches.Add (an, names); - } - - names.Add (new AssemblyReferenceErrorInfo (ref_an, args.RequestingAssembly.Location, - string.Format ("Assembly `{0}' depends on `{1}' which has a higher version number than referenced assembly `{2}'", - args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName))); + var messageInfo = new AssemblyReferenceMessageInfo (ref_an, report => { + report.SymbolRelatedToPreviousError (args.RequestingAssembly.Location); + report.Error (1705, string.Format ("Assembly `{0}' depends on `{1}' which has a higher version number than referenced assembly `{2}'", + args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName)); + }); + AddReferenceVersionMismatch (args.RequestingAssembly.GetName (), messageInfo); return version_mismatch; } if (!is_fx_assembly) { - if (v1.Major != v2.Major || v1.Minor != v2.Minor) { - compiler.Report.Warning (1701, 2, - "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", - refname, version_mismatch.GetName ().FullName); - } else { - compiler.Report.Warning (1702, 3, - "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", - refname, version_mismatch.GetName ().FullName); - } + var messageInfo = new AssemblyReferenceMessageInfo (ref_an, report => { + if (v1.Major != v2.Major || v1.Minor != v2.Minor) { + report.Warning (1701, 2, + "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", + refname, version_mismatch.GetName ().FullName); + } else { + report.Warning (1702, 3, + "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", + refname, version_mismatch.GetName ().FullName); + } + }); + + AddReferenceVersionMismatch (args.RequestingAssembly.GetName (), messageInfo); } return version_mismatch; @@ -408,6 +405,20 @@ namespace Mono.CSharp return domain.CreateMissingAssembly (args.Name); } + void AddReferenceVersionMismatch (AssemblyName an, AssemblyReferenceMessageInfo errorInfo) + { + if (resolved_version_mismatches == null) + resolved_version_mismatches = new Dictionary<AssemblyName, List<AssemblyReferenceMessageInfo>> (); + + List<AssemblyReferenceMessageInfo> names; + if (!resolved_version_mismatches.TryGetValue (an, out names)) { + names = new List<AssemblyReferenceMessageInfo> (); + resolved_version_mismatches.Add (an, names); + } + + names.Add (errorInfo); + } + public void Dispose () { domain.Dispose (); @@ -432,9 +443,9 @@ namespace Mono.CSharp return default_references.ToArray (); } - public List<AssemblyReferenceErrorInfo> GetNotUnifiedReferences (AssemblyName assemblyName) + public List<AssemblyReferenceMessageInfo> GetNotUnifiedReferences (AssemblyName assemblyName) { - List<AssemblyReferenceErrorInfo> list = null; + List<AssemblyReferenceMessageInfo> list = null; if (resolved_version_mismatches != null) resolved_version_mismatches.TryGetValue (assemblyName, out list); |