Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
NamespaceCache.cs
Go to the documentation of this file.
1
using
System.Collections.Generic
;
2
using
System.Collections.Immutable
;
3
4
namespace
System.Reflection.Metadata.Ecma335
;
5
6
internal
sealed
class
NamespaceCache
7
{
8
private
sealed
class
NamespaceDataBuilder
9
{
10
public
readonly
NamespaceDefinitionHandle
Handle
;
11
12
public
readonly
StringHandle
Name
;
13
14
public
readonly
string
FullName
;
15
16
public
NamespaceDefinitionHandle
Parent
;
17
18
public
ImmutableArray<NamespaceDefinitionHandle>
.Builder
Namespaces
;
19
20
public
ImmutableArray<TypeDefinitionHandle>
.Builder
TypeDefinitions
;
21
22
public
ImmutableArray<ExportedTypeHandle>
.Builder
ExportedTypes
;
23
24
private
NamespaceData
_frozen
;
25
26
public
NamespaceDataBuilder
(
NamespaceDefinitionHandle
handle
,
StringHandle
name,
string
fullName
)
27
{
28
Handle
=
handle
;
29
Name
= name;
30
FullName
=
fullName
;
31
Namespaces
=
ImmutableArray
.CreateBuilder<
NamespaceDefinitionHandle
>();
32
TypeDefinitions
=
ImmutableArray
.CreateBuilder<
TypeDefinitionHandle
>();
33
ExportedTypes
=
ImmutableArray
.CreateBuilder<
ExportedTypeHandle
>();
34
}
35
36
public
NamespaceData
Freeze
()
37
{
38
if
(
_frozen
==
null
)
39
{
40
ImmutableArray<NamespaceDefinitionHandle>
namespaceDefinitions
=
Namespaces
.ToImmutable();
41
Namespaces
=
null
;
42
ImmutableArray<TypeDefinitionHandle>
typeDefinitions
=
TypeDefinitions
.ToImmutable();
43
TypeDefinitions
=
null
;
44
ImmutableArray<ExportedTypeHandle>
exportedTypes
=
ExportedTypes
.ToImmutable();
45
ExportedTypes
=
null
;
46
_frozen
=
new
NamespaceData
(
Name
,
FullName
,
Parent
,
namespaceDefinitions
,
typeDefinitions
,
exportedTypes
);
47
}
48
return
_frozen
;
49
}
50
51
public
void
MergeInto
(
NamespaceDataBuilder
other
)
52
{
53
Parent
=
default
(
NamespaceDefinitionHandle
);
54
other
.Namespaces.AddRange(
Namespaces
);
55
other
.TypeDefinitions.AddRange(
TypeDefinitions
);
56
other
.ExportedTypes.AddRange(
ExportedTypes
);
57
}
58
}
59
60
private
readonly
MetadataReader
_metadataReader
;
61
62
private
readonly
object
_namespaceTableAndListLock
=
new
object();
63
64
private
volatile
Dictionary<NamespaceDefinitionHandle, NamespaceData>
_namespaceTable
;
65
66
private
NamespaceData
_rootNamespace
;
67
68
private
uint
_virtualNamespaceCounter
;
69
70
internal
bool
CacheIsRealized
=>
_namespaceTable
!=
null
;
71
72
internal
NamespaceCache
(
MetadataReader
reader)
73
{
74
_metadataReader
= reader;
75
}
76
77
internal
string
GetFullName
(
NamespaceDefinitionHandle
handle
)
78
{
79
NamespaceData
namespaceData
=
GetNamespaceData
(
handle
);
80
return
namespaceData
.FullName;
81
}
82
83
internal
NamespaceData
GetRootNamespace
()
84
{
85
EnsureNamespaceTableIsPopulated
();
86
return
_rootNamespace
;
87
}
88
89
internal
NamespaceData
GetNamespaceData
(
NamespaceDefinitionHandle
handle
)
90
{
91
EnsureNamespaceTableIsPopulated
();
92
if
(!
_namespaceTable
.
TryGetValue
(
handle
,
out
var
value
))
93
{
94
Throw
.
InvalidHandle
();
95
}
96
return
value
;
97
}
98
99
private
StringHandle
GetSimpleName
(
NamespaceDefinitionHandle
fullNamespaceHandle
,
int
segmentIndex
=
int
.
MaxValue
)
100
{
101
StringHandle
fullName
=
fullNamespaceHandle
.GetFullName();
102
int
num =
fullNamespaceHandle
.GetHeapOffset() - 1;
103
for
(
int
i = 0; i <
segmentIndex
; i++)
104
{
105
int
num2
=
_metadataReader
.
StringHeap
.IndexOfRaw(num + 1,
'.'
);
106
if
(
num2
== -1)
107
{
108
break
;
109
}
110
num =
num2
;
111
}
112
int
heapOffset
= num + 1;
113
return
StringHandle
.
FromOffset
(
heapOffset
).WithDotTermination();
114
}
115
116
private
void
PopulateNamespaceTable
()
117
{
118
lock
(
_namespaceTableAndListLock
)
119
{
120
if
(
_namespaceTable
!=
null
)
121
{
122
return
;
123
}
124
Dictionary<NamespaceDefinitionHandle, NamespaceDataBuilder>
dictionary
=
new
Dictionary<NamespaceDefinitionHandle, NamespaceDataBuilder>
();
125
NamespaceDefinitionHandle
namespaceDefinitionHandle
=
NamespaceDefinitionHandle
.
FromFullNameOffset
(0);
126
dictionary
.Add(
namespaceDefinitionHandle
,
new
NamespaceDataBuilder
(
namespaceDefinitionHandle
,
namespaceDefinitionHandle
.GetFullName(),
string
.Empty));
127
PopulateTableWithTypeDefinitions
(
dictionary
);
128
PopulateTableWithExportedTypes
(
dictionary
);
129
MergeDuplicateNamespaces
(
dictionary
,
out
var
stringTable
);
130
ResolveParentChildRelationships
(
stringTable
,
out
var
virtualNamespaces
);
131
Dictionary<NamespaceDefinitionHandle, NamespaceData>
dictionary2
=
new
Dictionary<NamespaceDefinitionHandle, NamespaceData>
();
132
foreach
(
KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
item
in
dictionary
)
133
{
134
dictionary2
.
Add
(
item
.Key,
item
.Value.Freeze());
135
}
136
if
(
virtualNamespaces
!=
null
)
137
{
138
foreach
(
NamespaceDataBuilder
item2
in
virtualNamespaces
)
139
{
140
dictionary2
.
Add
(
item2
.Handle,
item2
.Freeze());
141
}
142
}
143
_rootNamespace
=
dictionary2
[
namespaceDefinitionHandle
];
144
_namespaceTable
=
dictionary2
;
145
}
146
}
147
148
private
void
MergeDuplicateNamespaces
(
Dictionary<NamespaceDefinitionHandle, NamespaceDataBuilder>
table,
out
Dictionary<string, NamespaceDataBuilder>
stringTable
)
149
{
150
Dictionary<string, NamespaceDataBuilder>
dictionary
=
new
Dictionary<string, NamespaceDataBuilder>
();
151
List<KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
>
list
=
null
;
152
foreach
(
KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
item
in
table)
153
{
154
NamespaceDataBuilder
value
=
item
.Value;
155
if
(
dictionary
.TryGetValue(
value
.FullName,
out
var
value2
))
156
{
157
value
.
MergeInto
(
value2
);
158
if
(
list
==
null
)
159
{
160
list
=
new
List<KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
>();
161
}
162
list
.
Add
(
new
KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
(
item
.Key,
value2
));
163
}
164
else
165
{
166
dictionary
.
Add
(
value
.FullName,
value
);
167
}
168
}
169
if
(
list
!=
null
)
170
{
171
foreach
(
KeyValuePair<NamespaceDefinitionHandle, NamespaceDataBuilder>
item2
in
list
)
172
{
173
table[
item2
.Key] =
item2
.Value;
174
}
175
}
176
stringTable
=
dictionary
;
177
}
178
179
private
NamespaceDataBuilder
SynthesizeNamespaceData
(
string
fullName
,
NamespaceDefinitionHandle
realChild
)
180
{
181
int
num = 0;
182
foreach
(
char
c
in
fullName
)
183
{
184
if
(c ==
'.'
)
185
{
186
num++;
187
}
188
}
189
StringHandle
simpleName
=
GetSimpleName
(
realChild
, num);
190
NamespaceDefinitionHandle
handle
=
NamespaceDefinitionHandle
.
FromVirtualIndex
(++
_virtualNamespaceCounter
);
191
return
new
NamespaceDataBuilder
(
handle
,
simpleName
,
fullName
);
192
}
193
194
private
void
LinkChildDataToParentData
(
NamespaceDataBuilder
child,
NamespaceDataBuilder
parent)
195
{
196
child.Parent = parent.
Handle
;
197
parent.
Namespaces
.
Add
(child.
Handle
);
198
}
199
200
private
void
LinkChildToParentNamespace
(
Dictionary<string, NamespaceDataBuilder>
existingNamespaces
,
NamespaceDataBuilder
realChild
,
ref
List<NamespaceDataBuilder>
virtualNamespaces
)
201
{
202
string
fullName
=
realChild
.FullName;
203
NamespaceDataBuilder
child =
realChild
;
204
NamespaceDataBuilder
value
;
205
while
(
true
)
206
{
207
int
num =
fullName
.LastIndexOf(
'.'
);
208
string
text
;
209
if
(num == -1)
210
{
211
if
(
fullName
.Length == 0)
212
{
213
return
;
214
}
215
text
=
string
.Empty;
216
}
217
else
218
{
219
text
=
fullName
.Substring(0, num);
220
}
221
if
(
existingNamespaces
.
TryGetValue
(
text
,
out
value
))
222
{
223
break
;
224
}
225
if
(
virtualNamespaces
!=
null
)
226
{
227
foreach
(
NamespaceDataBuilder
virtualNamespace
in
virtualNamespaces
)
228
{
229
if
(
virtualNamespace
.FullName ==
text
)
230
{
231
LinkChildDataToParentData
(child,
virtualNamespace
);
232
return
;
233
}
234
}
235
}
236
else
237
{
238
virtualNamespaces
=
new
List<NamespaceDataBuilder>
();
239
}
240
NamespaceDataBuilder
namespaceDataBuilder
=
SynthesizeNamespaceData
(
text
,
realChild
.Handle);
241
LinkChildDataToParentData
(child,
namespaceDataBuilder
);
242
virtualNamespaces
.
Add
(
namespaceDataBuilder
);
243
fullName
=
namespaceDataBuilder
.FullName;
244
child =
namespaceDataBuilder
;
245
}
246
LinkChildDataToParentData
(child,
value
);
247
}
248
249
private
void
ResolveParentChildRelationships
(
Dictionary<string, NamespaceDataBuilder>
namespaces
,
out
List<NamespaceDataBuilder>
virtualNamespaces
)
250
{
251
virtualNamespaces
=
null
;
252
foreach
(
KeyValuePair<string, NamespaceDataBuilder>
@
namespace
in
namespaces
)
253
{
254
LinkChildToParentNamespace
(
namespaces
, @
namespace
.Value,
ref
virtualNamespaces
);
255
}
256
}
257
258
private
void
PopulateTableWithTypeDefinitions
(
Dictionary<NamespaceDefinitionHandle, NamespaceDataBuilder>
table)
259
{
260
foreach
(
TypeDefinitionHandle
typeDefinition
in
_metadataReader
.
TypeDefinitions
)
261
{
262
if
(!
_metadataReader
.
GetTypeDefinition
(
typeDefinition
).
Attributes
.IsNested())
263
{
264
NamespaceDefinitionHandle
namespaceDefinition
=
_metadataReader
.
TypeDefTable
.GetNamespaceDefinition(
typeDefinition
);
265
if
(table.TryGetValue(
namespaceDefinition
,
out
var
value
))
266
{
267
value
.TypeDefinitions.Add(
typeDefinition
);
268
continue
;
269
}
270
StringHandle
simpleName
=
GetSimpleName
(
namespaceDefinition
);
271
string
@
string
=
_metadataReader
.
GetString
(
namespaceDefinition
);
272
NamespaceDataBuilder
namespaceDataBuilder
=
new
NamespaceDataBuilder
(
namespaceDefinition
,
simpleName
, @
string
);
273
namespaceDataBuilder
.TypeDefinitions.
Add
(
typeDefinition
);
274
table.
Add
(
namespaceDefinition
,
namespaceDataBuilder
);
275
}
276
}
277
}
278
279
private
void
PopulateTableWithExportedTypes
(
Dictionary<NamespaceDefinitionHandle, NamespaceDataBuilder>
table)
280
{
281
foreach
(
ExportedTypeHandle
exportedType2
in
_metadataReader
.
ExportedTypes
)
282
{
283
ExportedType
exportedType
=
_metadataReader
.
GetExportedType
(
exportedType2
);
284
if
(
exportedType
.Implementation.Kind !=
HandleKind
.ExportedType)
285
{
286
NamespaceDefinitionHandle
namespaceDefinition
=
exportedType
.NamespaceDefinition;
287
if
(table.TryGetValue(
namespaceDefinition
,
out
var
value
))
288
{
289
value
.ExportedTypes.
Add
(
exportedType2
);
290
continue
;
291
}
292
StringHandle
simpleName
=
GetSimpleName
(
namespaceDefinition
);
293
string
@
string
=
_metadataReader
.
GetString
(
namespaceDefinition
);
294
NamespaceDataBuilder
namespaceDataBuilder
=
new
NamespaceDataBuilder
(
namespaceDefinition
,
simpleName
, @
string
);
295
namespaceDataBuilder
.ExportedTypes.
Add
(
exportedType2
);
296
table.
Add
(
namespaceDefinition
,
namespaceDataBuilder
);
297
}
298
}
299
}
300
301
private
void
EnsureNamespaceTableIsPopulated
()
302
{
303
if
(
_namespaceTable
==
null
)
304
{
305
PopulateNamespaceTable
();
306
}
307
}
308
}
System.Collections.Generic.Dictionary.TryGetValue
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
Definition
Dictionary.cs:1419
System.Collections.Generic.Dictionary.Add
void Add(TKey key, TValue value)
Definition
Dictionary.cs:873
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.Collections.Immutable.ImmutableArray
Definition
ImmutableArray.cs:223
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.Freeze
NamespaceData Freeze()
Definition
NamespaceCache.cs:36
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.TypeDefinitions
ImmutableArray< TypeDefinitionHandle >.Builder TypeDefinitions
Definition
NamespaceCache.cs:20
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.Handle
readonly NamespaceDefinitionHandle Handle
Definition
NamespaceCache.cs:10
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.FullName
readonly string FullName
Definition
NamespaceCache.cs:14
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.Name
readonly StringHandle Name
Definition
NamespaceCache.cs:12
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.Namespaces
ImmutableArray< NamespaceDefinitionHandle >.Builder Namespaces
Definition
NamespaceCache.cs:18
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.Parent
NamespaceDefinitionHandle Parent
Definition
NamespaceCache.cs:16
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder._frozen
NamespaceData _frozen
Definition
NamespaceCache.cs:24
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.NamespaceDataBuilder
NamespaceDataBuilder(NamespaceDefinitionHandle handle, StringHandle name, string fullName)
Definition
NamespaceCache.cs:26
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.MergeInto
void MergeInto(NamespaceDataBuilder other)
Definition
NamespaceCache.cs:51
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder.ExportedTypes
ImmutableArray< ExportedTypeHandle >.Builder ExportedTypes
Definition
NamespaceCache.cs:22
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceDataBuilder
Definition
NamespaceCache.cs:9
System.Reflection.Metadata.Ecma335.NamespaceCache.SynthesizeNamespaceData
NamespaceDataBuilder SynthesizeNamespaceData(string fullName, NamespaceDefinitionHandle realChild)
Definition
NamespaceCache.cs:179
System.Reflection.Metadata.Ecma335.NamespaceCache.PopulateNamespaceTable
void PopulateNamespaceTable()
Definition
NamespaceCache.cs:116
System.Reflection.Metadata.Ecma335.NamespaceCache.EnsureNamespaceTableIsPopulated
void EnsureNamespaceTableIsPopulated()
Definition
NamespaceCache.cs:301
System.Reflection.Metadata.Ecma335.NamespaceCache.ResolveParentChildRelationships
void ResolveParentChildRelationships(Dictionary< string, NamespaceDataBuilder > namespaces, out List< NamespaceDataBuilder > virtualNamespaces)
Definition
NamespaceCache.cs:249
System.Reflection.Metadata.Ecma335.NamespaceCache.LinkChildToParentNamespace
void LinkChildToParentNamespace(Dictionary< string, NamespaceDataBuilder > existingNamespaces, NamespaceDataBuilder realChild, ref List< NamespaceDataBuilder > virtualNamespaces)
Definition
NamespaceCache.cs:200
System.Reflection.Metadata.Ecma335.NamespaceCache.LinkChildDataToParentData
void LinkChildDataToParentData(NamespaceDataBuilder child, NamespaceDataBuilder parent)
Definition
NamespaceCache.cs:194
System.Reflection.Metadata.Ecma335.NamespaceCache._rootNamespace
NamespaceData _rootNamespace
Definition
NamespaceCache.cs:66
System.Reflection.Metadata.Ecma335.NamespaceCache._namespaceTable
volatile Dictionary< NamespaceDefinitionHandle, NamespaceData > _namespaceTable
Definition
NamespaceCache.cs:64
System.Reflection.Metadata.Ecma335.NamespaceCache.CacheIsRealized
bool CacheIsRealized
Definition
NamespaceCache.cs:70
System.Reflection.Metadata.Ecma335.NamespaceCache.GetSimpleName
StringHandle GetSimpleName(NamespaceDefinitionHandle fullNamespaceHandle, int segmentIndex=int.MaxValue)
Definition
NamespaceCache.cs:99
System.Reflection.Metadata.Ecma335.NamespaceCache.GetRootNamespace
NamespaceData GetRootNamespace()
Definition
NamespaceCache.cs:83
System.Reflection.Metadata.Ecma335.NamespaceCache.GetFullName
string GetFullName(NamespaceDefinitionHandle handle)
Definition
NamespaceCache.cs:77
System.Reflection.Metadata.Ecma335.NamespaceCache.MergeDuplicateNamespaces
void MergeDuplicateNamespaces(Dictionary< NamespaceDefinitionHandle, NamespaceDataBuilder > table, out Dictionary< string, NamespaceDataBuilder > stringTable)
Definition
NamespaceCache.cs:148
System.Reflection.Metadata.Ecma335.NamespaceCache._namespaceTableAndListLock
readonly object _namespaceTableAndListLock
Definition
NamespaceCache.cs:62
System.Reflection.Metadata.Ecma335.NamespaceCache.PopulateTableWithExportedTypes
void PopulateTableWithExportedTypes(Dictionary< NamespaceDefinitionHandle, NamespaceDataBuilder > table)
Definition
NamespaceCache.cs:279
System.Reflection.Metadata.Ecma335.NamespaceCache.PopulateTableWithTypeDefinitions
void PopulateTableWithTypeDefinitions(Dictionary< NamespaceDefinitionHandle, NamespaceDataBuilder > table)
Definition
NamespaceCache.cs:258
System.Reflection.Metadata.Ecma335.NamespaceCache._virtualNamespaceCounter
uint _virtualNamespaceCounter
Definition
NamespaceCache.cs:68
System.Reflection.Metadata.Ecma335.NamespaceCache._metadataReader
readonly MetadataReader _metadataReader
Definition
NamespaceCache.cs:60
System.Reflection.Metadata.Ecma335.NamespaceCache.GetNamespaceData
NamespaceData GetNamespaceData(NamespaceDefinitionHandle handle)
Definition
NamespaceCache.cs:89
System.Reflection.Metadata.Ecma335.NamespaceCache.NamespaceCache
NamespaceCache(MetadataReader reader)
Definition
NamespaceCache.cs:72
System.Reflection.Metadata.Ecma335.NamespaceCache
Definition
NamespaceCache.cs:7
System.Reflection.Metadata.Ecma335.NamespaceData
Definition
NamespaceData.cs:6
System.Reflection.Metadata.MetadataReader.GetExportedType
ExportedType GetExportedType(ExportedTypeHandle handle)
Definition
MetadataReader.cs:1018
System.Reflection.Metadata.MetadataReader.GetString
string GetString(StringHandle handle)
Definition
MetadataReader.cs:919
System.Reflection.Metadata.MetadataReader.StringHeap
StringHeap StringHeap
Definition
MetadataReader.cs:61
System.Reflection.Metadata.MetadataReader.ExportedTypes
ExportedTypeHandleCollection ExportedTypes
Definition
MetadataReader.cs:233
System.Reflection.Metadata.MetadataReader.TypeDefinitions
TypeDefinitionHandleCollection TypeDefinitions
Definition
MetadataReader.cs:219
System.Reflection.Metadata.MetadataReader.TypeDefTable
TypeDefTableReader TypeDefTable
Definition
MetadataReader.cs:79
System.Reflection.Metadata.MetadataReader.GetTypeDefinition
TypeDefinition GetTypeDefinition(TypeDefinitionHandle handle)
Definition
MetadataReader.cs:978
System.Reflection.Metadata.MetadataReader
Definition
MetadataReader.cs:12
System.Reflection.Throw.InvalidHandle
static void InvalidHandle()
Definition
Throw.cs:208
System.Reflection.Throw
Definition
Throw.cs:9
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.Collections.Immutable
Definition
AllocFreeConcurrentStack.cs:4
System.Reflection.Metadata.Ecma335
Definition
ArrayShapeEncoder.cs:3
System.Reflection.Metadata.HandleKind
HandleKind
Definition
HandleKind.cs:4
System.Reflection.PInvokeAttributes.MaxValue
@ MaxValue
System.ExceptionArgument.list
@ list
System.ExceptionArgument.text
@ text
System.ExceptionArgument.value
@ value
System.ExceptionArgument.item
@ item
System.ExceptionArgument.other
@ other
System.ExceptionArgument.dictionary
@ dictionary
System.ExceptionArgument.handle
@ handle
System.Reflection.Metadata.ExportedTypeHandle
Definition
ExportedTypeHandle.cs:4
System.Reflection.Metadata.ExportedType
Definition
ExportedType.cs:4
System.Reflection.Metadata.Handle
Definition
Handle.cs:6
System.Reflection.Metadata.NamespaceDefinitionHandle.FromVirtualIndex
static NamespaceDefinitionHandle FromVirtualIndex(uint virtualIndex)
Definition
NamespaceDefinitionHandle.cs:26
System.Reflection.Metadata.NamespaceDefinitionHandle.FromFullNameOffset
static NamespaceDefinitionHandle FromFullNameOffset(int stringHeapOffset)
Definition
NamespaceDefinitionHandle.cs:21
System.Reflection.Metadata.NamespaceDefinitionHandle
Definition
NamespaceDefinitionHandle.cs:7
System.Reflection.Metadata.StringHandle.FromOffset
static StringHandle FromOffset(int heapOffset)
Definition
StringHandle.cs:98
System.Reflection.Metadata.StringHandle
Definition
StringHandle.cs:6
System.Reflection.Metadata.TypeDefinitionHandle
Definition
TypeDefinitionHandle.cs:4
System.Reflection.Metadata.TypeDefinition.Attributes
TypeAttributes Attributes
Definition
TypeDefinition.cs:19
source
System.Reflection.Metadata
System.Reflection.Metadata.Ecma335
NamespaceCache.cs
Generated by
1.10.0