You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.5 KiB
97 lines
2.5 KiB
// <file> |
|
// <copyright see="prj:///doc/copyright.txt"/> |
|
// <license see="prj:///doc/license.txt"/> |
|
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> |
|
// <version value="$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); |
|
} |
|
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; |
|
} |
|
} |
|
}
|
|
|