public override object VisitForeachStatement(ForeachStatement foreachStatement, object data)
        {
            base.VisitForeachStatement(foreachStatement, data);

            FixTypeReferenceCasing(foreachStatement.TypeReference, foreachStatement.StartLocation);

            if (resolver.CompilationUnit == null)
            {
                return(null);
            }

            if (foreachStatement.TypeReference.IsNull)
            {
                ResolveResult rr = resolver.ResolveIdentifier(foreachStatement.VariableName, foreachStatement.StartLocation, ExpressionContext.Default);
                if (rr != null && rr.ResolvedType != null)
                {
                    BlockStatement blockStatement = foreachStatement.EmbeddedStatement as BlockStatement;
                    if (blockStatement == null)
                    {
                        blockStatement = new BlockStatement();
                        blockStatement.AddChild(foreachStatement.EmbeddedStatement);
                        foreachStatement.EmbeddedStatement = blockStatement;
                    }

                    string newVariableName = foreachStatement.VariableName + "_loopVariable";

                    ExpressionStatement st = new ExpressionStatement(
                        new AssignmentExpression(
                            new IdentifierExpression(foreachStatement.VariableName),
                            AssignmentOperatorType.Assign,
                            new IdentifierExpression(newVariableName)));
                    blockStatement.Children.Insert(0, st);
                    st.Parent = blockStatement;

                    foreachStatement.VariableName  = newVariableName;
                    foreachStatement.TypeReference = ConvertType(rr.ResolvedType);
                }
            }
            return(null);
        }
 public override object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
 {
     return(resolver.ResolveIdentifier(identifierExpression, ExpressionContext.Default));
 }