Fix: ImportReference(field, context) not importing field type when needed #973
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When importing a field reference where the field declaring type is on module A, but its type is on module B, then writing the assembly A fails because the field reference type is not imported due to a short-circuit clause.
This patch solves Yellow-Dog-Man/Resonite-Issues#5656.
Stack trace from that issue
System.ArgumentException: Member 'FrooxEngine.FieldDrive`1' (Mono.Cecil.TypeDefinition) is declared in another module 'FrooxEngine.dll' and needs to be imported (expected Plugin.Wasm.dll) at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2283 at Mono.Cecil.SignatureWriter.MakeTypeDefOrRefCodedRID(TypeReference type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2761 at Mono.Cecil.SignatureWriter.WriteTypeSignature(TypeReference type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2794 at Mono.Cecil.MetadataBuilder.GetFieldSignature(FieldReference field) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2143 at Mono.Cecil.MetadataBuilder.GetMemberRefSignature(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2158 at Mono.Cecil.MetadataBuilder.CreateMemberRefRow(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2040 at Mono.Cecil.MetadataBuilder.GetMemberRefToken(MemberReference member) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2029 at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider provider) in [...]/Mono.Cecil/AssemblyWriter.cs:line 2301 at Mono.Cecil.Cil.CodeWriter.WriteOperand(Instruction instruction) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 270 at Mono.Cecil.Cil.CodeWriter.WriteInstructions() in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 180 at Mono.Cecil.Cil.CodeWriter.WriteResolvedMethodBody(MethodDefinition method) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 111 at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition method) in [...]/Mono.Cecil.Cil/CodeWriter.cs:line 54 at Mono.Cecil.MetadataBuilder.AddMethod(MethodDefinition method) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1683 at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1676 at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type) in [...]/Mono.Cecil/AssemblyWriter.cs:line 1473 at Mono.Cecil.MetadataBuilder.AddTypes() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1445 at Mono.Cecil.MetadataBuilder.BuildTypes() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1294 at Mono.Cecil.MetadataBuilder.BuildModule() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1064 at Mono.Cecil.MetadataBuilder.BuildMetadata() in [...]/Mono.Cecil/AssemblyWriter.cs:line 1034 at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder, MetadataReader _) in [...]/Mono.Cecil/AssemblyWriter.cs:line 147 at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func`3 read) in [...]/Mono.Cecil/ModuleDefinition.cs:line 982 at Mono.Cecil.ModuleWriter.BuildMetadata(ModuleDefinition module, MetadataBuilder metadata) in [...]/Mono.Cecil/AssemblyWriter.cs:line 146 at Mono.Cecil.ModuleWriter.Write(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in [...]/Mono.Cecil/AssemblyWriter.cs:line 119 at Mono.Cecil.ModuleWriter.WriteModule(ModuleDefinition module, Disposable`1 stream, WriterParameters parameters) in [...]/Mono.Cecil/AssemblyWriter.cs:line 78 at Mono.Cecil.ModuleDefinition.Write(Stream stream, WriterParameters parameters) in [...]/Mono.Cecil/ModuleDefinition.cs:line 1198 at Mono.Cecil.ModuleDefinition.Write(WriterParameters parameters) in [...]/Mono.Cecil/ModuleDefinition.cs:line 1184 at Mono.Cecil.AssemblyDefinition.Write(WriterParameters parameters) in [...]/Mono.Cecil/AssemblyDefinition.cs:line 171 at FrooxEngine.Weaver.AssemblyPostProcessor.Process(String path, String& versionNumber, String frooxEngineModuleRoot) in D:\Workspace\Everion\FrooxEngine\FrooxEngine.Weaver\AssemblyPostProcessor.cs:line 502 at FrooxEngine.Weaver.AssemblyPostProcessor.Process(String path, String frooxEngineModuleRoot) in D:\Workspace\Everion\FrooxEngine\FrooxEngine.Weaver\AssemblyPostProcessor.cs:line 46 at FrooxEngine.Engine.ProcessStartupCommands(LaunchOptions options) at FrooxEngine.Engine.Initialize(String appPath, Boolean useRenderer, LaunchOptions options, ISystemInfo systemInfo, IEngineInitProgress progress) at Renderite.Host.GraphicalClientRunner.Run(LaunchOptions options) in D:\Workspace\Everion\FrooxEngine\GraphicalClient\GraphicalClientRunner.cs:line 115 at Program.<Main>$(String[] args) in D:\Workspace\Everion\FrooxEngine\GraphicalClient\Program.cs:line 51