.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
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.
 
 
 
 

175 lines
4.4 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;
using System.Text;
namespace ICSharpCode.SharpDevelop.Dom {
public class DefaultProperty : AbstractMember, IProperty
{
DomRegion getterRegion = DomRegion.Empty;
DomRegion setterRegion = DomRegion.Empty;
IList<IParameter> parameters = null;
internal byte accessFlags;
const byte indexerFlag = 0x01;
const byte getterFlag = 0x02;
const byte setterFlag = 0x04;
const byte extensionFlag = 0x08;
ModifierEnum getterModifiers, setterModifiers;
protected override void FreezeInternal()
{
parameters = FreezeList(parameters);
base.FreezeInternal();
}
public bool IsIndexer {
get { return (accessFlags & indexerFlag) == indexerFlag; }
set {
CheckBeforeMutation();
if (value) accessFlags |= indexerFlag; else accessFlags &= 255-indexerFlag;
}
}
public bool CanGet {
get { return (accessFlags & getterFlag) == getterFlag; }
set {
CheckBeforeMutation();
if (value) accessFlags |= getterFlag; else accessFlags &= 255-getterFlag;
}
}
public bool CanSet {
get { return (accessFlags & setterFlag) == setterFlag; }
set {
CheckBeforeMutation();
if (value) accessFlags |= setterFlag; else accessFlags &= 255-setterFlag;
}
}
public bool IsExtensionMethod {
get { return (accessFlags & extensionFlag) == extensionFlag; }
set {
CheckBeforeMutation();
if (value) accessFlags |= extensionFlag; else accessFlags &= 255-extensionFlag;
}
}
public override string DocumentationTag {
get {
string dotnetName = this.DotNetName;
StringBuilder b = new StringBuilder("P:", dotnetName.Length + 2);
b.Append(dotnetName);
IList<IParameter> paras = this.Parameters;
if (paras.Count > 0) {
b.Append('(');
for (int i = 0; i < paras.Count; ++i) {
if (i > 0) b.Append(',');
IReturnType rt = paras[i].ReturnType;
if (rt != null) {
b.Append(rt.DotNetName);
}
}
b.Append(')');
}
return b.ToString();
}
}
public override IMember Clone()
{
DefaultProperty p = new DefaultProperty(Name, ReturnType, Modifiers, Region, BodyRegion, DeclaringType);
p.parameters = DefaultParameter.Clone(this.Parameters);
p.getterModifiers = this.getterModifiers;
p.setterModifiers = this.setterModifiers;
p.getterRegion = this.getterRegion;
p.setterRegion = this.setterRegion;
p.CopyDocumentationFrom(this);
p.accessFlags = this.accessFlags;
foreach (ExplicitInterfaceImplementation eii in InterfaceImplementations) {
p.InterfaceImplementations.Add(eii.Clone());
}
return p;
}
public virtual IList<IParameter> Parameters {
get {
if (parameters == null) {
parameters = new List<IParameter>();
}
return parameters;
}
set {
CheckBeforeMutation();
parameters = value;
}
}
public DomRegion GetterRegion {
get { return getterRegion; }
set {
CheckBeforeMutation();
getterRegion = value;
}
}
public DomRegion SetterRegion {
get { return setterRegion; }
set {
CheckBeforeMutation();
setterRegion = value;
}
}
public ModifierEnum GetterModifiers {
get { return getterModifiers; }
set {
CheckBeforeMutation();
getterModifiers = value;
}
}
public ModifierEnum SetterModifiers {
get { return setterModifiers; }
set {
CheckBeforeMutation();
setterModifiers = value;
}
}
public DefaultProperty(IClass declaringType, string name) : base(declaringType, name)
{
}
public DefaultProperty(string name, IReturnType type, ModifierEnum m, DomRegion region, DomRegion bodyRegion, IClass declaringType) : base(declaringType, name)
{
this.ReturnType = type;
this.Region = region;
this.BodyRegion = bodyRegion;
Modifiers = m;
}
public virtual int CompareTo(IProperty value)
{
int cmp = string.CompareOrdinal(this.FullyQualifiedName, value.FullyQualifiedName);
if (cmp != 0) {
return cmp;
}
return DiffUtility.Compare(Parameters, value.Parameters);
}
int IComparable.CompareTo(object value) {
return CompareTo((IProperty)value);
}
public override EntityType EntityType {
get {
return EntityType.Property;
}
}
}
}