public TypeDetails GetTypeDetails(ReflectedMember member) { TypeDetails details = new TypeDetails(); SignatureToken token = Tokens.Last(); if (token is TypeSignatureToken) { details = ((TypeSignatureToken)token).GetTypeDetails(member); } else { details.Type = ((ElementTypeSignatureToken)token).ResolveToken(member.Assembly); } return(details); }
public TypeDetails GetTypeDetails(ReflectedMember member) { TypeDetails details = new TypeDetails(); if (ElementType.ElementType == ElementTypes.SZArray) { TypeSignatureToken childType = Tokens.Last() as TypeSignatureToken; details.ArrayOf = childType.GetTypeDetails(member); details.IsArray = true; } else if ( ElementType.ElementType == ElementTypes.Class || ElementType.ElementType == ElementTypes.ValueType ) { details.Type = ElementType.ResolveToken(member.Assembly); } else if (ElementType.ElementType == ElementTypes.GenericInstance) { ElementTypeSignatureToken childType = Tokens[1] as ElementTypeSignatureToken; details.Type = childType.ResolveToken(member.Assembly); details.IsGenericInstance = true; details.GenericParameters = new List <TypeDetails>(); for (int i = 3; i < GetGenericArgumentCount().Count + 3; i++) { if (Tokens[i].TokenType == SignatureTokens.Type) { details.GenericParameters.Add( ((TypeSignatureToken)Tokens[i]).GetTypeDetails(member) ); } else { TypeDetails genericParameter = new TypeDetails(); genericParameter.Type = ((ElementTypeSignatureToken)Tokens[i]).ResolveToken(member.Assembly); details.GenericParameters.Add(genericParameter); } } } else if (ElementType.ElementType == ElementTypes.Ptr) { if (Tokens[1].TokenType == SignatureTokens.Type) { TypeSignatureToken childType = Tokens[1] as TypeSignatureToken; details = childType.GetTypeDetails(member); } else { ElementTypeSignatureToken childType = Tokens[1] as ElementTypeSignatureToken; details.Type = childType.ResolveToken(member.Assembly); } details.IsPointer = true; } else if (ElementType.ElementType == ElementTypes.Array) { if (Tokens[1].TokenType == SignatureTokens.Type) { TypeSignatureToken childType = Tokens[1] as TypeSignatureToken; details.ArrayOf = childType.GetTypeDetails(member); } else { ElementTypeSignatureToken childType = Tokens[1] as ElementTypeSignatureToken; details.ArrayOf = new TypeDetails(); details.ArrayOf.Type = childType.ResolveToken(member.Assembly); } details.IsMultidemensionalArray = true; details.ArrayShape = (ArrayShapeSignatureToken)Tokens.Find(t => t.TokenType == SignatureTokens.ArrayShape); } else if (ElementType.ElementType == ElementTypes.MVar) { details.Type = ResolveType(member.Assembly, member); } else if (ElementType.ElementType == ElementTypes.Var) { details.Type = ResolveType(member.Assembly, member); } else if (ElementType.Definition != null) { details.Type = ElementType.Definition as TypeRef; } return(details); }