/// <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); }