summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-10-07 23:07:10 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-10-07 23:07:10 -0400
commit929dccb75a1405737975d76648e015a3e7c00177 (patch)
tree659fe16509327e694555db363caf7f47f326443b /src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs
parent926894f8f52c2a5cf104fcac2f7f34b637f7b531 (diff)
downloadSMAPI-929dccb75a1405737975d76648e015a3e7c00177.tar.gz
SMAPI-929dccb75a1405737975d76648e015a3e7c00177.tar.bz2
SMAPI-929dccb75a1405737975d76648e015a3e7c00177.zip
reorganise repo structure
Diffstat (limited to 'src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs')
-rw-r--r--src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs93
1 files changed, 0 insertions, 93 deletions
diff --git a/src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs b/src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs
deleted file mode 100644
index 08204b7e..00000000
--- a/src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Reflection;
-
-namespace StardewModdingAPI.Framework.Reflection
-{
- /// <summary>A private property obtained through reflection.</summary>
- /// <typeparam name="TValue">The property value type.</typeparam>
- internal class PrivateProperty<TValue> : IPrivateProperty<TValue>
- {
- /*********
- ** Properties
- *********/
- /// <summary>The type that has the field.</summary>
- private readonly Type ParentType;
-
- /// <summary>The object that has the instance field (if applicable).</summary>
- private readonly object Parent;
-
- /// <summary>The display name shown in error messages.</summary>
- private string DisplayName => $"{this.ParentType.FullName}::{this.PropertyInfo.Name}";
-
-
- /*********
- ** Accessors
- *********/
- /// <summary>The reflection metadata.</summary>
- public PropertyInfo PropertyInfo { get; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="parentType">The type that has the field.</param>
- /// <param name="obj">The object that has the instance field (if applicable).</param>
- /// <param name="property">The reflection metadata.</param>
- /// <param name="isStatic">Whether the field is static.</param>
- /// <exception cref="ArgumentNullException">The <paramref name="parentType"/> or <paramref name="property"/> is null.</exception>
- /// <exception cref="ArgumentException">The <paramref name="obj"/> is null for a non-static field, or not null for a static field.</exception>
- public PrivateProperty(Type parentType, object obj, PropertyInfo property, bool isStatic)
- {
- // validate
- if (parentType == null)
- throw new ArgumentNullException(nameof(parentType));
- if (property == null)
- throw new ArgumentNullException(nameof(property));
- if (isStatic && obj != null)
- throw new ArgumentException("A static property cannot have an object instance.");
- if (!isStatic && obj == null)
- throw new ArgumentException("A non-static property must have an object instance.");
-
- // save
- this.ParentType = parentType;
- this.Parent = obj;
- this.PropertyInfo = property;
- }
-
- /// <summary>Get the property value.</summary>
- public TValue GetValue()
- {
- try
- {
- return (TValue)this.PropertyInfo.GetValue(this.Parent);
- }
- catch (InvalidCastException)
- {
- throw new InvalidCastException($"Can't convert the private {this.DisplayName} property from {this.PropertyInfo.PropertyType.FullName} to {typeof(TValue).FullName}.");
- }
- catch (Exception ex)
- {
- throw new Exception($"Couldn't get the value of the private {this.DisplayName} property", ex);
- }
- }
-
- /// <summary>Set the property value.</summary>
- //// <param name="value">The value to set.</param>
- public void SetValue(TValue value)
- {
- try
- {
- this.PropertyInfo.SetValue(this.Parent, value);
- }
- catch (InvalidCastException)
- {
- throw new InvalidCastException($"Can't assign the private {this.DisplayName} property a {typeof(TValue).FullName} value, must be compatible with {this.PropertyInfo.PropertyType.FullName}.");
- }
- catch (Exception ex)
- {
- throw new Exception($"Couldn't set the value of the private {this.DisplayName} property", ex);
- }
- }
- }
-}