The Labs \ Source Viewer \ SSCLI \ Microsoft.JScript \ JSWrappedProperty

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace Microsoft.JScript
  16. {
  17.    
  18.     using System;
  19.     using System.Reflection;
  20.     using System.Globalization;
  21.     using System.Diagnostics;
  22.    
  23.     internal class JSWrappedProperty : PropertyInfo, IWrappedMember
  24.     {
  25.         internal object obj;
  26.         internal PropertyInfo property;
  27.        
  28.         internal JSWrappedProperty(PropertyInfo property, object obj)
  29.         {
  30.             this.obj = obj;
  31.             this.property = property;
  32.             if (obj is JSObject) {
  33.                 Type pt = property.DeclaringType;
  34.                 if (pt == Typeob.Object || pt == Typeob.String || pt.IsPrimitive || pt == Typeob.Array) {
  35.                     if (obj is BooleanObject)
  36.                         this.obj = ((BooleanObject)obj).value;
  37.                     else if (obj is NumberObject)
  38.                         this.obj = ((NumberObject)obj).value;
  39.                     else if (obj is StringObject)
  40.                         this.obj = ((StringObject)obj).value;
  41.                     else if (obj is ArrayWrapper)
  42.                         this.obj = ((ArrayWrapper)obj).value;
  43.                 }
  44.             }
  45.         }
  46.        
  47.         internal virtual string GetClassFullName()
  48.         {
  49.             if (this.property is JSProperty)
  50.                 return ((JSProperty)this.property).GetClassFullName();
  51.             else
  52.                 return this.property.DeclaringType.FullName;
  53.         }
  54.        
  55.         public override MemberTypes MemberType {
  56.             get { return MemberTypes.Property; }
  57.         }
  58.        
  59.         public override string Name {
  60.             get {
  61.                 if (this.obj is LenientGlobalObject && this.property.Name.StartsWith("Slow", StringComparison.Ordinal))
  62.                     return this.property.Name.Substring(4);
  63.                 else
  64.                     return this.property.Name;
  65.             }
  66.         }
  67.        
  68.         public override Type DeclaringType {
  69.             get { return this.property.DeclaringType; }
  70.         }
  71.        
  72.         public override Type ReflectedType {
  73.             get { return this.property.ReflectedType; }
  74.         }
  75.        
  76.         public override PropertyAttributes Attributes {
  77.             get { return this.property.Attributes; }
  78.         }
  79.        
  80.         public override bool CanRead {
  81.             get { return this.property.CanRead; }
  82.         }
  83.        
  84.         public override bool CanWrite {
  85.             get { return this.property.CanWrite; }
  86.         }
  87.        
  88.         public override object[] GetCustomAttributes(Type t, bool inherit)
  89.         {
  90.             return CustomAttribute.GetCustomAttributes(this.property, t, inherit);
  91.         }
  92.        
  93.         public override object[] GetCustomAttributes(bool inherit)
  94.         {
  95.             return this.property.GetCustomAttributes(inherit);
  96.         }
  97.        
  98.         #if !DEBUG
  99.         [DebuggerStepThroughAttribute()]
  100.         [DebuggerHiddenAttribute()]
  101.         #endif
  102.         public override object GetValue(object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture)
  103.         {
  104.             return this.property.GetValue(this.obj, invokeAttr, binder, index, culture);
  105.         }
  106.        
  107.         #if !DEBUG
  108.         [DebuggerStepThroughAttribute()]
  109.         [DebuggerHiddenAttribute()]
  110.         #endif
  111.         public override void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture)
  112.         {
  113.             this.property.SetValue(this.obj, value, invokeAttr, binder, index, culture);
  114.         }
  115.        
  116.         public override MethodInfo[] GetAccessors(bool nonPublic)
  117.         {
  118.             return this.property.GetAccessors(nonPublic);
  119.         }
  120.        
  121.         public override MethodInfo GetGetMethod(bool nonPublic)
  122.         {
  123.             MethodInfo meth = JSProperty.GetGetMethod(this.property, nonPublic);
  124.             if (meth == null)
  125.                 return null;
  126.             return new JSWrappedMethod(meth, this.obj);
  127.         }
  128.        
  129.         public override ParameterInfo[] GetIndexParameters()
  130.         {
  131.             return this.property.GetIndexParameters();
  132.         }
  133.        
  134.         public override MethodInfo GetSetMethod(bool nonPublic)
  135.         {
  136.             MethodInfo meth = JSProperty.GetSetMethod(this.property, nonPublic);
  137.             if (meth == null)
  138.                 return null;
  139.             return new JSWrappedMethod(meth, this.obj);
  140.         }
  141.        
  142.         public object GetWrappedObject()
  143.         {
  144.             return this.obj;
  145.         }
  146.        
  147.         public override Type PropertyType {
  148.             get { return this.property.PropertyType; }
  149.         }
  150.        
  151.         public override bool IsDefined(Type type, bool inherit)
  152.         {
  153.             return CustomAttribute.IsDefined(this.property, type, inherit);
  154.         }
  155.     }
  156. }

Developer Fusion