diff options
author | Sebastien Pouliot <sebastien@ximian.com> | 2005-10-18 19:19:43 +0400 |
---|---|---|
committer | Sebastien Pouliot <sebastien@ximian.com> | 2005-10-18 19:19:43 +0400 |
commit | f1b7217ebee703fe3e97e406ffa89e1cd2abd322 (patch) | |
tree | 0a675cb0789b579c592317234ffd5b61eb880549 /mcs/class/System/System.ComponentModel.Design.Serialization | |
parent | 2c650d62454edfb686e3ad85631c9908613cb109 (diff) |
2005-10-18 Sebastien Pouliot <sebastien@ximian.com>
* InstanceDescriptor.cs: Fix Invoke method as there's no 'this' for ctors.
svn path=/trunk/mcs/; revision=51867
Diffstat (limited to 'mcs/class/System/System.ComponentModel.Design.Serialization')
-rw-r--r-- | mcs/class/System/System.ComponentModel.Design.Serialization/ChangeLog | 6 | ||||
-rw-r--r-- | mcs/class/System/System.ComponentModel.Design.Serialization/InstanceDescriptor.cs | 31 |
2 files changed, 30 insertions, 7 deletions
diff --git a/mcs/class/System/System.ComponentModel.Design.Serialization/ChangeLog b/mcs/class/System/System.ComponentModel.Design.Serialization/ChangeLog index 0b30e46b38a..838d333e826 100644 --- a/mcs/class/System/System.ComponentModel.Design.Serialization/ChangeLog +++ b/mcs/class/System/System.ComponentModel.Design.Serialization/ChangeLog @@ -1,3 +1,7 @@ +2005-10-18 Sebastien Pouliot <sebastien@ximian.com> + + * InstanceDescriptor.cs: Fix Invoke method as there's no 'this' for ctors. + 2005-01-27 LLuis Sanchez Gual <lluis@novell.com> * InstanceDescriptor.cs: Constructors don't need to be static. @@ -9,4 +13,4 @@ * DesignerSerializerAttribute.cs: Implemented, fixed AttributeUsage * ResolveNameEventArgs.cs: Visibility bug fixed * RootDesignerSerializerAttribute.cs: Fixed and implemented, fixed AttributeUsage - * InstanceDescriptor.cs: Completely Implemented
\ No newline at end of file + * InstanceDescriptor.cs: Completely Implemented diff --git a/mcs/class/System/System.ComponentModel.Design.Serialization/InstanceDescriptor.cs b/mcs/class/System/System.ComponentModel.Design.Serialization/InstanceDescriptor.cs index fa9eac239e9..6e75bd45ff5 100644 --- a/mcs/class/System/System.ComponentModel.Design.Serialization/InstanceDescriptor.cs +++ b/mcs/class/System/System.ComponentModel.Design.Serialization/InstanceDescriptor.cs @@ -7,8 +7,7 @@ // // (C) 2003 Martin Willemoes Hansen // (C) 2003 Andreas Nahr -// - +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -50,9 +49,7 @@ namespace System.ComponentModel.Design.Serialization public InstanceDescriptor(MemberInfo member, ICollection arguments, bool isComplete) { this.isComplete = isComplete; - if (member == null) - throw new ArgumentNullException ("member", "MemberInfo must be valid"); - if (!IsMemberValid (member, arguments)) + if ((member != null) && !IsMemberValid (member, arguments)) throw new ArgumentException ("Only Constructor, Method, Field or Property members allowed", "member"); this.member = member; this.arguments = arguments; @@ -123,14 +120,36 @@ namespace System.ComponentModel.Design.Serialization get { return member; } } + private bool HasThis () + { + if (member is ConstructorInfo) + return false; + MethodInfo mi = (member as MethodInfo); + if (mi != null) + return !mi.IsStatic; + FieldInfo fi = (member as FieldInfo); + if (fi != null) + return !fi.IsStatic; + PropertyInfo pi = (member as PropertyInfo); + if (pi != null) + return !pi.GetGetMethod ().IsStatic; + return true; + } + public object Invoke() { object[] parsearguments; if (arguments == null) parsearguments = new object[0]; - else { + else if (HasThis ()) { parsearguments = new object[arguments.Count - 1]; arguments.CopyTo (parsearguments, 0); + } else { + parsearguments = (arguments as object[]); + if (parsearguments == null) { + parsearguments = new object[arguments.Count]; + arguments.CopyTo (parsearguments, 0); + } } //MemberInfo member; |