Exemple #1
0
        public TypeX GetTypeBySig(TypeSig tySig)
        {
            tySig = tySig.RemoveModifiers();
            StringBuilder sb = new StringBuilder();

            Helper.TypeSigName(sb, tySig, true);
            return(GetTypeByName(sb.ToString()));
        }
        string GetNameByType(TypeSig type)
        {
            type = type.RemoveModifiers();

            GenericInstSig git = type as GenericInstSig;

            if (git != null && git.GenericType.FullName == "System.Nullable`1" && git.GenericArguments.Count == 1)
            {
                type = ((GenericInstSig)type).GenericArguments[0];
            }

            string name;

            if (type.IsArray || type.IsSZArray)
            {
                name = "array";
            }
            else if (type.IsPointer || type.IsByRef)
            {
                name = "ptr";
            }
            else if (type.TypeName.EndsWith("Exception", StringComparison.Ordinal))
            {
                name = "ex";
            }
            else if (!typeNameToVariableNameDict.TryGetValue(type.FullName, out name))
            {
                if (type is IGenericParam)
                {
                    name = ((IGenericParam)type).GenericParameter.Name;
                }
                else if (type is GenericVar)
                {
                    name = context.CurrentMethod.DeclaringType.GenericParameters[(int)type.ToGenericVar().Number].Name;
                }
                else if (type is GenericMVar)
                {
                    name = context.CurrentMethod.GenericParameters[(int)type.ToGenericVar().Number].Name;
                }
                else
                {
                    name = type.TypeName;
                }
                // remove the 'I' for interfaces
                if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2]))
                {
                    name = name.Substring(1);
                }
                name = CleanUpVariableName(name);
            }
            return(name);
        }
Exemple #3
0
        string GetNameByType(TypeSig type)
        {
            type = type.RemoveModifiers();

            GenericInstSig git = type as GenericInstSig;

            if (git != null && git.GenericType != null && git.GenericArguments.Count == 1 && git.GenericType.TypeDefOrRef.Compare(systemString, nullableString))
            {
                type = ((GenericInstSig)type).GenericArguments[0];
            }

            string name;

            if (type == null)
            {
                return(string.Empty);
            }
            if (type.IsSingleOrMultiDimensionalArray)
            {
                name = "array";
            }
            else if (type.IsPointer || type.IsByRef)
            {
                name = "ptr";
            }
            else
            {
                stringBuilder.Clear();
                if (FullNameCreator.NameSB(type, false, stringBuilder).EndsWith("Exception"))
                {
                    name = "ex";
                }
                else
                {
                    stringBuilder.Clear();
                    if (!typeNameToVariableNameDict.TryGetValue(FullNameCreator.FullName(type, false, null, null, null, stringBuilder), out name))
                    {
                        stringBuilder.Clear();
                        name = FullNameCreator.Name(type, false, stringBuilder);
                        // remove the 'I' for interfaces
                        if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2]))
                        {
                            name = name.Substring(1);
                        }
                        name = CleanUpVariableName(name);
                    }
                }
            }
            return(name);
        }
        string GetNameByType(TypeSig type)
        {
            type = type.RemoveModifiers();

            GenericInstSig git = type as GenericInstSig;

            if (git != null && git.GenericType != null && git.GenericType.FullName == "System.Nullable`1" && git.GenericArguments.Count == 1)
            {
                type = ((GenericInstSig)type).GenericArguments[0];
            }

            string name;

            if (type == null)
            {
                return(string.Empty);
            }
            if (type.IsSingleOrMultiDimensionalArray)
            {
                name = "array";
            }
            else if (type.IsPointer || type.IsByRef)
            {
                name = "ptr";
            }
            else if (type.TypeName.EndsWith("Exception", StringComparison.Ordinal))
            {
                name = "ex";
            }
            else if (!typeNameToVariableNameDict.TryGetValue(type.FullName, out name))
            {
                name = type.TypeName;
                // remove the 'I' for interfaces
                if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2]))
                {
                    name = name.Substring(1);
                }
                name = CleanUpVariableName(name);
            }
            return(name);
        }
		void WriteFieldOrPropType(TypeSig type) {
			type = type.RemoveModifiers();
			if (type == null) {
				helper.Error("Field/property type is null");
				return;
			}
			if (!recursionCounter.Increment()) {
				helper.Error("Infinite recursion");
				return;
			}

			ITypeDefOrRef tdr;
			switch (type.ElementType) {
			case ElementType.Boolean:	writer.Write((byte)SerializationType.Boolean); break;
			case ElementType.Char:		writer.Write((byte)SerializationType.Char); break;
			case ElementType.I1:		writer.Write((byte)SerializationType.I1); break;
			case ElementType.U1:		writer.Write((byte)SerializationType.U1); break;
			case ElementType.I2:		writer.Write((byte)SerializationType.I2); break;
			case ElementType.U2:		writer.Write((byte)SerializationType.U2); break;
			case ElementType.I4:		writer.Write((byte)SerializationType.I4); break;
			case ElementType.U4:		writer.Write((byte)SerializationType.U4); break;
			case ElementType.I8:		writer.Write((byte)SerializationType.I8); break;
			case ElementType.U8:		writer.Write((byte)SerializationType.U8); break;
			case ElementType.R4:		writer.Write((byte)SerializationType.R4); break;
			case ElementType.R8:		writer.Write((byte)SerializationType.R8); break;
			case ElementType.String:	writer.Write((byte)SerializationType.String); break;
			case ElementType.Object:	writer.Write((byte)SerializationType.TaggedObject); break;

			case ElementType.SZArray:
				writer.Write((byte)SerializationType.SZArray);
				WriteFieldOrPropType(type.Next);
				break;

			case ElementType.Class:
				tdr = ((TypeDefOrRefSig)type).TypeDefOrRef;
				if (CheckCorLibType(type, "Type"))
					writer.Write((byte)SerializationType.Type);
				else if (tdr is TypeRef) {
					// Could be an enum TypeRef that couldn't be resolved, so the code
					// assumed it's a class and created a ClassSig.
					writer.Write((byte)SerializationType.Enum);
					WriteType(tdr);
				}
				else
					goto default;
				break;

			case ElementType.ValueType:
				tdr = ((TypeDefOrRefSig)type).TypeDefOrRef;
				var enumType = GetEnumTypeDef(type);
				// If TypeRef => assume it's an enum that couldn't be resolved
				if (enumType != null || tdr is TypeRef) {
					writer.Write((byte)SerializationType.Enum);
					WriteType(tdr);
				}
				else {
					helper.Error("Custom attribute type doesn't seem to be an enum.");
					writer.Write((byte)SerializationType.Enum);
					WriteType(tdr);
				}
				break;

			default:
				helper.Error("Invalid type");
				writer.Write((byte)0xFF);
				break;
			}

			recursionCounter.Decrement();
		}
		static bool VerifyType(TypeSig type, ElementType etype) {
			type = type.RemoveModifiers();
			// Assume it's an enum if it's a ValueType
			return type != null && (etype == type.ElementType || type.ElementType == ElementType.ValueType);
		}
		TypeSig FixTypeSig(TypeSig type) {
			return SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers();
		}
 static bool VerifyType(TypeSig type, ElementType etype)
 {
     type = type.RemoveModifiers();
     // Assume it's an enum if it's a ValueType
     return(type is not null && (etype == type.ElementType || type.ElementType == ElementType.ValueType));
 }
 TypeSig FixTypeSig(TypeSig type) => SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers();
        void WriteFieldOrPropType(TypeSig type)
        {
            type = type.RemoveModifiers();
            if (type == null)
            {
                helper.Error("Field/property type is null");
                return;
            }
            if (!recursionCounter.Increment())
            {
                helper.Error("Infinite recursion");
                return;
            }

            ITypeDefOrRef tdr;

            switch (type.ElementType)
            {
            case ElementType.Boolean:       writer.Write((byte)SerializationType.Boolean); break;

            case ElementType.Char:          writer.Write((byte)SerializationType.Char); break;

            case ElementType.I1:            writer.Write((byte)SerializationType.I1); break;

            case ElementType.U1:            writer.Write((byte)SerializationType.U1); break;

            case ElementType.I2:            writer.Write((byte)SerializationType.I2); break;

            case ElementType.U2:            writer.Write((byte)SerializationType.U2); break;

            case ElementType.I4:            writer.Write((byte)SerializationType.I4); break;

            case ElementType.U4:            writer.Write((byte)SerializationType.U4); break;

            case ElementType.I8:            writer.Write((byte)SerializationType.I8); break;

            case ElementType.U8:            writer.Write((byte)SerializationType.U8); break;

            case ElementType.R4:            writer.Write((byte)SerializationType.R4); break;

            case ElementType.R8:            writer.Write((byte)SerializationType.R8); break;

            case ElementType.String:        writer.Write((byte)SerializationType.String); break;

            case ElementType.Object:        writer.Write((byte)SerializationType.TaggedObject); break;

            case ElementType.SZArray:
                writer.Write((byte)SerializationType.SZArray);
                WriteFieldOrPropType(type.Next);
                break;

            case ElementType.Class:
                tdr = ((TypeDefOrRefSig)type).TypeDefOrRef;
                if (CheckCorLibType(type, "Type"))
                {
                    writer.Write((byte)SerializationType.Type);
                }
                else if (tdr is TypeRef)
                {
                    // Could be an enum TypeRef that couldn't be resolved, so the code
                    // assumed it's a class and created a ClassSig.
                    writer.Write((byte)SerializationType.Enum);
                    WriteType(tdr);
                }
                else
                {
                    goto default;
                }
                break;

            case ElementType.ValueType:
                tdr = ((TypeDefOrRefSig)type).TypeDefOrRef;
                var enumType = GetEnumTypeDef(type);
                // If TypeRef => assume it's an enum that couldn't be resolved
                if (enumType != null || tdr is TypeRef)
                {
                    writer.Write((byte)SerializationType.Enum);
                    WriteType(tdr);
                }
                else
                {
                    helper.Error("Custom attribute type doesn't seem to be an enum.");
                    writer.Write((byte)SerializationType.Enum);
                    WriteType(tdr);
                }
                break;

            default:
                helper.Error("Invalid type");
                writer.Write((byte)0xFF);
                break;
            }

            recursionCounter.Decrement();
        }
 TypeSig FixTypeSig(TypeSig type)
 {
     return(SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers());
 }