Microsoft.Zing.Replacer.VisitTypeReference C# (CSharp) Method

VisitTypeReference() public method

public VisitTypeReference ( System.Compiler.TypeNode type ) : System.Compiler.TypeNode
type System.Compiler.TypeNode
return System.Compiler.TypeNode
        public override TypeNode VisitTypeReference(TypeNode type)
        {
            if (type == null) return null;
            switch (type.NodeType)
            {
                case NodeType.ArrayType:
                case NodeType.ArrayTypeExpression:
                    ArrayType arrType = (ArrayType)type;
                    TypeNode elemType = this.VisitTypeReference(arrType.ElementType);
                    if (elemType == arrType.ElementType) return arrType;
                    return elemType.GetArrayType(arrType.Rank, arrType.Sizes, arrType.LowerBounds);

                case NodeType.Pointer:
                    System.Compiler.Pointer pType = (System.Compiler.Pointer)type;
                    elemType = this.VisitTypeReference(pType.ElementType);
                    if (elemType == pType.ElementType) return pType;
                    return elemType.GetPointerType();

                case NodeType.Reference:
                    Reference rType = (Reference)type;
                    elemType = this.VisitTypeReference(rType.ElementType);
                    if (elemType == rType.ElementType) return rType;
                    return elemType.GetReferenceType();
                //TODO: other parameterized types, such as constrained types
                case NodeType.ClassExpression:
                    ClassExpression cExpr = (ClassExpression)type;
                    cExpr.Expression = this.VisitExpression(cExpr.Expression);
                    cExpr.TemplateArguments = this.VisitTypeReferenceList(cExpr.TemplateArguments);
                    return cExpr;

                case NodeType.InterfaceExpression:
                    InterfaceExpression iExpr = (InterfaceExpression)type;
                    iExpr.Expression = this.VisitExpression(iExpr.Expression);
                    iExpr.TemplateArguments = this.VisitTypeReferenceList(iExpr.TemplateArguments);
                    return iExpr;

                case NodeType.TypeExpression:
                    TypeExpression tExpr = (TypeExpression)type;
                    tExpr.Expression = this.VisitExpression(tExpr.Expression);
                    tExpr.TemplateArguments = this.VisitTypeReferenceList(tExpr.TemplateArguments);
                    return tExpr;
                //TODO: handle array expresssions, etc.
            }
            return type;
        }