var ctor = Module.ImportReference(ctorinforef);
// IL_0001: newobj instance void class [Tizen.NUI.Xaml.UIComponents]Tizen.NUI.Xaml.UIComponents.Button::'.ctor'()
// IL_0006: stloc.0
- Context.IL.Emit(OpCodes.Newobj, ctor);
+ bool isConvertValue = false;
+ if (node.CollectionItems.Count == 1 && node.CollectionItems.First() is ValueNode valueNode)
+ {
+ if (valueNode.CanConvertValue(Context.Module, typeref, (TypeReference)null))
+ {
+ var converterType = valueNode.GetConverterType(new ICustomAttributeProvider[] { typeref.Resolve() });
+ if (null != converterType)
+ {
+ isConvertValue = true;
+ Context.IL.Append(vnode.PushConvertedValue(Context, typeref, new ICustomAttributeProvider[] { typedef },
+ node.PushServiceProvider(Context), false, true));
+ }
+ }
+ }
+
+ if (false == isConvertValue)
+ {
+ Context.IL.Emit(OpCodes.Newobj, ctor);
+ }
Context.IL.Emit(OpCodes.Stloc, vardef);
}
else if (ctorInfo != null && node.Properties.ContainsKey(XmlName.xArguments) &&
if (node.NamespaceURI == XamlParser.X2009Uri)
{
var n = node.XmlType.Name.Split(':')[1];
- return n != "Array";
+ return n != "Array" && n != "Nullable";
}
if (node.NamespaceURI != "clr-namespace:System;assembly=mscorlib")
return false;
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))