[NUI][XamlBuild] Fix Xaml issues reported by VD
authorFang Xiaohui <xiaohui.fang@samsung.com>
Fri, 18 Mar 2022 08:35:09 +0000 (16:35 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Mon, 21 Mar 2022 05:50:47 +0000 (14:50 +0900)
pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll
src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlContext.cs
src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlCreateObjectVisitor.cs
src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlSetPropertiesVisitor.cs
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/NodeILExtensions.cs
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/TypeReferenceExtensions.cs
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlTask.cs
src/Tizen.NUI/src/internal/EXaml/Action/GetValueAction.cs
src/Tizen.NUI/src/internal/EXaml/Operation/CreateObject.cs

index c1b602b..cd0054a 100644 (file)
Binary files a/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll and b/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll differ
index 375eab8..913e95a 100755 (executable)
@@ -620,7 +620,11 @@ namespace Tizen.NUI.EXaml.Build.Tasks
             //Fang: How to deal the Enum
             string ret = "";
 
-            if (null == valueObject)
+            if (System.Type.Missing == valueObject)
+            {
+                ret += "yy ";
+            }
+            else if (null == valueObject)
             {
                 ret += "zz ";
             }
index 9d76d01..e50364f 100755 (executable)
@@ -128,7 +128,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks
                     VariableDefinition vardef = new VariableDefinition(typeref);
                     Context.Variables[node] = vardef;
 
-                    var argumentList = GetCtorXArguments(node, factoryCtorInfo.Parameters.Count);
+                    var argumentList = GetCtorXArguments(node, factoryCtorInfo.Parameters.Count, true);
                     Context.Values[node] = new EXamlCreateObject(Context, null, typedef, argumentList.ToArray());
                     return;
                 }
@@ -164,7 +164,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks
                 VariableDefinition vardef = new VariableDefinition(typeref);
                 Context.Variables[node] = vardef;
 
-                var argumentList = GetCtorXArguments(node, factoryMethodInfo.Parameters.Count);
+                var argumentList = GetCtorXArguments(node, factoryMethodInfo.Parameters.Count, false);
                 Context.Values[node] = new EXamlCreateObject(Context, null, typedef, factoryMethodInfo, argumentList?.ToArray());
                 return;
             }
@@ -454,7 +454,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks
             return true;
         }
 
-        List<object> GetCtorXArguments(ElementNode enode, int paramsCount)
+        List<object> GetCtorXArguments(ElementNode enode, int paramsCount, bool isConstructor)
         {
             if (!enode.Properties.ContainsKey(XmlName.xArguments))
             {
@@ -483,9 +483,12 @@ namespace Tizen.NUI.EXaml.Build.Tasks
                 argumentList.Add(Context.Values[arguments[i]]);
             }
 
-            for (int i = arguments.Count; i < paramsCount; i++)
+            if (!isConstructor)
             {
-                argumentList.Add(null);
+                for (int i = arguments.Count; i < paramsCount; i++)
+                {
+                    argumentList.Add(Type.Missing);
+                }
             }
 
             return argumentList;
index 737cb84..5a990ac 100755 (executable)
@@ -804,7 +804,15 @@ namespace Tizen.NUI.EXaml.Build.Tasks
             var realValue = context.Values[elementNode] as EXamlCreateObject;
             if (null != realValue)
             {
-                if (realValue.GetType().InheritsFromOrImplements(propertyType))
+                var valueTypeRef = realValue.GetType();
+                if (valueTypeRef.InheritsFromOrImplements(propertyType))
+                {
+                    return true;
+                }
+
+                var realTypeFromMarkupExtension = valueTypeRef.GetRealTypeIfIsMarkupExtension();
+
+                if (true == realTypeFromMarkupExtension?.InheritsFromOrImplements(propertyType))
                 {
                     return true;
                 }
index e945f33..41bd449 100755 (executable)
@@ -453,12 +453,12 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             else if (targetTypeRef.FullName == "System.UInt16")
                 yield return Instruction.Create(OpCodes.Ldc_I4, unchecked((int)UInt16.Parse(str, CultureInfo.InvariantCulture)));
             else if (targetTypeRef.FullName == "System.UInt32")
-                yield return Instruction.Create(OpCodes.Ldc_I8, unchecked((uint)UInt32.Parse(str, CultureInfo.InvariantCulture)));
+                yield return Instruction.Create(OpCodes.Ldc_I4, unchecked((int)UInt32.Parse(str, CultureInfo.InvariantCulture)));
             else if (targetTypeRef.FullName == "System.UInt64")
                 yield return Instruction.Create(OpCodes.Ldc_I8, unchecked((long)UInt64.Parse(str, CultureInfo.InvariantCulture)));
             else if (targetTypeRef.FullName == "System.Single")
             {
-                if (str.EndsWith("dp") || str.EndsWith("px"))
+                if (null != GetDPValueSubFix(str))
                 {
                     var insOfDPValue = GetDPValue(module, node, targetTypeRef, str);
 
index 4ff87b2..914afc4 100755 (executable)
@@ -290,6 +290,34 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             return typeRef.InheritsFromOrImplements(baseClass);
         }
 
+        public static TypeReference GetRealTypeIfIsMarkupExtension(this TypeReference typeRef)
+        {
+            TypeReference ret = null;
+
+            var typeDef = typeRef.ResolveCached();
+
+            foreach (var @interface in typeDef.Interfaces)
+            {
+                if (@interface.InterfaceType is GenericInstanceType instanceType)
+                {
+                    if ("Tizen.NUI.Xaml.IMarkupExtension`1" == instanceType.ElementType.FullName
+                        &&
+                        1 == instanceType.GenericArguments.Count)
+                    {
+                        ret = instanceType.GenericArguments[0];
+                        break;
+                    }
+                }
+            }
+
+            if (null == ret)
+            {
+                ret = typeDef.BaseType?.GetRealTypeIfIsMarkupExtension();
+            }
+
+            return ret;
+        }
+
         static CustomAttribute GetCustomAttribute(this TypeReference typeRef, TypeReference attribute)
         {
             var typeDef = typeRef.ResolveCached();
index dcb2dc5..7c9498b 100755 (executable)
@@ -25,11 +25,6 @@ using Microsoft.Build.Utilities;
 
 using Mono.Cecil;
 
-using Tizen.NUI.Xaml;
-using Mono.Cecil.Cil;
-using Mono.Cecil.Pdb;
-using Mono.Cecil.Mdb;
-
 namespace Tizen.NUI.Xaml.Build.Tasks
 {
     [LoadInSeparateAppDomain]
index b786600..f22cd94 100755 (executable)
@@ -167,6 +167,10 @@ namespace Tizen.NUI.EXaml
                         Value = valueString[0];
                         break;
 
+                    case 'y':
+                        Value = Type.Missing;
+                        break;
+
                     case 'z':
                         Value = null;
                         break;
index ff0e890..a5477eb 100755 (executable)
@@ -16,6 +16,7 @@
  */
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Reflection;
 using System.Text;
 using Tizen.NUI.BaseComponents;
@@ -83,7 +84,7 @@ namespace Tizen.NUI.EXaml
 
                     if (null == xFactoryMethod)
                     {
-                        obj = Activator.CreateInstance(type, paramList.ToArray());
+                        obj = Activator.CreateInstance(type, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance | BindingFlags.OptionalParamBinding, null, paramList.ToArray(), CultureInfo.CurrentCulture);
                     }
                     else
                     {