コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }