示例#1
0
        public Form1()
        {
            InitializeComponent();
            SolutionGenerator solution = new SolutionGenerator("FormGeneratorSolution");

            ProjectGenerator project1 = new ProjectGenerator("Project1");
            // Form creation
            FormGenerator         form1         = new FormGenerator("generateForm", project1.Name, "");
            FormDesignerGenerator form1Designer = new FormDesignerGenerator(form1);
            // Program creation
            ProgramGenerator program = new ProgramGenerator(project1.Name, form1);

            // Add to project and solution
            project1.Add(form1);
            project1.Add(form1Designer);
            project1.Add(program);
            solution.Add(project1);

            solution.ExportToFile("Output");
        }
示例#2
0
        public void ConvertProject(Project project, CodeGenLanguage language)
        {
            string targetDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "ESC");

            if (!Directory.Exists(targetDirectory))
            {
                Directory.CreateDirectory(targetDirectory);
            }

            var convertedItems = new List <string>();

            foreach (var item in project.Items)
            {
                if (item.Type == ProjectItemType.Module)
                {
                    using (var inputStream = new FileStream(item.SourceFile, FileMode.Open)) {
                        var compilationUnit = BuildCompilationUnit(language);

                        if (ConvertCodeFile(inputStream, Path.Combine(targetDirectory, item.Name + language.GetLanguageExtension()), "Eclipse", compilationUnit))
                        {
                            project.ConvertedItems.Add(new ConvertedProjectItem(item, item.Name + language.GetLanguageExtension()));
                        }
                    }
                }
                else if (item.Type == ProjectItemType.Form)
                {
                    var form = VB6FormLoader.LoadForm(item.SourceFile);

                    var designerCompilationUnit = BuildCompilationUnit(language);
                    var propertyMappings        = BuildPropertyMappings(designerCompilationUnit);
                    var typeMappings            = BuildTypeMappings(designerCompilationUnit);
                    var formDesignerGenerator   = new FormDesignerGenerator(designerCompilationUnit, propertyMappings, typeMappings);

                    var code = formDesignerGenerator.Generate(form);

                    var designerPath = Path.Combine(targetDirectory, $"{form.Name}.Designer{language.GetLanguageExtension()}");
                    project.ConvertedItems.Add(new ConvertedProjectItem(item, $"{form.Name}.Designer{language.GetLanguageExtension()}", $"{form.Name}{language.GetLanguageExtension()}"));
                    File.WriteAllText(designerPath, code);

                    // Generate code-behind
                    using (var inputStream = new MemoryStream(Encoding.UTF8.GetBytes(form.CodeBehind))) {
                        var codeBehindCompilationUnit = BuildCompilationUnit(language);
                        codeBehindCompilationUnit.UsingDirectives.Add(codeBehindCompilationUnit.Generator.NamespaceImportDeclaration("System.Windows.Forms"));
                        codeBehindCompilationUnit.BaseType = codeBehindCompilationUnit.Generator.IdentifierName("Form");

                        codeBehindCompilationUnit.Members.Add(codeBehindCompilationUnit.Generator.ConstructorDeclaration(accessibility: Accessibility.Public, statements: new SyntaxNode[]
                        {
                            codeBehindCompilationUnit.Generator.InvocationExpression(codeBehindCompilationUnit.Generator.MemberAccessExpression(codeBehindCompilationUnit.Generator.ThisExpression(), "InitializeComponent"))
                        }));

                        if (ConvertCodeFile(inputStream, Path.Combine(targetDirectory, item.Name + language.GetLanguageExtension()), item.Name, codeBehindCompilationUnit))
                        {
                            project.ConvertedItems.Add(new ConvertedProjectItem(item, item.Name + language.GetLanguageExtension()));
                        }
                    }
                }
            }

            var projectWriter = language.GetProjectWriter();

            projectWriter.WriteProjectFile(targetDirectory, project);
        }