private static bool AddSpecialTypeKeyword(TypeSymbol symbol, ArrayBuilder <SymbolDescriptionPart> builder) { var specialType = symbol.GetSpecialTypeSafe(); switch (specialType) { case SpecialType.System_Void: case SpecialType.System_SByte: case SpecialType.System_Int16: case SpecialType.System_Int32: case SpecialType.System_Int64: case SpecialType.System_Byte: case SpecialType.System_UInt16: case SpecialType.System_UInt32: case SpecialType.System_UInt64: case SpecialType.System_Single: case SpecialType.System_Double: case SpecialType.System_Decimal: case SpecialType.System_Char: case SpecialType.System_Boolean: case SpecialType.System_String: case SpecialType.System_Object: //not calling AddKeyword because someone else is working out the text for us builder.Add(new SymbolDescriptionPart { Kind = SymbolDescriptionPartKind.Keyword, Text = SemanticFacts.GetLanguageName(specialType), }); return(true); default: return(false); } }
public static string GetErrorReportingName(TypeSymbol type, RefKind refKind = RefKind.None) { string prefix = ""; switch (refKind) { case RefKind.Ref: prefix = "ref "; break; case RefKind.Out: prefix = "out "; break; } switch (type.GetSpecialTypeSafe()) { case SpecialType.System_Void: case SpecialType.System_SByte: case SpecialType.System_Int16: case SpecialType.System_Int32: case SpecialType.System_Int64: case SpecialType.System_Byte: case SpecialType.System_UInt16: case SpecialType.System_UInt32: case SpecialType.System_UInt64: case SpecialType.System_Single: case SpecialType.System_Double: case SpecialType.System_Decimal: case SpecialType.System_Char: case SpecialType.System_Boolean: case SpecialType.System_String: case SpecialType.System_Object: return(prefix + SemanticFacts.GetLanguageName(type.SpecialType)); case SpecialType.None: if (type != null && type.IsNullableType() && !ReferenceEquals(type, type.OriginalDefinition)) { TypeSymbol underlyingType = type.GetNullableUnderlyingType(); switch (underlyingType.GetSpecialTypeSafe()) { case SpecialType.System_Boolean: case SpecialType.System_SByte: case SpecialType.System_Int16: case SpecialType.System_Int32: case SpecialType.System_Int64: case SpecialType.System_Byte: case SpecialType.System_UInt16: case SpecialType.System_UInt32: case SpecialType.System_UInt64: case SpecialType.System_Single: case SpecialType.System_Double: case SpecialType.System_Decimal: case SpecialType.System_Char: return(prefix + SemanticFacts.GetLanguageName(underlyingType.SpecialType) + "?"); } return(prefix + GetErrorReportingName(underlyingType) + "?"); } break; } var dynamicType = type as DynamicTypeSymbol; if (dynamicType != null) { return(prefix + "dynamic"); } var arrayType = type as ArrayTypeSymbol; if (arrayType != null) { string suffix = ""; while (true) { var elementType = arrayType.ElementType; suffix += GetSuffix(arrayType.Rank); arrayType = elementType as ArrayTypeSymbol; if (arrayType == null) { return(prefix + GetErrorReportingName(elementType) + suffix); } } } var pointerType = type as PointerTypeSymbol; if (pointerType != null) { return(prefix + GetErrorReportingName(pointerType.BaseType) + "*"); } var namedType = type as NamedTypeSymbol; if (namedType != null) { string result = ""; if (namedType.ContainingType != null) { result = GetErrorReportingName(namedType.ContainingType) + "."; } else if (namedType.ContainingNamespace != null && !namedType.ContainingNamespace.IsGlobalNamespace) { result = namedType.ContainingNamespace.GetFullName() + "."; } result += type.Name; if (namedType.TypeArguments.Count != 0) { result += "<"; result += namedType.TypeArguments.Select(a => GetErrorReportingName(a)).Comma(","); result += ">"; } return(prefix + result); } var typeParameter = type as TypeParameterSymbol; if (typeParameter != null) { return(prefix + type.Name); } Debug.Fail("What case did we miss in type name error reporter?"); return(prefix + type.GetFullName()); }