|
|
|
@ -122,8 +122,10 @@ namespace Decompiler |
|
|
|
|
|
|
|
|
|
|
|
if (typeDef.IsEnum) { // NB: Enum is value type
|
|
|
|
if (typeDef.IsEnum) { // NB: Enum is value type
|
|
|
|
astType.ClassType = ClassType.Enum; |
|
|
|
astType.ClassType = ClassType.Enum; |
|
|
|
|
|
|
|
astType.Modifiers &= ~Modifiers.Sealed; |
|
|
|
} else if (typeDef.IsValueType) { |
|
|
|
} else if (typeDef.IsValueType) { |
|
|
|
astType.ClassType = ClassType.Struct; |
|
|
|
astType.ClassType = ClassType.Struct; |
|
|
|
|
|
|
|
astType.Modifiers &= ~Modifiers.Sealed; |
|
|
|
} else if (typeDef.IsInterface) { |
|
|
|
} else if (typeDef.IsInterface) { |
|
|
|
astType.ClassType = ClassType.Interface; |
|
|
|
astType.ClassType = ClassType.Interface; |
|
|
|
astType.Modifiers &= ~Modifiers.Abstract; |
|
|
|
astType.Modifiers &= ~Modifiers.Abstract; |
|
|
|
@ -136,14 +138,29 @@ namespace Decompiler |
|
|
|
astType.AddChild(CreateType(nestedTypeDef), TypeDeclaration.MemberRole); |
|
|
|
astType.AddChild(CreateType(nestedTypeDef), TypeDeclaration.MemberRole); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Base type
|
|
|
|
|
|
|
|
if (typeDef.BaseType != null && !typeDef.IsValueType && typeDef.BaseType.FullName != Constants.Object) { |
|
|
|
|
|
|
|
astType.AddChild(ConvertType(typeDef.BaseType), TypeDeclaration.BaseTypeRole); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
foreach (var i in typeDef.Interfaces) |
|
|
|
|
|
|
|
astType.AddChild(ConvertType(i), TypeDeclaration.BaseTypeRole); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AddTypeMembers(astType, typeDef); |
|
|
|
if (typeDef.IsEnum) { |
|
|
|
|
|
|
|
foreach (FieldDefinition field in typeDef.Fields) { |
|
|
|
|
|
|
|
if (field.IsRuntimeSpecialName) { |
|
|
|
|
|
|
|
// the value__ field
|
|
|
|
|
|
|
|
astType.AddChild(ConvertType(field.FieldType), TypeDeclaration.BaseTypeRole); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
EnumMemberDeclaration enumMember = new EnumMemberDeclaration(); |
|
|
|
|
|
|
|
enumMember.Name = field.Name; |
|
|
|
|
|
|
|
astType.AddChild(enumMember, TypeDeclaration.MemberRole); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// Base type
|
|
|
|
|
|
|
|
if (typeDef.BaseType != null && !typeDef.IsValueType && typeDef.BaseType.FullName != Constants.Object) { |
|
|
|
|
|
|
|
astType.AddChild(ConvertType(typeDef.BaseType), TypeDeclaration.BaseTypeRole); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
foreach (var i in typeDef.Interfaces) |
|
|
|
|
|
|
|
astType.AddChild(ConvertType(i), TypeDeclaration.BaseTypeRole); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AddTypeMembers(astType, typeDef); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return astType; |
|
|
|
return astType; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -279,27 +296,53 @@ namespace Decompiler |
|
|
|
#region ConvertModifiers
|
|
|
|
#region ConvertModifiers
|
|
|
|
Modifiers ConvertModifiers(TypeDefinition typeDef) |
|
|
|
Modifiers ConvertModifiers(TypeDefinition typeDef) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return |
|
|
|
Modifiers modifiers = Modifiers.None; |
|
|
|
(typeDef.IsNestedPrivate ? Modifiers.Private : Modifiers.None) | |
|
|
|
if (typeDef.IsNestedPrivate) |
|
|
|
(typeDef.IsNestedFamilyAndAssembly ? Modifiers.Protected : Modifiers.None) | // TODO: Extended access
|
|
|
|
modifiers |= Modifiers.Private; |
|
|
|
(typeDef.IsNestedAssembly ? Modifiers.Internal : Modifiers.None) | |
|
|
|
else if (typeDef.IsNestedAssembly || typeDef.IsNestedFamilyAndAssembly || typeDef.IsNotPublic) |
|
|
|
(typeDef.IsNestedFamily ? Modifiers.Protected : Modifiers.None) | |
|
|
|
modifiers |= Modifiers.Internal; |
|
|
|
(typeDef.IsNestedFamilyOrAssembly ? Modifiers.Protected | Modifiers.Internal : Modifiers.None) | |
|
|
|
else if (typeDef.IsNestedFamily) |
|
|
|
(typeDef.IsPublic ? Modifiers.Public : Modifiers.None) | |
|
|
|
modifiers |= Modifiers.Protected; |
|
|
|
(typeDef.IsAbstract ? Modifiers.Abstract : Modifiers.None); |
|
|
|
else if (typeDef.IsNestedFamilyOrAssembly) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Protected | Modifiers.Internal; |
|
|
|
|
|
|
|
else if (typeDef.IsPublic || typeDef.IsNestedPublic) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Public; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (typeDef.IsAbstract && typeDef.IsSealed) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Static; |
|
|
|
|
|
|
|
else if (typeDef.IsAbstract) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Abstract; |
|
|
|
|
|
|
|
else if (typeDef.IsSealed) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Sealed; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return modifiers; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Modifiers ConvertModifiers(FieldDefinition fieldDef) |
|
|
|
Modifiers ConvertModifiers(FieldDefinition fieldDef) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return |
|
|
|
Modifiers modifiers = Modifiers.None; |
|
|
|
(fieldDef.IsPrivate ? Modifiers.Private : Modifiers.None) | |
|
|
|
if (fieldDef.IsPrivate) |
|
|
|
(fieldDef.IsFamilyAndAssembly ? Modifiers.Protected : Modifiers.None) | // TODO: Extended access
|
|
|
|
modifiers |= Modifiers.Private; |
|
|
|
(fieldDef.IsAssembly ? Modifiers.Internal : Modifiers.None) | |
|
|
|
else if (fieldDef.IsAssembly || fieldDef.IsFamilyAndAssembly) |
|
|
|
(fieldDef.IsFamily ? Modifiers.Protected : Modifiers.None) | |
|
|
|
modifiers |= Modifiers.Internal; |
|
|
|
(fieldDef.IsFamilyOrAssembly ? Modifiers.Protected | Modifiers.Internal : Modifiers.None) | |
|
|
|
else if (fieldDef.IsFamily) |
|
|
|
(fieldDef.IsPublic ? Modifiers.Public : Modifiers.None) | |
|
|
|
modifiers |= Modifiers.Protected; |
|
|
|
(fieldDef.IsLiteral ? Modifiers.Const : Modifiers.None) | |
|
|
|
else if (fieldDef.IsFamilyOrAssembly) |
|
|
|
(fieldDef.IsStatic ? Modifiers.Static : Modifiers.None); |
|
|
|
modifiers |= Modifiers.Protected | Modifiers.Internal; |
|
|
|
|
|
|
|
else if (fieldDef.IsPublic) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Public; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fieldDef.IsLiteral) { |
|
|
|
|
|
|
|
modifiers |= Modifiers.Const; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if (fieldDef.IsStatic) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Static; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fieldDef.IsInitOnly) |
|
|
|
|
|
|
|
modifiers |= Modifiers.Readonly; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return modifiers; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Modifiers ConvertModifiers(MethodDefinition methodDef) |
|
|
|
Modifiers ConvertModifiers(MethodDefinition methodDef) |
|
|
|
|