X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fikvm.cs;h=17dc6f8817627126ab4fcd9d4f39b3f1dcd9fd88;hb=3fd54893bc792eee42164bfb605b418105a92f92;hp=1d781cde60f12caa2af4b5f9a35b1496bde53ea1;hpb=ba3384aa88a389c308d8258e4ae66caaa2856221;p=mono.git diff --git a/mcs/mcs/ikvm.cs b/mcs/mcs/ikvm.cs index 1d781cde60f..17dc6f88176 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 GetNotUnifiedReferences (AssemblyName assemblyName) + protected override List GetNotUnifiedReferences (AssemblyName assemblyName) { return loader.GetNotUnifiedReferences (assemblyName); } @@ -238,7 +238,8 @@ namespace Mono.CSharp Assembly corlib; readonly List> loaded_names; static readonly Dictionary sdk_directory; - Dictionary> resolved_version_mismatches; + Dictionary> resolved_version_mismatches; + static readonly TypeName objectTypeName = new TypeName ("System", "Object"); static StaticLoader () { @@ -257,7 +258,7 @@ namespace Mono.CSharp this.importer = importer; domain = new Universe (UniverseOptions.MetadataOnly | UniverseOptions.ResolveMissingMembers | UniverseOptions.DisableFusion | UniverseOptions.DecodeVersionInfoAttributeBlobs | - UniverseOptions.DeterministicOutput); + UniverseOptions.DeterministicOutput | UniverseOptions.DisableDefaultAssembliesLookup); domain.AssemblyResolve += AssemblyReferenceResolver; loaded_names = new List> (); @@ -358,39 +359,35 @@ namespace Mono.CSharp if (version_mismatch is AssemblyBuilder) return version_mismatch; - var v1 = new AssemblyName (refname).Version; + var ref_an = new AssemblyName (refname); + var v1 = ref_an.Version; var v2 = version_mismatch.GetName ().Version; if (v1 > v2) { - if (resolved_version_mismatches == null) - resolved_version_mismatches = new Dictionary> (); - - var an = args.RequestingAssembly.GetName (); - List names; - if (!resolved_version_mismatches.TryGetValue (an, out names)) { - names = new List (); - resolved_version_mismatches.Add (an, names); - } - - names.Add (new[] { - 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; @@ -409,6 +406,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> (); + + List names; + if (!resolved_version_mismatches.TryGetValue (an, out names)) { + names = new List (); + resolved_version_mismatches.Add (an, names); + } + + names.Add (errorInfo); + } + public void Dispose () { domain.Dispose (); @@ -433,19 +444,24 @@ namespace Mono.CSharp return default_references.ToArray (); } - public List GetNotUnifiedReferences (AssemblyName assemblyName) + public List GetNotUnifiedReferences (AssemblyName assemblyName) { - List list = null; + List list = null; if (resolved_version_mismatches != null) resolved_version_mismatches.TryGetValue (assemblyName, out list); return list; } - public override bool HasObjectType (Assembly assembly) + public override Assembly HasObjectType (Assembly assembly) { try { - return assembly.GetType (compiler.BuiltinTypes.Object.FullName) != null; + // System.Object can be forwarded and ikvm + // transparently finds it in target assembly therefore + // need to return actual obj assembly becauase in such + // case it's different to assembly parameter + var obj = assembly.FindType (objectTypeName); + return obj == null ? null : obj.Assembly; } catch (Exception e) { throw new InternalErrorException (e, "Failed to load assembly `{0}'", assembly.FullName); }