示例#1
0
        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;
        }
示例#2
0
        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;
        }