public SDTypeRef GetParsedTypeReference(ITypeSymbol typeSymbol)
{
var typeRef = new SDTypeRef();
var namedTypeSymbol = typeSymbol as INamedTypeSymbol;
if(namedTypeSymbol != null)
{
typeRef.Type = _strangerTypeParser.GetParsedType(this, namedTypeSymbol, namedTypeSymbol.ContainingNamespace);
}
var pointerTypeSymbol = typeSymbol as IPointerTypeSymbol;
if(pointerTypeSymbol != null)
{
var pointedSymbol = pointerTypeSymbol.PointedAtType;
typeRef.Type = _strangerTypeParser.GetParsedType(this, pointedSymbol, pointedSymbol.ContainingNamespace);
typeRef.IsPointerType = true;
}
var arrayTypeSymbol = typeSymbol as IArrayTypeSymbol;
if (arrayTypeSymbol != null)
{
var arrayDimensions = 1;
var elementTypeSymbol = arrayTypeSymbol.ElementType;
while (elementTypeSymbol is IArrayTypeSymbol)
{
arrayDimensions++;
elementTypeSymbol = ((IArrayTypeSymbol)elementTypeSymbol).ElementType;
}
if(elementTypeSymbol is IPointerTypeSymbol)
{
var pointedSymbol = ((IPointerTypeSymbol)elementTypeSymbol).PointedAtType;
typeRef.Type = _strangerTypeParser.GetParsedType(this, pointedSymbol, pointedSymbol.ContainingNamespace);
typeRef.IsPointerType = true;
}
else
{
typeRef.Type = _strangerTypeParser.GetParsedType(this, elementTypeSymbol, elementTypeSymbol.ContainingNamespace);
}
typeRef.IsArrayType = true;
typeRef.ArrayDimensions = arrayDimensions;
}
if (typeRef.Type == null)
{
typeRef.Type = _strangerTypeParser.GetParsedType(this, typeSymbol, typeSymbol.ContainingNamespace);
}
return typeRef;
}