diff --git a/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs b/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs index dfdcc8605..143bc6f14 100644 --- a/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs +++ b/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs @@ -8,6 +8,7 @@ using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; using ICSharpCode.Decompiler.Disassembler; +using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Semantics; using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem.Implementation; @@ -102,8 +103,6 @@ namespace ICSharpCode.Decompiler.CSharp CollectNamespaces(@event.AddAccessor, typeSystem, namespaces); CollectNamespaces(@event.RemoveAccessor, typeSystem, namespaces); break; - default: - throw new NotImplementedException(); } } @@ -195,7 +194,8 @@ namespace ICSharpCode.Decompiler.CSharp case Metadata.OperandType.Sig: case Metadata.OperandType.Tok: case Metadata.OperandType.Type: - var handle = MetadataTokens.EntityHandle(instructions.ReadInt32()); + var handle = MetadataTokenHelpers.EntityHandleOrNil(instructions.ReadInt32()); + if (handle.IsNil) break; switch (handle.Kind) { case HandleKind.TypeDefinition: case HandleKind.TypeReference: @@ -218,8 +218,6 @@ namespace ICSharpCode.Decompiler.CSharp } } break; - default: - throw new NotSupportedException(); } break; default: @@ -250,8 +248,6 @@ namespace ICSharpCode.Decompiler.CSharp foreach (var arg in method.TypeArguments) CollectNamespacesForTypeReference(arg, namespaces); break; - default: - throw new NotImplementedException(); } } } diff --git a/ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs b/ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs index da925759b..e50fd602c 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs @@ -237,9 +237,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms operand: targetInvokeCall.Arguments[2] ); default: - throw new NotSupportedException(); + throw new ArgumentOutOfRangeException($"Value {callsite.Kind} is not supported!"); } - throw new NotImplementedException(); } bool ScanCallSiteInitBlock(Block callSiteInitBlock, IField callSiteCacheField, IType callSiteDelegateType, out CallSiteInfo callSiteInfo, out Block blockAfterInit) diff --git a/ICSharpCode.Decompiler/TypeSystem/MetadataAssembly.cs b/ICSharpCode.Decompiler/TypeSystem/MetadataAssembly.cs index 4dd19dc71..b883a6802 100644 --- a/ICSharpCode.Decompiler/TypeSystem/MetadataAssembly.cs +++ b/ICSharpCode.Decompiler/TypeSystem/MetadataAssembly.cs @@ -295,7 +295,7 @@ namespace ICSharpCode.Decompiler.TypeSystem { var method = GetDefinition(methodDefHandle); if (method == null) { - throw new NotImplementedException(); + throw new BadImageFormatException("MethodDef not found in current assembly."); } if (expandVarArgs && method.Parameters.LastOrDefault()?.Type.Kind == TypeKind.ArgList) { method = new VarArgInstanceMethod(method, EmptyList.Instance);