Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Safar <marek.safar@gmail.com>2016-08-22 18:04:11 +0300
committerMarek Safar <marek.safar@gmail.com>2016-08-22 18:21:09 +0300
commit8ca772d7f96de8230c07a75ae4f195c9cb554588 (patch)
tree3030b3a67b8b3485b24a448f178bacff29a4a871
parent5e7c20ad819ff2df1ca4c7b6fdd4800f9f6d492d (diff)
[mcs] Move more eager references version mismatch checks. Fixes #30821
-rw-r--r--mcs/mcs/assembly.cs15
-rw-r--r--mcs/mcs/ikvm.cs63
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);