using System;
using System.Reflection;
using URAnticipatingMinds.PlatformServices.UnmanagedReflection;
namespace AnticipatingMinds.Genesis.CodeDOM{
/// <summary>
/// Represents information about method or indexer parameter.
/// </summary>
[Serializable]
public abstract class CodeParameterInfo
{
#region Public instance properties
/// <summary>
/// Gets parameter name.
/// </summary>
public abstract string Name
{
get;
}
/// <summary>
/// Gets parameter modifiers.
/// </summary>
public abstract CodeMethodParameter.CodeMethodParameterModifier Modifiers
{
get;
}
/// <summary>
/// Gets parameter type name.
/// </summary>
public abstract string TypeName
{
get;
}
/// <summary>
/// Returns true if open ended parameter.
/// </summary>
public abstract bool IsParameterArray
{
get;
}
#endregion Public instance properties
}
[Serializable]
internal class CodeMetadataParameterInfo : CodeParameterInfo
{
#region Instance constructors
internal CodeMetadataParameterInfo(UR.ParameterInfo parameterInfo)
{
name = parameterInfo.Name;
isParameterArray = parameterInfo.IsOptional;
typeName = parameterInfo.TypeName;
if(typeName.EndsWith("&"))
{
modifiers |= CodeMethodParameter.CodeMethodParameterModifier.Ref;
}
if(((int)parameterInfo.CorAttributes & (int)UR.CorParamAttr.pdOut) != 0)
{
modifiers |= CodeMethodParameter.CodeMethodParameterModifier.Out;
}
}
#endregion Instance constructors
#region Public instance properties
public override string Name
{
get
{
return name;
}
}
public override bool IsParameterArray
{
get
{
return isParameterArray;
}
}
public override CodeMethodParameter.CodeMethodParameterModifier Modifiers
{
get
{
return modifiers;
}
}
public override string TypeName
{
get
{
return typeName;
}
}
#endregion Public instance properties
#region Private instance fields
private CodeMethodParameter.CodeMethodParameterModifier modifiers;
private string typeName;
private bool isParameterArray;
private string name;
#endregion Private instance fields
}
[Serializable]
internal class CodeModelParameterInfo : CodeParameterInfo
{
#region Instance constructors
internal CodeModelParameterInfo(CodeMethodParameter codeParameter)
{
this.codeParameter = codeParameter;
}
#endregion Instance constructors
#region Public instance properties
public override string Name
{
get
{
return codeParameter.Name;
}
}
public override bool IsParameterArray
{
get
{
return codeParameter.IsParameterArray;
}
}
public override CodeMethodParameter.CodeMethodParameterModifier Modifiers
{
get
{
return codeParameter.Modifier;
}
}
public override string TypeName
{
get
{
if(codeParameter.Type.TypeInfo != null)
return codeParameter.Type.TypeInfo.FullName;
else
return codeParameter.Type.TypeName;
}
}
#endregion Public instance properties
#region Private instance fields
private CodeMethodParameter codeParameter;
#endregion Private instance fields
}
}
|