Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlExtensionFunction.cs
Go to the documentation of this file.
4
6
7internal sealed class XmlExtensionFunction
8{
9 private string _namespaceUri;
10
11 private string _name;
12
13 private int _numArgs;
14
17
19
20 private int _hashCode;
21
23
24 private Type[] _argClrTypes;
25
27
29
31
33
35
37
39 {
40 }
41
42 public XmlExtensionFunction(string name, string namespaceUri, MethodInfo meth)
43 {
44 _name = name;
45 _namespaceUri = namespaceUri;
46 Bind(meth);
47 }
48
49 public XmlExtensionFunction(string name, string namespaceUri, int numArgs, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type objectType, BindingFlags flags)
50 {
51 Init(name, namespaceUri, numArgs, objectType, flags);
52 }
53
54 public void Init(string name, string namespaceUri, int numArgs, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type objectType, BindingFlags flags)
55 {
56 _name = name;
57 _namespaceUri = namespaceUri;
60 _flags = flags;
61 _meth = null;
62 _argClrTypes = null;
63 _retClrType = null;
64 _argXmlTypes = null;
65 _retXmlType = null;
66 _hashCode = namespaceUri.GetHashCode() ^ name.GetHashCode() ^ ((int)flags << 16) ^ numArgs;
67 }
68
70 {
71 return _argClrTypes[index];
72 }
73
75 {
76 return _argXmlTypes[index];
77 }
78
79 public bool CanBind()
80 {
84 foreach (MethodInfo methodInfo in array)
85 {
86 if (methodInfo.Name.Equals(_name, comparisonType) && (_numArgs == -1 || methodInfo.GetParameters().Length == _numArgs) && !methodInfo.IsGenericMethodDefinition)
87 {
88 return true;
89 }
90 }
91 return false;
92 }
93
94 public void Bind()
95 {
100 foreach (MethodInfo methodInfo2 in array)
101 {
102 if (methodInfo2.Name.Equals(_name, comparisonType) && (_numArgs == -1 || methodInfo2.GetParameters().Length == _numArgs))
103 {
104 if (methodInfo != null)
105 {
107 }
109 }
110 }
111 if (methodInfo == null)
112 {
115 foreach (MethodInfo methodInfo3 in array2)
116 {
117 if (methodInfo3.Name.Equals(_name, comparisonType) && methodInfo3.GetParameters().Length == _numArgs)
118 {
120 }
121 }
123 }
124 if (methodInfo.IsGenericMethodDefinition)
125 {
127 }
129 }
130
131 private void Bind(MethodInfo meth)
132 {
133 ParameterInfo[] parameters = meth.GetParameters();
134 _meth = meth;
135 _argClrTypes = new Type[parameters.Length];
136 for (int i = 0; i < parameters.Length; i++)
137 {
138 _argClrTypes[i] = GetClrType(parameters[i].ParameterType);
139 }
141 _argXmlTypes = new XmlQueryType[parameters.Length];
142 for (int i = 0; i < parameters.Length; i++)
143 {
145 if (_namespaceUri.Length == 0)
146 {
148 {
150 }
151 else if ((object)_argXmlTypes[i] == XmlQueryTypeFactory.NodeSDod)
152 {
154 }
155 }
156 else if ((object)_argXmlTypes[i] == XmlQueryTypeFactory.NodeSDod)
157 {
159 }
160 }
162 }
163
164 public object Invoke(object extObj, object[] args)
165 {
166 try
167 {
168 return _meth.Invoke(extObj, args);
169 }
171 {
172 throw new XslTransformException(ex.InnerException, System.SR.XmlIl_ExtensionError, _name);
173 }
174 catch (Exception ex2)
175 {
177 {
178 throw;
179 }
181 }
182 }
183
184 public override bool Equals(object other)
185 {
188 {
190 }
191 return false;
192 }
193
194 public override int GetHashCode()
195 {
196 return _hashCode;
197 }
198
200 {
201 if (clrType.IsEnum)
202 {
204 }
205 if (clrType.IsByRef)
206 {
208 }
209 return clrType;
210 }
211
216}
static Type GetUnderlyingType(Type enumType)
Definition Enum.cs:309
static CultureInfo InvariantCulture
object? Invoke(object? obj, object?[]? parameters)
static string XmlIl_NonPublicExtensionMethod
Definition SR.cs:2058
static string XmlIl_ExtensionError
Definition SR.cs:2050
static string XmlIl_ByRefType
Definition SR.cs:2062
static string XmlIl_NoExtensionMethod
Definition SR.cs:2054
static string XmlIl_AmbiguousExtensionMethod
Definition SR.cs:2056
static string XmlIl_GenericExtensionMethod
Definition SR.cs:2060
Definition SR.cs:7
MethodInfo[] GetMethods()
Definition Type.cs:788
static bool IsCatchableException(Exception e)
object Invoke(object extObj, object[] args)
XmlExtensionFunction(string name, string namespaceUri, int numArgs, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type objectType, BindingFlags flags)
XmlExtensionFunction(string name, string namespaceUri, MethodInfo meth)
void Init(string name, string namespaceUri, int numArgs, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type objectType, BindingFlags flags)
static XmlQueryType InferXsltType(Type clrType)
static readonly XmlQueryType NodeSDod
static readonly XmlQueryType Node
static readonly XmlQueryType NodeS
static readonly XmlQueryType NodeNotRtfS
static readonly XmlQueryType NodeNotRtf