X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fassembly.cs;h=318d040985aad465932a8ea66ed1cc53f92dc3dc;hb=c32dafe7d7d4a97f239f9b0d95606b4e65663955;hp=004d29f8bd25dec87cc69901bd57b869d37cf9b5;hpb=64b7e70f0d5f9ec7ae2b5c2b4ba4b51ed5f71d39;p=mono.git diff --git a/mcs/mcs/assembly.cs b/mcs/mcs/assembly.cs index 004d29f8bd2..318d040985a 100644 --- a/mcs/mcs/assembly.cs +++ b/mcs/mcs/assembly.cs @@ -20,6 +20,7 @@ using System.Security.Cryptography; using System.Security.Permissions; using Mono.Security.Cryptography; using Mono.CompilerServices.SymbolWriter; +using System.Linq; #if STATIC using IKVM.Reflection; @@ -43,6 +44,18 @@ namespace Mono.CSharp byte[] GetPublicKeyToken (); bool IsFriendAssemblyTo (IAssemblyDefinition assembly); } + + public class AssemblyReferenceMessageInfo + { + public AssemblyReferenceMessageInfo (AssemblyName dependencyName, Action reportMessage) + { + this.DependencyName = dependencyName; + this.ReportMessage = reportMessage; + } + + public AssemblyName DependencyName { get; private set; } + public Action ReportMessage { get; private set; } + } public abstract class AssemblyDefinition : IAssemblyDefinition { @@ -416,7 +429,8 @@ namespace Mono.CSharp // void CheckReferencesPublicToken () { - foreach (var an in builder_extra.GetReferencedAssemblies ()) { + var references = builder_extra.GetReferencedAssemblies (); + foreach (var an in references) { if (public_key != null && an.GetPublicKey ().Length == 0) { Report.Error (1577, "Referenced assembly `{0}' does not have a strong name", an.FullName); @@ -432,11 +446,16 @@ namespace Mono.CSharp if (ia == null) continue; - var references = GetNotUnifiedReferences (an); - if (references != null) { - foreach (var r in references) { - Report.SymbolRelatedToPreviousError ( r[0]); - Report.Error (1705, r [1]); + var an_references = GetNotUnifiedReferences (an); + if (an_references != null) { + foreach (var r in an_references) { + // + // Secondary check when assembly references is resolved but not used. For example + // due to type-forwarding + // + if (references.Any (l => l.Name == r.DependencyName.Name)) { + r.ReportMessage (Report); + } } } @@ -570,7 +589,7 @@ namespace Mono.CSharp return public_key_token; } - protected virtual List GetNotUnifiedReferences (AssemblyName assemblyName) + protected virtual List GetNotUnifiedReferences (AssemblyName assemblyName) { return null; }