[NUI] Add Tizen.NUI.XamlBuild module
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / public / XamlBuild / CompiledConverters / ListStringTypeConverter.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4
5 using Mono.Cecil.Cil;
6
7 using Tizen.NUI.Xaml;
8 using Tizen.NUI.Xaml.Build.Tasks;
9
10 using static Mono.Cecil.Cil.Instruction;
11 using static Mono.Cecil.Cil.OpCodes;
12
13 namespace Tizen.NUI.Xaml.Core.XamlC
14 {
15     class ListStringTypeConverter : ICompiledTypeConverter
16     {
17         public IEnumerable<Instruction> ConvertFromString(string value, ILContext context, BaseNode node)
18         {
19             var module = context.Body.Method.Module;
20
21             if (value == null) {
22                 yield return Create(Ldnull);
23                 yield break;
24             }
25             var parts = value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList();
26
27             yield return Create(Ldc_I4, parts.Count);
28             yield return Create(Newobj, module.ImportCtorReference(("System.Collections", "System.Collections.Generic", "List`1"),
29                                                                    parameterTypes: new[] { ("mscorlib", "System", "Int32") },
30                                                                    classArguments: new[] { ("mscorlib", "System", "String") }));
31             foreach (var part in parts) {
32                 yield return Create(Dup);
33                 yield return Create(Ldstr, part);
34                 yield return Create(Callvirt, module.ImportMethodReference(("mscorlib", "System.Collections.Generic", "ICollection`1"),
35                                                                            methodName: "Add",
36                                                                            paramCount: 1,
37                                                                            classArguments: new[] { ("mscorlib", "System", "String") }));
38             }
39         }
40     }
41 }