private string WriteTypeInfo(TypeScope scope, TypeDesc typeDesc, Type type) { this.InitTheFirstTime(); string cSharpName = typeDesc.CSharpName; string str2 = (string)this.reflectionVariables[cSharpName]; if (str2 == null) { if (type.IsArray) { str2 = this.GenerateVariableName("array", typeDesc.CSharpName); TypeDesc arrayElementTypeDesc = typeDesc.ArrayElementTypeDesc; if (arrayElementTypeDesc.UseReflection) { string str3 = this.WriteTypeInfo(scope, arrayElementTypeDesc, scope.GetTypeFromTypeDesc(arrayElementTypeDesc)); this.writer.WriteLine("static " + typeof(Type).FullName + " " + str2 + " = " + str3 + ".MakeArrayType();"); } else { string str4 = this.WriteAssemblyInfo(type); this.writer.Write("static " + typeof(Type).FullName + " " + str2 + " = " + str4 + ".GetType("); this.WriteQuotedCSharpString(type.FullName); this.writer.WriteLine(");"); } } else { str2 = this.GenerateVariableName("type", typeDesc.CSharpName); Type underlyingType = Nullable.GetUnderlyingType(type); if (underlyingType != null) { string str5 = this.WriteTypeInfo(scope, scope.GetTypeDesc(underlyingType), underlyingType); this.writer.WriteLine("static " + typeof(Type).FullName + " " + str2 + " = typeof(System.Nullable<>).MakeGenericType(new " + typeof(Type).FullName + "[] {" + str5 + "});"); } else { string str6 = this.WriteAssemblyInfo(type); this.writer.Write("static " + typeof(Type).FullName + " " + str2 + " = " + str6 + ".GetType("); this.WriteQuotedCSharpString(type.FullName); this.writer.WriteLine(");"); } } this.reflectionVariables.Add(cSharpName, str2); TypeMapping typeMappingFromTypeDesc = scope.GetTypeMappingFromTypeDesc(typeDesc); if (typeMappingFromTypeDesc != null) { this.WriteMappingInfo(typeMappingFromTypeDesc, str2, type); } if (typeDesc.IsCollection || typeDesc.IsEnumerable) { TypeDesc desc2 = typeDesc.ArrayElementTypeDesc; if (desc2.UseReflection) { this.WriteTypeInfo(scope, desc2, scope.GetTypeFromTypeDesc(desc2)); } this.WriteCollectionInfo(str2, typeDesc, type); } } return(str2); }
string WriteTypeInfo(TypeScope scope, TypeDesc typeDesc, Type type){ InitTheFirstTime(); string typeFullName = typeDesc.CSharpName; string typeVariable = (string)reflectionVariables[typeFullName]; if (typeVariable != null) return typeVariable; if (type.IsArray) { typeVariable = GenerateVariableName("array", typeDesc.CSharpName); TypeDesc elementTypeDesc = typeDesc.ArrayElementTypeDesc; if (elementTypeDesc.UseReflection) { string elementTypeVariable = WriteTypeInfo(scope, elementTypeDesc, scope.GetTypeFromTypeDesc(elementTypeDesc)); writer.WriteLine("static "+typeof(Type).FullName+" "+typeVariable +" = " + elementTypeVariable + ".MakeArrayType();"); } else { string assemblyVariable = WriteAssemblyInfo(type); writer.Write("static "+typeof(Type).FullName+" "+typeVariable +" = "+assemblyVariable+".GetType("); WriteQuotedCSharpString(type.FullName); writer.WriteLine(");"); } } else { typeVariable = GenerateVariableName("type", typeDesc.CSharpName); Type parameterType = Nullable.GetUnderlyingType(type); if (parameterType != null) { string parameterTypeVariable = WriteTypeInfo(scope, scope.GetTypeDesc(parameterType), parameterType); writer.WriteLine("static "+typeof(Type).FullName+" "+typeVariable +" = typeof(System.Nullable<>).MakeGenericType(new " + typeof(Type).FullName + "[] {"+parameterTypeVariable+"});"); } else { string assemblyVariable = WriteAssemblyInfo(type); writer.Write("static "+typeof(Type).FullName+" "+typeVariable +" = "+assemblyVariable+".GetType("); WriteQuotedCSharpString(type.FullName); writer.WriteLine(");"); } } reflectionVariables.Add(typeFullName, typeVariable); TypeMapping mapping = scope.GetTypeMappingFromTypeDesc(typeDesc); if (mapping != null) WriteMappingInfo(mapping, typeVariable, type); if (typeDesc.IsCollection || typeDesc.IsEnumerable){// Arrays use the generic item_Array TypeDesc elementTypeDesc = typeDesc.ArrayElementTypeDesc; if (elementTypeDesc.UseReflection) WriteTypeInfo(scope, elementTypeDesc, scope.GetTypeFromTypeDesc(elementTypeDesc)); WriteCollectionInfo(typeVariable, typeDesc, type); } return typeVariable; }
private string WriteTypeInfo(TypeScope scope, TypeDesc typeDesc, Type type) { this.InitTheFirstTime(); string cSharpName = typeDesc.CSharpName; string str2 = (string) this.reflectionVariables[cSharpName]; if (str2 == null) { if (type.IsArray) { str2 = this.GenerateVariableName("array", typeDesc.CSharpName); TypeDesc arrayElementTypeDesc = typeDesc.ArrayElementTypeDesc; if (arrayElementTypeDesc.UseReflection) { string str3 = this.WriteTypeInfo(scope, arrayElementTypeDesc, scope.GetTypeFromTypeDesc(arrayElementTypeDesc)); this.writer.WriteLine("static " + typeof(Type).FullName + " " + str2 + " = " + str3 + ".MakeArrayType();"); } else { string str4 = this.WriteAssemblyInfo(type); this.writer.Write("static " + typeof(Type).FullName + " " + str2 + " = " + str4 + ".GetType("); this.WriteQuotedCSharpString(type.FullName); this.writer.WriteLine(");"); } } else { str2 = this.GenerateVariableName("type", typeDesc.CSharpName); Type underlyingType = Nullable.GetUnderlyingType(type); if (underlyingType != null) { string str5 = this.WriteTypeInfo(scope, scope.GetTypeDesc(underlyingType), underlyingType); this.writer.WriteLine("static " + typeof(Type).FullName + " " + str2 + " = typeof(System.Nullable<>).MakeGenericType(new " + typeof(Type).FullName + "[] {" + str5 + "});"); } else { string str6 = this.WriteAssemblyInfo(type); this.writer.Write("static " + typeof(Type).FullName + " " + str2 + " = " + str6 + ".GetType("); this.WriteQuotedCSharpString(type.FullName); this.writer.WriteLine(");"); } } this.reflectionVariables.Add(cSharpName, str2); TypeMapping typeMappingFromTypeDesc = scope.GetTypeMappingFromTypeDesc(typeDesc); if (typeMappingFromTypeDesc != null) { this.WriteMappingInfo(typeMappingFromTypeDesc, str2, type); } if (typeDesc.IsCollection || typeDesc.IsEnumerable) { TypeDesc desc2 = typeDesc.ArrayElementTypeDesc; if (desc2.UseReflection) { this.WriteTypeInfo(scope, desc2, scope.GetTypeFromTypeDesc(desc2)); } this.WriteCollectionInfo(str2, typeDesc, type); } } return str2; }