From c73f46d27c7c496052c7cc3ff8a7d642372c34b2 Mon Sep 17 00:00:00 2001
From: Siegfried Pammer <siegfriedpammer@gmail.com>
Date: Sat, 24 Nov 2018 16:35:20 +0100
Subject: [PATCH] Refactor code in HandleCommandLineArgumentsAfterShowList as
 per code-review.

---
 ILSpy/MainWindow.xaml.cs | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/ILSpy/MainWindow.xaml.cs b/ILSpy/MainWindow.xaml.cs
index 48a25ddb8..d5cbbddbd 100644
--- a/ILSpy/MainWindow.xaml.cs
+++ b/ILSpy/MainWindow.xaml.cs
@@ -300,24 +300,16 @@ namespace ICSharpCode.ILSpy
 						var module = asm.GetPEFileOrNull();
 						if (CanResolveTypeInPEFile(module, typeRef, out var typeHandle)) {
 							IEntity mr = null;
-							if (typeHandle.Kind == HandleKind.ExportedType) {
-								var decompilerTypeSystem = new DecompilerTypeSystem(module, module.GetAssemblyResolver());
-								if (memberRef == null) {
-									mr = typeRef.Resolve(new SimpleTypeResolveContext(decompilerTypeSystem)) as ITypeDefinition;
-								} else {
-									mr = memberRef.Resolve(new SimpleTypeResolveContext(decompilerTypeSystem));
-								}
-							} else {
-								var compilation = new SimpleCompilation(module, MinimalCorlib.Instance);
-								if (memberRef == null) {
-									mr = ((MetadataModule)compilation.MainModule).GetDefinition((TypeDefinitionHandle)typeHandle);
-								} else {
-									mr = memberRef.Resolve(new SimpleTypeResolveContext(compilation));
-								}
-							}
-
+							ICompilation compilation = typeHandle.Kind == HandleKind.ExportedType
+								? new DecompilerTypeSystem(module, module.GetAssemblyResolver())
+								: new SimpleCompilation(module, MinimalCorlib.Instance);
+							mr = memberRef == null
+								? typeRef.Resolve(new SimpleTypeResolveContext(compilation)) as ITypeDefinition
+								: (IEntity)memberRef.Resolve(new SimpleTypeResolveContext(compilation));
 							if (mr != null && mr.ParentModule.PEFile != null) {
 								found = true;
+								// Defer JumpToReference call to allow an assembly that was loaded while
+								// resolving a type-forwarder in FindMemberByKey to appear in the assembly list.
 								Dispatcher.BeginInvoke(new Action(() => JumpToReference(mr)), DispatcherPriority.Loaded);
 								break;
 							}