using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Xml;
using Microsoft.Build.Framework;
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; }
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(
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()
{
var exitXamlComp = new CodeMemberMethod()
{
Name = "ExitXaml",
- CustomAttributes = { GeneratedCodeAttrDecl }
+ CustomAttributes = { GeneratedCodeAttrDecl },
+ Attributes = MemberAttributes.Assembly | MemberAttributes.Final
};
exitXamlComp.Statements.Add(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression()
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);
}
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}";