[NUI][SVACE] Fix svace(DF221214-00106) issue.
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / EXaml / Operation / GatherType.cs
1 /*
2  * Copyright(c) 2021 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using System.Reflection;
20 using System.Text;
21 using Tizen.NUI.BaseComponents;
22 using Tizen.NUI.Binding;
23 using Tizen.NUI.Binding.Internals;
24
25 namespace Tizen.NUI.EXaml
26 {
27     internal class GatherType : Operation
28     {
29         public GatherType(GlobalDataList globalDataList, List<object> operationInfo)
30         {
31             this.assemblyIndex = (int)operationInfo[0];
32             this.typeName = operationInfo[1] as string;
33             if (3 == operationInfo.Count)
34             {
35                 this.genericTypeIndexs = operationInfo[2] as List<object>;
36             }
37             this.globalDataList = globalDataList;
38         }
39
40         private GlobalDataList globalDataList;
41
42         public void Do()
43         {
44             var assembly = globalDataList.GatheredAssemblies[assemblyIndex];
45             var type = assembly.GetType(typeName);
46
47             if (null != genericTypeIndexs)
48             {
49                 Type[] args = new Type[genericTypeIndexs.Count];
50
51                 for (int i = 0; i < genericTypeIndexs.Count; i++)
52                 {
53                     int typeIndex = (int)genericTypeIndexs[i];
54
55                     if (typeIndex >= 0)
56                     {
57                         args[i] = globalDataList.GatheredTypes[typeIndex];
58                     }
59                     else
60                     {
61                         args[i] = GetBaseType.GetBaseTypeByIndex(typeIndex);
62                     }
63                 }
64
65                 type = type?.MakeGenericType(args);
66             }
67
68             globalDataList.GatheredTypes.Add(type);
69         }
70
71         private int assemblyIndex;
72         private string typeName;
73         private List<object> genericTypeIndexs;
74     }
75 }