[NUI][XamlBuild] Set ExitXaml() as internal method.
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / public / XamlBuild / XamlGenerator.cs
index 17dcf21..fa49f54 100755 (executable)
@@ -1,5 +1,5 @@
-/*
- * Copyright(c) 2021 Samsung Electronics Co., Ltd.
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ using System.CodeDom;
 using System.CodeDom.Compiler;
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using System.Reflection;
 using System.Xml;
 using Microsoft.Build.Framework;
@@ -187,6 +188,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks
         public string RootClrNamespace { get; private set; }
         public string RootType { get; private set; }
         public bool AddXamlCompilationAttribute { get; set; }
+        public int XamlOptimization { get; set; }
         bool GenerateDefaultCtor { get; set; }
         bool HideFromIntellisense { get; set; }
         bool XamlResourceIdOnly { get; set; }
@@ -357,18 +359,32 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             declType.Members.Add(initcomp);
 
             //Create and initialize fields
-            var loadExaml_invoke = new CodeMethodInvokeExpression(
-                new CodeTypeReferenceExpression(new CodeTypeReference($"global::Tizen.NUI.EXaml.EXamlExtensions")),
-                "LoadFromEXamlByRelativePath", new CodeThisReferenceExpression(), 
-                new CodeMethodInvokeExpression()
-                { Method = new CodeMethodReferenceExpression() { MethodName = "GetEXamlPath" } });
-
-            CodeAssignStatement assignEXamlObject = new CodeAssignStatement(
-                    new CodeVariableReferenceExpression("eXamlData"), loadExaml_invoke);
 
-            initcomp.Statements.Add(assignEXamlObject);
+                       if(0 == XamlOptimization)
+                       {
+                initcomp.Statements.Add(new CodeMethodInvokeExpression(
+                    new CodeTypeReferenceExpression(new CodeTypeReference($"global::{typeof(Extensions).FullName}")),
+                    "LoadFromXaml", new CodeThisReferenceExpression(), new CodeTypeOfExpression(declType.Name)));
+                       }
+            else
+                       {
+                var loadExaml_invoke = new CodeMethodInvokeExpression(
+                    new CodeTypeReferenceExpression(new CodeTypeReference($"global::Tizen.NUI.EXaml.EXamlExtensions")),
+                    "LoadFromEXamlByRelativePath", new CodeThisReferenceExpression(),
+                    new CodeMethodInvokeExpression()
+                    { Method = new CodeMethodReferenceExpression() { MethodName = "GetEXamlPath" } });
+
+                CodeAssignStatement assignEXamlObject = new CodeAssignStatement(
+                        new CodeVariableReferenceExpression("eXamlData"), loadExaml_invoke);
+
+                initcomp.Statements.Add(assignEXamlObject);
+                       }
 
             foreach (var namedField in NamedFields) {
+                if(namedField.Type.BaseType.Contains("-"))
+                {
+                    namedField.Type.BaseType = namedField.Type.BaseType.Replace("-", ".");
+                }
                 declType.Members.Add(namedField);
 
                 var find_invoke = new CodeMethodInvokeExpression(
@@ -383,34 +399,36 @@ namespace Tizen.NUI.Xaml.Build.Tasks
                 initcomp.Statements.Add(assign);
             }
 
-            declType.Members.Add(new CodeMemberField
-            {
-                Name = "eXamlData",
-                Type = new CodeTypeReference("System.Object"),
-                Attributes = MemberAttributes.Private,
-                CustomAttributes = { GeneratedCodeAttrDecl }
-            });
-
-            var getEXamlPathcomp = new CodeMemberMethod()
-            {
-                Name = "GetEXamlPath",
-                ReturnType = new CodeTypeReference(typeof(string)),
-                CustomAttributes = { GeneratedCodeAttrDecl }
-            };
+                       if(0 != XamlOptimization)
+                       {
+                declType.Members.Add(new CodeMemberField
+                {
+                    Name = "eXamlData",
+                    Type = new CodeTypeReference("System.Object"),
+                    Attributes = MemberAttributes.Private,
+                    CustomAttributes = { GeneratedCodeAttrDecl }
+                });
 
-            getEXamlPathcomp.Statements.Add(new CodeMethodReturnStatement(new CodeDefaultValueExpression(new CodeTypeReference(typeof(string)))));
+                var getEXamlPathcomp = new CodeMemberMethod()
+                {
+                    Name = "GetEXamlPath",
+                    ReturnType = new CodeTypeReference(typeof(string)),
+                    CustomAttributes = { GeneratedCodeAttrDecl }
+                };
 
-            declType.Members.Add(getEXamlPathcomp);
+                getEXamlPathcomp.Statements.Add(new CodeMethodReturnStatement(new CodeDefaultValueExpression(new CodeTypeReference(typeof(string)))));
 
-            GenerateMethodExitXaml(declType);
+                declType.Members.Add(getEXamlPathcomp);
 
+                GenerateMethodExitXaml(declType);
+                       }
         writeAndExit:
             //write the result
             using (var writer = new StreamWriter(outFilePath))
                 Provider.GenerateCodeFromCompileUnit(ccu, writer, new CodeGeneratorOptions());
         }
 
-        private static void GenerateMethodExitXaml(CodeTypeDeclaration declType)
+        private void GenerateMethodExitXaml(CodeTypeDeclaration declType)
         {
             var removeEventsComp = new CodeMemberMethod()
             {
@@ -427,7 +445,8 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             var exitXamlComp = new CodeMemberMethod()
             {
                 Name = "ExitXaml",
-                CustomAttributes = { GeneratedCodeAttrDecl }
+                CustomAttributes = { GeneratedCodeAttrDecl },
+                Attributes = MemberAttributes.Assembly | MemberAttributes.Final
             };
 
             exitXamlComp.Statements.Add(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression()
@@ -441,6 +460,19 @@ namespace Tizen.NUI.Xaml.Build.Tasks
 
             exitXamlComp.Statements.Add(disposeXamlElements_invoke);
 
+            CodeAssignStatement eXamlDataAssign = new CodeAssignStatement(
+                    new CodeVariableReferenceExpression("eXamlData"), new CodeDefaultValueExpression(new CodeTypeReference(typeof(object))));
+
+            exitXamlComp.Statements.Add(eXamlDataAssign);
+
+            foreach (var namedField in NamedFields)
+            {
+                CodeAssignStatement assign = new CodeAssignStatement(
+                    new CodeVariableReferenceExpression(namedField.Name), new CodeDefaultValueExpression(namedField.Type));
+
+                exitXamlComp.Statements.Add(assign);
+            }
+
             declType.Members.Add(exitXamlComp);
         }
 
@@ -511,6 +543,10 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             Func<string, string> getNamespaceOfPrefix = null)
         {
             var type = xmlType.Name;
+            if (type.Contains("-"))
+            {
+                type = type.Replace('-', '.');
+            }
             var ns = GetClrNamespace(xmlType.NamespaceUri, xmlType.Name);
             if (ns != null)
                 type = $"{ns}.{type}";
@@ -574,3 +610,4 @@ namespace Tizen.NUI.Xaml.Build.Tasks
         }
     }
 }