Skip to content

Commit f3fd75e

Browse files
committed
Add Mono.Cecil.WindowsPdb
1 parent e0df4cd commit f3fd75e

16 files changed

+847
-24
lines changed

Mono.Cecil.Cil/PortablePdb.cs

+1-12
Original file line numberDiff line numberDiff line change
@@ -311,23 +311,12 @@ public ImageDebugHeader GetDebugHeader ()
311311
TimeDateStamp = (int) module.timestamp,
312312
};
313313

314-
var buffer = new ByteBuffer ();
315-
// RSDS
316-
buffer.WriteUInt32 (0x53445352);
317-
// Module ID
318-
buffer.WriteBytes (module.Mvid.ToByteArray ());
319-
// PDB Age
320-
buffer.WriteUInt32 (1);
321-
// PDB Path
322314
var filename = writer.BaseStream.GetFileName ();
323315
if (!string.IsNullOrEmpty (filename))
324316
filename = Path.GetFileName (filename);
325317

326-
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (filename));
327-
buffer.WriteByte (0);
318+
var data = Mixin.GetCodeViewData (module.Mvid, filename, age: 1);
328319

329-
var data = new byte [buffer.length];
330-
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
331320
directory.SizeOfData = data.Length;
332321

333322
return new ImageDebugHeader (new ImageDebugHeaderEntry (directory, data));

Mono.Cecil.Cil/Symbols.cs

+22
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
using Mono.Collections.Generic;
1818
using Mono.Cecil.Cil;
19+
using Mono.Cecil.PE;
1920

2021
namespace Mono.Cecil.Cil {
2122

@@ -939,6 +940,27 @@ public static ImageDebugHeaderEntry GetCodeViewEntry (this ImageDebugHeader head
939940
return GetEntry (header, ImageDebugType.CodeView);
940941
}
941942

943+
#if !READ_ONLY
944+
945+
public static byte[] GetCodeViewData (Guid pdb_id, string pdb_path, int age)
946+
{
947+
var buffer = new ByteBuffer ();
948+
// RSDS
949+
buffer.WriteUInt32 (0x53445352);
950+
// Module ID
951+
buffer.WriteBytes (pdb_id.ToByteArray ());
952+
// PDB Age
953+
buffer.WriteInt32 (age);
954+
// PDB Path
955+
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (pdb_path));
956+
buffer.WriteByte (0);
957+
958+
var data = new byte[buffer.length];
959+
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
960+
return data;
961+
}
962+
#endif
963+
942964
public static ImageDebugHeaderEntry GetDeterministicEntry (this ImageDebugHeader header)
943965
{
944966
return GetEntry (header, ImageDebugType.Deterministic);

Mono.Cecil.props

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
<TargetFramework Condition="'$(IsTestProject)' == 'true'">net462</TargetFramework>
4747
<TargetFramework Condition="'$(IsTestProject)' != 'true'">netstandard1.3</TargetFramework>
4848
</PropertyGroup>
49-
<Import Project="NetStandard.props" Condition=" $(NetStandard) " />
49+
<Import Project="NetStandard.props" Condition="'$(NetStandard)' == 'true'" />
5050
<!-- Shared References -->
51-
<ItemGroup Condition=" ! $(NetStandard) ">
51+
<ItemGroup Condition="'$(NetStandard)' != 'true'">
5252
<Reference Include="System.Core" />
5353
<Reference Include="System" />
5454
</ItemGroup>

Mono.Cecil.sln

+43-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Microsoft Visual Studio Solution File, Format Version 12.00
2-
# Visual Studio 14
3-
VisualStudioVersion = 14.0.25420.1
2+
# Visual Studio 15
3+
VisualStudioVersion = 15.0.26612.0
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{74E5ECE0-06B4-401C-AEBA-E8DD53E17943}"
66
EndProject
@@ -22,6 +22,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks.Tests", "r
2222
EndProject
2323
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}"
2424
EndProject
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb", "symbols\pdb.windows\Mono.Cecil.WindowsPdb.csproj", "{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}"
26+
EndProject
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb.Tests", "symbols\pdb.windows\Test\Mono.Cecil.WindowsPdb.Tests.csproj", "{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}"
28+
EndProject
2529
Global
2630
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2731
net_3_5_Debug_ReadOnly|Any CPU = net_3_5_Debug_ReadOnly|Any CPU
@@ -79,11 +83,9 @@ Global
7983
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
8084
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
8185
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
82-
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
8386
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
8487
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
8588
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
86-
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
8789
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
8890
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
8991
{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -127,11 +129,9 @@ Global
127129
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
128130
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
129131
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
130-
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
131132
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
132133
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
133134
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
134-
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
135135
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
136136
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
137137
{63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -175,11 +175,9 @@ Global
175175
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
176176
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
177177
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
178-
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
179178
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
180179
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
181180
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
182-
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
183181
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
184182
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
185183
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -199,11 +197,9 @@ Global
199197
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
200198
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
201199
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
202-
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
203200
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
204201
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
205202
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
206-
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
207203
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
208204
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
209205
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -230,6 +226,38 @@ Global
230226
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
231227
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
232228
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
229+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
230+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
231+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
232+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
233+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
234+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
235+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
236+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
237+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
238+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
239+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
240+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
241+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
242+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
243+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
244+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
245+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
246+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
247+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
248+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
249+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
250+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
251+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
252+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
253+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
254+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
255+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
256+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
257+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
258+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
259+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
260+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
233261
EndGlobalSection
234262
GlobalSection(SolutionProperties) = preSolution
235263
HideSolutionNode = FALSE
@@ -241,5 +269,10 @@ Global
241269
{63E6915C-7EA4-4D76-AB28-0D7191EEA626} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
242270
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
243271
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
272+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
273+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
274+
EndGlobalSection
275+
GlobalSection(ExtensibilityGlobals) = postSolution
276+
SolutionGuid = {9F99F5B5-3BEF-4AC3-8E6A-94BA9CFA9381}
244277
EndGlobalSection
245278
EndGlobal

Mono.Cecil/AssemblyInfo.cs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")]
1919
#endif
2020

21+
[assembly: InternalsVisibleTo ("Mono.Cecil.WindowsPdb, PublicKey=" + Consts.PublicKey)]
2122
[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)]
2223
[assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)]
2324
[assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT/X11.
2+
3+
using System;
4+
using System.Reflection;
5+
6+
[assembly: AssemblyTitle ("Mono.Cecil.WindowsPdb")]
7+
8+
[assembly: CLSCompliant (false)]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT/X11.
2+
3+
#if !READ_ONLY
4+
5+
using System.Collections.Generic;
6+
using System.Reflection;
7+
using Microsoft.DiaSymReader;
8+
9+
namespace Mono.Cecil.WindowsPdb {
10+
11+
class ModuleMetadata : ISymWriterMetadataProvider {
12+
13+
readonly ModuleDefinition module;
14+
15+
Dictionary<uint, TypeDefinition> types;
16+
Dictionary<uint, MethodDefinition> methods;
17+
18+
public ModuleMetadata (ModuleDefinition module)
19+
{
20+
this.module = module;
21+
}
22+
23+
bool TryGetType (uint token, out TypeDefinition type)
24+
{
25+
if (types == null)
26+
InitializeMetadata (module);
27+
28+
return types.TryGetValue (token, out type);
29+
}
30+
31+
bool TryGetMethod (uint token, out MethodDefinition method)
32+
{
33+
if (methods == null)
34+
InitializeMetadata (module);
35+
36+
return methods.TryGetValue (token, out method);
37+
}
38+
39+
void InitializeMetadata (ModuleDefinition module)
40+
{
41+
types = new Dictionary<uint, TypeDefinition> ();
42+
methods = new Dictionary<uint, MethodDefinition> ();
43+
44+
foreach (var type in module.GetTypes ()) {
45+
types.Add (type.MetadataToken.ToUInt32 (), type);
46+
InitializeMethods (type);
47+
}
48+
}
49+
50+
void InitializeMethods (TypeDefinition type)
51+
{
52+
foreach (var method in type.Methods)
53+
methods.Add (method.MetadataToken.ToUInt32 (), method);
54+
}
55+
56+
public bool TryGetTypeDefinitionInfo (int typeDefinitionToken, out string namespaceName, out string typeName, out System.Reflection.TypeAttributes attributes, out int baseTypeToken)
57+
{
58+
TypeDefinition type;
59+
if (!TryGetType ((uint)typeDefinitionToken, out type)) {
60+
namespaceName = null;
61+
typeName = null;
62+
attributes = 0;
63+
baseTypeToken = 0;
64+
return false;
65+
}
66+
67+
typeName = type.IsNested ? type.Name : type.FullName;
68+
namespaceName = type.Namespace;
69+
attributes = (System.Reflection.TypeAttributes)type.Attributes;
70+
baseTypeToken = type.BaseType.MetadataToken.ToInt32 ();
71+
return true;
72+
}
73+
74+
public bool TryGetEnclosingType (int nestedTypeToken, out int enclosingTypeToken)
75+
{
76+
TypeDefinition type;
77+
if (!TryGetType ((uint)nestedTypeToken, out type) || !type.IsNested) {
78+
enclosingTypeToken = 0;
79+
return false;
80+
}
81+
82+
enclosingTypeToken = type.DeclaringType.MetadataToken.ToInt32 ();
83+
return true;
84+
}
85+
86+
public bool TryGetMethodInfo (int methodDefinitionToken, out string methodName, out int declaringTypeToken)
87+
{
88+
MethodDefinition method;
89+
if (!TryGetMethod ((uint)methodDefinitionToken, out method)) {
90+
methodName = null;
91+
declaringTypeToken = 0;
92+
return false;
93+
}
94+
95+
declaringTypeToken = method.DeclaringType.MetadataToken.ToInt32 ();
96+
methodName = method.Name;
97+
return true;
98+
}
99+
}
100+
}
101+
102+
#endif

0 commit comments

Comments
 (0)