summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/Reflection/PrivateMethod.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-12-10 18:05:18 -0500
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-12-10 18:05:18 -0500
commit8776d1afa6dce054f3bc7cb421c86f3e2fe06ab3 (patch)
tree506b4f8487aaba8f5ea5e3e94795308b82a0a7ca /src/SMAPI/Framework/Reflection/PrivateMethod.cs
parent80c4d93559989777fbe5a23b923155b93df7a715 (diff)
downloadSMAPI-8776d1afa6dce054f3bc7cb421c86f3e2fe06ab3.tar.gz
SMAPI-8776d1afa6dce054f3bc7cb421c86f3e2fe06ab3.tar.bz2
SMAPI-8776d1afa6dce054f3bc7cb421c86f3e2fe06ab3.zip
adjust reflection API to correctly reflect what it does (#410)
Diffstat (limited to 'src/SMAPI/Framework/Reflection/PrivateMethod.cs')
-rw-r--r--src/SMAPI/Framework/Reflection/PrivateMethod.cs99
1 files changed, 0 insertions, 99 deletions
diff --git a/src/SMAPI/Framework/Reflection/PrivateMethod.cs b/src/SMAPI/Framework/Reflection/PrivateMethod.cs
deleted file mode 100644
index ba2374f4..00000000
--- a/src/SMAPI/Framework/Reflection/PrivateMethod.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-using System.Reflection;
-
-namespace StardewModdingAPI.Framework.Reflection
-{
- /// <summary>A private method obtained through reflection.</summary>
- internal class PrivateMethod : IPrivateMethod
- {
- /*********
- ** Properties
- *********/
- /// <summary>The type that has the method.</summary>
- private readonly Type ParentType;
-
- /// <summary>The object that has the instance method (if applicable).</summary>
- private readonly object Parent;
-
- /// <summary>The display name shown in error messages.</summary>
- private string DisplayName => $"{this.ParentType.FullName}::{this.MethodInfo.Name}";
-
-
- /*********
- ** Accessors
- *********/
- /// <summary>The reflection metadata.</summary>
- public MethodInfo MethodInfo { get; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="parentType">The type that has the method.</param>
- /// <param name="obj">The object that has the instance method(if applicable).</param>
- /// <param name="method">The reflection metadata.</param>
- /// <param name="isStatic">Whether the field is static.</param>
- /// <exception cref="ArgumentNullException">The <paramref name="parentType"/> or <paramref name="method"/> is null.</exception>
- /// <exception cref="ArgumentException">The <paramref name="obj"/> is null for a non-static method, or not null for a static method.</exception>
- public PrivateMethod(Type parentType, object obj, MethodInfo method, bool isStatic)
- {
- // validate
- if (parentType == null)
- throw new ArgumentNullException(nameof(parentType));
- if (method == null)
- throw new ArgumentNullException(nameof(method));
- if (isStatic && obj != null)
- throw new ArgumentException("A static method cannot have an object instance.");
- if (!isStatic && obj == null)
- throw new ArgumentException("A non-static method must have an object instance.");
-
- // save
- this.ParentType = parentType;
- this.Parent = obj;
- this.MethodInfo = method;
- }
-
- /// <summary>Invoke the method.</summary>
- /// <typeparam name="TValue">The return type.</typeparam>
- /// <param name="arguments">The method arguments to pass in.</param>
- public TValue Invoke<TValue>(params object[] arguments)
- {
- // invoke method
- object result;
- try
- {
- result = this.MethodInfo.Invoke(this.Parent, arguments);
- }
- catch (Exception ex)
- {
- throw new Exception($"Couldn't invoke the private {this.DisplayName} field", ex);
- }
-
- // cast return value
- try
- {
- return (TValue)result;
- }
- catch (InvalidCastException)
- {
- throw new InvalidCastException($"Can't convert the return value of the private {this.DisplayName} method from {this.MethodInfo.ReturnType.FullName} to {typeof(TValue).FullName}.");
- }
- }
-
- /// <summary>Invoke the method.</summary>
- /// <param name="arguments">The method arguments to pass in.</param>
- public void Invoke(params object[] arguments)
- {
- // invoke method
- try
- {
- this.MethodInfo.Invoke(this.Parent, arguments);
- }
- catch (Exception ex)
- {
- throw new Exception($"Couldn't invoke the private {this.DisplayName} field", ex);
- }
- }
- }
-} \ No newline at end of file