Browse Source

CollectNamespacesForDecompilation:

- support for marshal info
 - support for secdecls
 - add base types of referenced types as well, to cover all possible casts that are implicit in IL, but need to be explicit in C#.
pull/1108/head
Siegfried Pammer 7 years ago
parent
commit
f5e44b0f16
  1. 12
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

12
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -450,6 +450,14 @@ namespace ICSharpCode.Decompiler.CSharp @@ -450,6 +450,14 @@ namespace ICSharpCode.Decompiler.CSharp
} else {
namespaces.Add(typeRef.Namespace);
}
if (visited.Add(typeRef)) {
var typeDef = typeRef.Resolve();
if (typeDef != null) {
CollectNamespacesForDecompilation(typeDef.BaseType, namespaces, visited);
foreach (var intf in typeDef.Interfaces)
CollectNamespacesForDecompilation(intf.InterfaceType, namespaces, visited);
}
}
break;
case FieldReference fieldRef:
CollectNamespacesForDecompilation(fieldRef.DeclaringType, namespaces, visited);
@ -539,8 +547,12 @@ namespace ICSharpCode.Decompiler.CSharp @@ -539,8 +547,12 @@ namespace ICSharpCode.Decompiler.CSharp
CollectAttributes(cap);
}
if (def is ISecurityDeclarationProvider sdp) {
namespaces.Add("System.Security.Permissions");
CollectSecurityDeclarations(sdp);
}
if (def is IMarshalInfoProvider mip && mip.HasMarshalInfo) {
namespaces.Add("System.Runtime.InteropServices");
}
switch (def) {
case TypeDefinition typeDef:
if (typeDef.IsNested) {

Loading…
Cancel
Save