[XamlBuild] Fix issue of project which hasn't debug symbol
authorFang Xiaohui <xiaohui.fang@samsung.com>
Wed, 2 Mar 2022 08:40:15 +0000 (16:40 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Wed, 2 Mar 2022 12:27:45 +0000 (21:27 +0900)
pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CreateObjectVisitor.cs
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/NodeILExtensions.cs
src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlCTask.cs

index 2e7d51f..8c14dea 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 02104c5..0eb5dc3 100755 (executable)
@@ -284,7 +284,25 @@ namespace Tizen.NUI.Xaml.Build.Tasks
                     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) &&
@@ -511,7 +529,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             for (var i = arguments.Count; i < factoryCtorInfo.Parameters.Count; i++)
             {
                 var parameter = factoryCtorInfo.Parameters[i];
-                var arg = new ValueNode(parameter.Constant.ToString(), node.NamespaceResolver);
+                var arg = new ValueNode(parameter.Constant?.ToString(), node.NamespaceResolver);
 
                 foreach (var instruction in arg.PushConvertedValue(Context,
                         parameter.ParameterType,
@@ -526,7 +544,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             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;
index 7e46b32..788b988 100755 (executable)
@@ -342,8 +342,16 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             if (compiledConverterName != null && (compiledConverterType = Type.GetType (compiledConverterName)) != null) {
                 var compiledConverter = Activator.CreateInstance (compiledConverterType);
                 var converter = typeof(ICompiledTypeConverter).GetMethods ().FirstOrDefault (md => md.Name == "ConvertFromString");
-                IEnumerable<Instruction> instructions = (IEnumerable<Instruction>)converter.Invoke (compiledConverter, new object[] {
-                    node.Value as string, context, node as BaseNode});
+                IEnumerable<Instruction> instructions = null;
+
+                try
+                {
+                    instructions = (IEnumerable<Instruction>)converter.Invoke(compiledConverter, new object[] {
+                        node.Value as string, context, node as BaseNode});
+                }
+                catch 
+                {
+                }
 
                 if (null != instructions)
                 {
index 82ef08b..4464dc3 100755 (executable)
@@ -203,13 +203,10 @@ namespace Tizen.NUI.Xaml.Build.Tasks
             else
                 LoggingHelper.LogMessage(Low, $"{new string(' ', 2)}Ignoring dependency and reference paths due to an unsupported resolver");
 
-            var debug = DebugSymbols || (!string.IsNullOrEmpty(DebugType) && DebugType.ToLowerInvariant() != "none");
-
             var readerParameters = new ReaderParameters
             {
                 AssemblyResolver = resolver,
                 ReadWrite = !ReadOnly,
-                ReadSymbols = debug,
             };
 
             using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(System.IO.Path.GetFullPath(Assembly), readerParameters))
@@ -358,7 +355,6 @@ namespace Tizen.NUI.Xaml.Build.Tasks
                 {
                     assemblyDefinition.Write(new WriterParameters
                     {
-                        WriteSymbols = debug,
                     });
                     LoggingHelper.LogMessage(Low, $"{new string(' ', 2)}done.");
                 }