From e901fd2ad9d1f13eee6840a2ba768457fcd886e1 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 28 Jun 2018 22:42:56 +0200 Subject: [PATCH] Add ApplyAttributeTypeVisitor.ApplyAttributesToType to DecodeMethodSignature and DecodeLocalSignature --- .../TypeSystem/DecompilerTypeSystem.cs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs b/ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs index 3109c2344..f270e3d97 100644 --- a/ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs +++ b/ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs @@ -206,10 +206,19 @@ namespace ICSharpCode.Decompiler.TypeSystem var standaloneSignature = moduleDefinition.Metadata.GetStandaloneSignature(handle); if (standaloneSignature.GetKind() != SRM.StandaloneSignatureKind.Method) throw new InvalidOperationException("Expected Method signature"); - return standaloneSignature.DecodeMethodSignature( + var sig = standaloneSignature.DecodeMethodSignature( mainAssembly.TypeProvider, new GenericContext() ); + return new SRM.MethodSignature( + sig.Header, + ApplyAttributesToType(sig.ReturnType), + sig.RequiredParameterCount, + sig.GenericParameterCount, + ImmutableArray.CreateRange( + sig.ParameterTypes, ApplyAttributesToType + ) + ); } public ImmutableArray DecodeLocalSignature(SRM.StandaloneSignatureHandle handle) @@ -217,12 +226,19 @@ namespace ICSharpCode.Decompiler.TypeSystem var standaloneSignature = moduleDefinition.Metadata.GetStandaloneSignature(handle); if (standaloneSignature.GetKind() != SRM.StandaloneSignatureKind.LocalVariables) throw new InvalidOperationException("Expected Local signature"); - return standaloneSignature.DecodeLocalSignature( + var types = standaloneSignature.DecodeLocalSignature( mainAssembly.TypeProvider, new GenericContext() ); + return ImmutableArray.CreateRange(types, ApplyAttributesToType); } - + + IType ApplyAttributesToType(IType t) + { + return ApplyAttributeTypeVisitor.ApplyAttributesToType(t, compilation, null, + moduleDefinition.Metadata, typeSystemOptions); + } + public IDecompilerTypeSystem GetSpecializingTypeSystem(TypeParameterSubstitution substitution) { if (substitution.Equals(TypeParameterSubstitution.Identity)) {