Exemple #1
0
        T RunMethod <S, T>(T defaultIfNotExisting, params object[] parameters)
        {
            if (container == null)
            {
                return(defaultIfNotExisting);
            }

            var methodName = typeof(S).Name.Replace("Harmony", "");
            var method     = PatchTools.GetPatchMethod <S>(container, methodName);

            if (method != null)
            {
                if (typeof(T).IsAssignableFrom(method.ReturnType))
                {
                    return((T)method.Invoke(null, Type.EmptyTypes));
                }

                var input            = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
                var actualParameters = AccessTools.ActualParameters(method, input);
                method.Invoke(null, actualParameters);
                return(defaultIfNotExisting);
            }

            return(defaultIfNotExisting);
        }
Exemple #2
0
        T RunMethod <S, T>(T defaultIfNotExisting, Func <T, string> failOnResult = null, params object[] parameters)
        {
            if (auxilaryMethods.TryGetValue(typeof(S), out var method))
            {
                var input            = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
                var actualParameters = AccessTools.ActualParameters(method, input);

                if (typeof(T).IsAssignableFrom(method.ReturnType))
                {
                    var result = (T)method.Invoke(null, actualParameters);
                    if (failOnResult != null)
                    {
                        var error = failOnResult(result);
                        if (error != null)
                        {
                            throw new Exception($"Method {method.FullDescription()} returned an unexpected result: {error}");
                        }
                    }
                    return(result);
                }
                else
                {
                    throw new Exception($"Method {method.FullDescription()} has wrong return type (should be assignable to {typeof(T).FullName})");
                }
            }

            return(defaultIfNotExisting);
        }
Exemple #3
0
 void RunMethod <S>(params object[] parameters)
 {
     if (auxilaryMethods.TryGetValue(typeof(S), out var method))
     {
         var input            = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
         var actualParameters = AccessTools.ActualParameters(method, input);
         _ = method.Invoke(null, actualParameters);
     }
 }
Exemple #4
0
		private void RunMethod<S>(params object[] parameters)
		{
			if (container == null)
				return;

			var methodName = typeof(S).Name.Replace("Harmony", "");
			var method = GetPatchMethod<S>(container, methodName);
			if (method != null)
			{
				var input = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
				var actualParameters = AccessTools.ActualParameters(method, input);
				method.Invoke(null, actualParameters);
			}
		}
Exemple #5
0
        T RunMethod <S, T>(T defaultIfNotExisting, params object[] parameters)
        {
            if (auxilaryMethods.TryGetValue(typeof(S), out var method))
            {
                var input            = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
                var actualParameters = AccessTools.ActualParameters(method, input);

                if (typeof(T).IsAssignableFrom(method.ReturnType))
                {
                    return((T)method.Invoke(null, actualParameters));
                }

                _ = method.Invoke(null, actualParameters);
                return(defaultIfNotExisting);
            }

            return(defaultIfNotExisting);
        }
 void RunMethod <S>(ref Exception exception, params object[] parameters)
 {
     if (auxilaryMethods.TryGetValue(typeof(S), out var method))
     {
         var input            = (parameters ?? new object[0]).Union(new object[] { instance }).ToArray();
         var actualParameters = AccessTools.ActualParameters(method, input);
         try
         {
             var result = method.Invoke(null, actualParameters);
             if (method.ReturnType == typeof(Exception))
             {
                 exception = result as Exception;
             }
         }
         catch (Exception ex)
         {
             ReportException(ex, method);
         }
     }
 }