public void SaveToFile(Type type) { var generator = new TypeGenerator(); string outputText = String.Copy(text); string fileName = Path.Combine(outputDirectory , "Dynamic.Tekla.Structures", type.Namespace, type.Name + ".cs"); outputText = outputText.Replace("$typeContent", generator.GetTextFromType(type)); outputText = outputText.Replace("$namespace", type.Namespace); if (!Directory.Exists(Path.GetDirectoryName(fileName))) { Directory.CreateDirectory(Path.GetDirectoryName(fileName)); } File.WriteAllText(fileName, outputText); }
public string GetTextFromType(Type type) { if (!(type.IsClass || type.IsInterface)) { return(string.Empty); } if (type.BaseType != null) { if (type.BaseType.Equals(typeof(System.MulticastDelegate))) { return(string.Empty); } } string outputText = String.Copy(text); if (type.IsAbstract) { outputText = outputText.Replace("$abstract", "abstract"); } else { outputText = outputText.Replace("$abstract", ""); } outputText = outputText.Replace("$constructors", ConstructorsText(type)); outputText = outputText.Replace("$dproperties", PropertiesAndFieldsText(type)); outputText = outputText.Replace("$dmethods", MethodsText(type)); outputText = outputText.Replace("$classname", type.Name); var accessor = "public"; if (type.IsAbstract) { accessor = "private"; } outputText = outputText.Replace("$firstConstructorAccessor", accessor); string baseClassText = string.Empty; string dfieldDeclaration = string.Empty; if (type.BaseType != null) { if ( !( type.BaseType.Equals(typeof(System.Object)) /*|| type.BaseType.Equals(typeof(System.MulticastDelegate)) */ //All delegates was removed ) ) { baseClassText = " : " + GetTypeFullName(type.BaseType); } if (!IsTeklaType(type.BaseType)) { dfieldDeclaration = "internal dynamic $dfield;"; } } else { dfieldDeclaration = "internal dynamic $dfield;"; } outputText = outputText.Replace("$fieldDeclaration", dfieldDeclaration); outputText = outputText.Replace("$dfield", "teklaObject"); outputText = outputText.Replace("$baseClass", baseClassText); var nestedTypeGenerator = new TypeGenerator(); var nestedTypeText = new StringBuilder(1000); var nestedTypes = type.GetNestedTypes(); foreach (var nestedType in nestedTypes) { nestedTypeText.AppendLine(nestedTypeGenerator.GetTextFromType(nestedType)); } outputText = outputText.Replace("$overloadedOperators", GetOverLoadedOperatorsText(type)); outputText = outputText.Replace("$nestedTypes", nestedTypeText.ToString()); outputText = outputText.Replace("$typeFullName", GetTypeFullName(type).Replace("Dynamic.", "")); outputText = outputText.Replace("$typeDFullDNameDynamic", GetTypeFullName(type)); // return(outputText); }