diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-12-10 18:05:18 -0500 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-12-10 18:05:18 -0500 |
commit | 8776d1afa6dce054f3bc7cb421c86f3e2fe06ab3 (patch) | |
tree | 506b4f8487aaba8f5ea5e3e94795308b82a0a7ca /src/SMAPI/Framework/Reflection/PrivateMethod.cs | |
parent | 80c4d93559989777fbe5a23b923155b93df7a715 (diff) | |
download | SMAPI-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.cs | 99 |
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 |