Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@440 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
43 changed files with 163 additions and 613 deletions
@ -1,23 +0,0 @@
@@ -1,23 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Dom |
||||
{ |
||||
public interface IIndexer: IMethodOrIndexer |
||||
{ |
||||
IRegion GetterRegion { |
||||
get; |
||||
} |
||||
|
||||
IRegion SetterRegion { |
||||
get; |
||||
} |
||||
} |
||||
} |
@ -1,98 +0,0 @@
@@ -1,98 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Dom |
||||
{ |
||||
[Serializable] |
||||
public class DefaultIndexer : AbstractMember, IIndexer |
||||
{ |
||||
protected IRegion bodyRegion; |
||||
protected IRegion getterRegion; |
||||
protected IRegion setterRegion; |
||||
List<IParameter> parameters; |
||||
|
||||
public override string DocumentationTag { |
||||
get { |
||||
// TODO: We have to specify the parameters here
|
||||
return "P:" + this.DotNetName; |
||||
} |
||||
} |
||||
|
||||
public override IMember Clone() |
||||
{ |
||||
return new DefaultIndexer(ReturnType, DefaultParameter.Clone(this.Parameters), Modifiers, Region, BodyRegion, DeclaringType); |
||||
} |
||||
|
||||
public virtual IRegion BodyRegion { |
||||
get { |
||||
return bodyRegion; |
||||
} |
||||
} |
||||
|
||||
public IRegion GetterRegion { |
||||
get { |
||||
return getterRegion; |
||||
} |
||||
} |
||||
|
||||
public IRegion SetterRegion { |
||||
get { |
||||
return setterRegion; |
||||
} |
||||
} |
||||
|
||||
public virtual List<IParameter> Parameters { |
||||
get { |
||||
if (parameters == null) { |
||||
parameters = new List<IParameter>(); |
||||
} |
||||
return parameters; |
||||
} |
||||
set { |
||||
parameters = value; |
||||
} |
||||
} |
||||
|
||||
public DefaultIndexer(IClass declaringType) : base(declaringType, null) |
||||
{ |
||||
} |
||||
|
||||
public DefaultIndexer(IReturnType type, List<IParameter> parameters, ModifierEnum m, IRegion region, IRegion bodyRegion, IClass declaringType) : this(declaringType) |
||||
{ |
||||
this.ReturnType = type; |
||||
this.Parameters = parameters; |
||||
this.Region = region; |
||||
this.bodyRegion = bodyRegion; |
||||
this.Modifiers = m; |
||||
} |
||||
|
||||
public virtual int CompareTo(IIndexer value) |
||||
{ |
||||
int cmp; |
||||
cmp = base.CompareTo((IDecoration)value); |
||||
if (cmp != 0) { |
||||
return cmp; |
||||
} |
||||
|
||||
if (FullyQualifiedName != null) { |
||||
cmp = FullyQualifiedName.CompareTo(value.FullyQualifiedName); |
||||
if (cmp != 0) { |
||||
return cmp; |
||||
} |
||||
} |
||||
|
||||
return DiffUtility.Compare(Parameters, value.Parameters); |
||||
} |
||||
|
||||
int IComparable.CompareTo(object value) { |
||||
return CompareTo((IIndexer)value); |
||||
} |
||||
} |
||||
} |
@ -1,98 +0,0 @@
@@ -1,98 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using System.Text; |
||||
using System.Reflection; |
||||
using System.Xml; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Dom |
||||
{ |
||||
[Serializable] |
||||
public class ReflectionIndexer : DefaultIndexer |
||||
{ |
||||
PropertyInfo propertyInfo; |
||||
|
||||
public override IReturnType ReturnType { |
||||
get { |
||||
return ReflectionReturnType.Create(this, propertyInfo.PropertyType, false); |
||||
} |
||||
set { |
||||
} |
||||
} |
||||
|
||||
public override List<IParameter> Parameters { |
||||
get { |
||||
List<IParameter> parameters = new List<IParameter>(); |
||||
foreach (ParameterInfo parameterInfo in propertyInfo.GetIndexParameters()) { |
||||
parameters.Add(new ReflectionParameter(parameterInfo, this)); |
||||
} |
||||
return parameters; |
||||
} |
||||
set { |
||||
} |
||||
} |
||||
|
||||
public ReflectionIndexer(PropertyInfo propertyInfo, IClass declaringType) : base(declaringType) |
||||
{ |
||||
this.propertyInfo = propertyInfo; |
||||
|
||||
// show the abstract layer that we have getter & setters
|
||||
if (propertyInfo.CanRead) { |
||||
getterRegion = new DefaultRegion(0, 0, 0, 0); |
||||
} else { |
||||
getterRegion = null; |
||||
} |
||||
|
||||
if (propertyInfo.CanWrite) { |
||||
setterRegion = new DefaultRegion(0, 0, 0, 0); |
||||
} else { |
||||
setterRegion = null; |
||||
} |
||||
|
||||
MethodInfo methodBase = null; |
||||
try { |
||||
methodBase = propertyInfo.GetGetMethod(true); |
||||
} catch (Exception) {} |
||||
|
||||
if (methodBase == null) { |
||||
try { |
||||
methodBase = propertyInfo.GetSetMethod(true); |
||||
} catch (Exception) {} |
||||
} |
||||
|
||||
ModifierEnum modifiers = ModifierEnum.None; |
||||
if (methodBase != null) { |
||||
if (methodBase.IsStatic) { |
||||
modifiers |= ModifierEnum.Static; |
||||
} |
||||
|
||||
if (methodBase.IsAssembly) { |
||||
modifiers |= ModifierEnum.Internal; |
||||
} |
||||
|
||||
if (methodBase.IsPrivate) { // I assume that private is used most and public last (at least should be)
|
||||
modifiers |= ModifierEnum.Private; |
||||
} else if (methodBase.IsFamily) { |
||||
modifiers |= ModifierEnum.Protected; |
||||
} else if (methodBase.IsPublic) { |
||||
modifiers |= ModifierEnum.Public; |
||||
} else if (methodBase.IsFamilyOrAssembly) { |
||||
modifiers |= ModifierEnum.ProtectedOrInternal; |
||||
} else if (methodBase.IsFamilyAndAssembly) { |
||||
modifiers |= ModifierEnum.Protected; |
||||
modifiers |= ModifierEnum.Internal; |
||||
} |
||||
} else { // assume public property, if no methodBase could be get.
|
||||
modifiers = ModifierEnum.Public; |
||||
} |
||||
this.Modifiers = modifiers; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue