mirror of https://github.com/icsharpcode/ILSpy.git
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.
173 lines
4.0 KiB
173 lines
4.0 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Collections.Generic; |
|
|
|
namespace ICSharpCode.SharpDevelop.Dom |
|
{ |
|
public class DefaultParameter : AbstractFreezable, IParameter |
|
{ |
|
public static readonly IList<IParameter> EmptyParameterList = EmptyList<IParameter>.Instance; |
|
|
|
string name; |
|
string documentation; |
|
|
|
// int nameHashCode = -1; |
|
// int documentationHash = -1; |
|
|
|
IReturnType returnType; |
|
ParameterModifiers modifier; |
|
DomRegion region; |
|
IList<IAttribute> attributes; |
|
|
|
protected override void FreezeInternal() |
|
{ |
|
attributes = FreezeList(attributes); |
|
base.FreezeInternal(); |
|
} |
|
|
|
protected DefaultParameter(string name) |
|
{ |
|
Name = name; |
|
} |
|
|
|
public DefaultParameter(IParameter p) |
|
{ |
|
this.name = p.Name; |
|
this.region = p.Region; |
|
this.modifier = p.Modifiers; |
|
this.returnType = p.ReturnType; |
|
} |
|
|
|
public DefaultParameter(string name, IReturnType type, DomRegion region) : this(name) |
|
{ |
|
returnType = type; |
|
this.region = region; |
|
} |
|
|
|
public DomRegion Region { |
|
get { |
|
return region; |
|
} |
|
} |
|
public bool IsOut { |
|
get { |
|
return (modifier & ParameterModifiers.Out) == ParameterModifiers.Out; |
|
} |
|
} |
|
public bool IsRef { |
|
get { |
|
return (modifier & ParameterModifiers.Ref) == ParameterModifiers.Ref; |
|
} |
|
} |
|
public bool IsParams { |
|
get { |
|
return (modifier & ParameterModifiers.Params) == ParameterModifiers.Params; |
|
} |
|
} |
|
public bool IsOptional { |
|
get { |
|
return (modifier & ParameterModifiers.Optional) == ParameterModifiers.Optional; |
|
} |
|
} |
|
|
|
public virtual string Name { |
|
get { |
|
return name; |
|
// return (string)AbstractNamedEntity.fullyQualifiedNames[nameHashCode]; |
|
} |
|
set { |
|
CheckBeforeMutation(); |
|
name = value; |
|
// nameHashCode = value.GetHashCode(); |
|
// if (AbstractNamedEntity.fullyQualifiedNames[nameHashCode] == null) { |
|
// AbstractNamedEntity.fullyQualifiedNames[nameHashCode] = value; |
|
// } |
|
} |
|
} |
|
|
|
public virtual IReturnType ReturnType { |
|
get { |
|
return returnType; |
|
} |
|
set { |
|
CheckBeforeMutation(); |
|
returnType = value; |
|
} |
|
} |
|
|
|
public virtual IList<IAttribute> Attributes { |
|
get { |
|
if (attributes == null) { |
|
attributes = new List<IAttribute>(); |
|
} |
|
return attributes; |
|
} |
|
set { |
|
CheckBeforeMutation(); |
|
attributes = value; |
|
} |
|
} |
|
|
|
public virtual ParameterModifiers Modifiers { |
|
get { |
|
return modifier; |
|
} |
|
set { |
|
CheckBeforeMutation(); |
|
modifier = value; |
|
} |
|
} |
|
|
|
public string Documentation { |
|
get { |
|
return documentation; |
|
// if (documentationHash == -1) { |
|
// return String.Empty; |
|
// } |
|
// return (string)AbstractDecoration.documentationHashtable[documentationHash]; |
|
} |
|
set { |
|
CheckBeforeMutation(); |
|
documentation = value; |
|
// documentationHash = value.GetHashCode(); |
|
// if (AbstractDecoration.documentationHashtable[documentationHash] == null) { |
|
// AbstractDecoration.documentationHashtable[documentationHash] = value; |
|
// } |
|
} |
|
} |
|
|
|
public static List<IParameter> Clone(IList<IParameter> l) |
|
{ |
|
List<IParameter> r = new List<IParameter>(l.Count); |
|
for (int i = 0; i < l.Count; ++i) { |
|
r.Add(new DefaultParameter(l[i])); |
|
} |
|
return r; |
|
} |
|
|
|
public virtual int CompareTo(IParameter value) |
|
{ |
|
if (value == null) return -1; |
|
|
|
// two parameters are equal if they have the same return type |
|
// (they may have different names) |
|
if (object.Equals(ReturnType, value.ReturnType)) { |
|
return 0; |
|
} else { |
|
// if the parameters are not equal, use the parameter name to provide the ordering |
|
int r = string.Compare(this.Name, value.Name); |
|
if (r != 0) |
|
return r; |
|
else |
|
return -1; // but equal names don't make parameters of different return types equal |
|
} |
|
} |
|
|
|
int IComparable.CompareTo(object value) |
|
{ |
|
return CompareTo(value as IParameter); |
|
} |
|
} |
|
}
|
|
|