|
|
@ -42,6 +42,11 @@ namespace Decompiler |
|
|
|
public void AddAssembly(AssemblyDefinition assemblyDefinition) |
|
|
|
public void AddAssembly(AssemblyDefinition assemblyDefinition) |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach(TypeDefinition typeDef in assemblyDefinition.MainModule.Types) { |
|
|
|
foreach(TypeDefinition typeDef in assemblyDefinition.MainModule.Types) { |
|
|
|
|
|
|
|
// Skip nested types - they will be added by the parent type
|
|
|
|
|
|
|
|
if (typeDef.DeclaringType != null) continue; |
|
|
|
|
|
|
|
// Skip the <Module> class
|
|
|
|
|
|
|
|
if (typeDef.Name == "<Module>") continue; |
|
|
|
|
|
|
|
|
|
|
|
AddType(typeDef); |
|
|
|
AddType(typeDef); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -60,10 +65,39 @@ namespace Decompiler |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void AddType(TypeDefinition typeDef) |
|
|
|
public void AddType(TypeDefinition typeDef) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CodeTypeDeclaration codeType = CreateType(typeDef); |
|
|
|
|
|
|
|
GetCodeNamespace(typeDef.Namespace).Types.Add(codeType); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public CodeTypeDeclaration CreateType(TypeDefinition typeDef) |
|
|
|
{ |
|
|
|
{ |
|
|
|
CodeTypeDeclaration codeType = new CodeTypeDeclaration(); |
|
|
|
CodeTypeDeclaration codeType = new CodeTypeDeclaration(); |
|
|
|
codeType.Name = typeDef.Name; |
|
|
|
codeType.Name = typeDef.Name; |
|
|
|
GetCodeNamespace(typeDef.Namespace).Types.Add(codeType); |
|
|
|
|
|
|
|
|
|
|
|
// Copy modifiers across (includes 'is interface' attribute)
|
|
|
|
|
|
|
|
codeType.TypeAttributes = (System.Reflection.TypeAttributes)typeDef.Attributes; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Is struct or enum?
|
|
|
|
|
|
|
|
if (typeDef.IsValueType) { |
|
|
|
|
|
|
|
if (typeDef.IsEnum) { // NB: Enum is value type
|
|
|
|
|
|
|
|
codeType.IsEnum = true; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
codeType.IsStruct = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Nested types
|
|
|
|
|
|
|
|
foreach(TypeDefinition nestedTypeDef in typeDef.NestedTypes) { |
|
|
|
|
|
|
|
codeType.Members.Add(CreateType(nestedTypeDef)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Base type
|
|
|
|
|
|
|
|
if (typeDef.BaseType != null && !typeDef.IsValueType && typeDef.BaseType.FullName != Constants.Object) { |
|
|
|
|
|
|
|
codeType.BaseTypes.Add(typeDef.BaseType.FullName); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return codeType; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|