Stetic.CodeGenerator.GenerateProjectCode C# (CSharp) Method

GenerateProjectCode() public static method

public static GenerateProjectCode ( GenerationOptions options, ProjectBackend projects ) : Stetic.CodeGenerationResult
options GenerationOptions
projects ProjectBackend
return Stetic.CodeGenerationResult
        public static CodeGenerationResult GenerateProjectCode(GenerationOptions options, ProjectBackend[] projects)
        {
            ArrayList warningList = new ArrayList ();

            List<SteticCompilationUnit> units = new List<SteticCompilationUnit> ();
            SteticCompilationUnit globalUnit = new SteticCompilationUnit ("");
            units.Add (globalUnit);

            if (options == null)
                options = new GenerationOptions ();
            CodeNamespace globalNs = new CodeNamespace (options.GlobalNamespace);
            globalUnit.Namespaces.Add (globalNs);

            // Global class

            CodeTypeDeclaration globalType = new CodeTypeDeclaration ("Gui");
            globalType.Attributes = MemberAttributes.Private;
            globalType.TypeAttributes = TypeAttributes.NestedAssembly;
            globalNs.Types.Add (globalType);

            // Create the project initialization method
            // This method will only be added at the end if there
            // is actually something to initialize

            CodeMemberMethod initMethod = new CodeMemberMethod ();
            initMethod.Name = "Initialize";
            initMethod.ReturnType = new CodeTypeReference (typeof(void));
            initMethod.Attributes = MemberAttributes.Assembly | MemberAttributes.Static;
            initMethod.Parameters.Add (new CodeParameterDeclarationExpression (typeof(Gtk.Widget), "iconRenderer"));

            GeneratorContext initContext = new ProjectGeneratorContext (globalNs, globalType, initMethod.Statements, options);
            initContext.RootObject = new CodeArgumentReferenceExpression ("iconRenderer");

            // Generate icon factory creation

            foreach (ProjectBackend gp in projects) {
                if (gp.IconFactory.Icons.Count > 0)
                    gp.IconFactory.GenerateBuildCode (initContext);
            }
            warningList.AddRange (initContext.Warnings);

            // Generate the code

            if (options.UsePartialClasses)
                CodeGeneratorPartialClass.GenerateProjectGuiCode (globalUnit, globalNs, globalType, options, units, projects, warningList);
            else
                CodeGeneratorInternalClass.GenerateProjectGuiCode (globalUnit, globalNs, globalType, options, units, projects, warningList);

            GenerateProjectActionsCode (globalNs, options, projects);

            // Final step. If there is some initialization code, add all needed infrastructure

            globalType.Members.Add (initMethod);

            CodeMemberField initField = new CodeMemberField (typeof(bool), "initialized");
            initField.Attributes = MemberAttributes.Private | MemberAttributes.Static;
            globalType.Members.Add (initField);

            CodeFieldReferenceExpression initVar = new CodeFieldReferenceExpression (
                new CodeTypeReferenceExpression (globalNs.Name + ".Gui"),
                "initialized"
            );

            CodeConditionStatement initCondition = new CodeConditionStatement ();
            initCondition.Condition = new CodeBinaryOperatorExpression (
                initVar,
                CodeBinaryOperatorType.IdentityEquality,
                new CodePrimitiveExpression (false)
            );
            initCondition.TrueStatements.Add (new CodeAssignStatement (
                initVar,
                new CodePrimitiveExpression (true)
            ));
            initCondition.TrueStatements.AddRange (initMethod.Statements);
            initMethod.Statements.Clear ();
            initMethod.Statements.Add (initCondition);

            return new CodeGenerationResult (units.ToArray (), (string[]) warningList.ToArray (typeof(string)));
        }

Same methods

CodeGenerator::GenerateProjectCode ( string file, CodeDomProvider provider, GenerationOptions options, ProjectBackend projects ) : void

Usage Example

Example #1
0
 public CodeGenerationResult GenerateProjectCode(GenerationOptions options, ProjectBackend[] projects)
 {
     return(CodeGenerator.GenerateProjectCode(options, projects));
 }