/// <summary>
        /// Gets the fully qualified name of the base class.
        /// </summary>
        public static string GetBaseClassName(ClassDefinition classDefinition)
        {
            ConstantVariable variable = classDefinition.SuperClass as ConstantVariable;

            if (variable != null)
            {
                return(RubyControlFieldExpression.GetQualifiedName(variable));
            }
            return(String.Empty);
        }
        /// <summary>
        /// Deserializes a method call where the target is an array expression.
        ///
        /// System::Array[System::String].new("a", "b")
        /// </summary>
        object DeserializeCreateArrayExpression(string name, MethodCall methodCall)
        {
            MethodCall       arrayCreationMethodCall = methodCall.Target as MethodCall;
            ConstantVariable constantVariable        = arrayCreationMethodCall.Arguments.Expressions[0] as ConstantVariable;
            string           arrayTypeName           = RubyControlFieldExpression.GetQualifiedName(constantVariable);

            ArrayConstructor arrayConstructor = methodCall.Arguments.Expressions[0] as ArrayConstructor;

            Expression[] arrayItems = arrayConstructor.Arguments.Expressions;

            Type  arrayType = componentCreator.GetType(arrayTypeName);
            Array array     = Array.CreateInstance(arrayType, arrayItems.Length);

            for (int i = 0; i < arrayItems.Length; ++i)
            {
                Expression arrayItemExpression = arrayItems[i];
                object     instance            = Deserialize(arrayItemExpression);
                array.SetValue(instance, i);
            }
            return(array);
        }