Browse Source

Add AbstractUnresolvedEntity.Clone() method.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
aa55c206e0
  1. 5
      ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs
  2. 22
      ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedEntity.cs
  3. 24
      ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedMember.cs
  4. 12
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs
  5. 8
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedProperty.cs
  6. 23
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs

5
ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs

@ -1846,6 +1846,11 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -1846,6 +1846,11 @@ namespace ICSharpCode.NRefactory.TypeSystem
// FlagHasNoExtensionMethods is unused in LazyCecilTypeDefinition
}
public override object Clone()
{
throw new NotSupportedException();
}
public IType Resolve(ITypeResolveContext context)
{
if (context == null)

22
ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedEntity.cs

@ -96,6 +96,23 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -96,6 +96,23 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
rareFields.ApplyInterningProvider(provider);
}
/// <summary>
/// Creates a shallow clone of this entity.
/// Collections (e.g. a type's member list) will be cloned as well, but the elements
/// of said list will not be.
/// If this instance is frozen, the clone will be unfrozen.
/// </summary>
public virtual object Clone()
{
var copy = (AbstractUnresolvedEntity)MemberwiseClone();
copy.flags[FlagFrozen] = false;
if (attributes != null)
copy.attributes = new List<IUnresolvedAttribute>(attributes);
if (rareFields != null)
copy.rareFields = (RareFields)rareFields.Clone();
return copy;
}
[Serializable]
internal class RareFields
{
@ -110,6 +127,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -110,6 +127,11 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
public virtual void ApplyInterningProvider(IInterningProvider provider)
{
}
public virtual object Clone()
{
return MemberwiseClone();
}
}
protected void ThrowIfFrozen()

24
ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractUnresolvedMember.cs

@ -39,6 +39,20 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -39,6 +39,20 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
interfaceImplementations = provider.InternList(interfaceImplementations);
}
protected override void FreezeInternal()
{
base.FreezeInternal();
interfaceImplementations = FreezableHelper.FreezeList(interfaceImplementations);
}
public override object Clone()
{
var copy = (AbstractUnresolvedMember)base.Clone();
if (interfaceImplementations != null)
copy.interfaceImplementations = new List<IMemberReference>(interfaceImplementations);
return copy;
}
/*
[Serializable]
internal new class RareFields : AbstractUnresolvedEntity.RareFields
@ -56,6 +70,8 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -56,6 +70,8 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
interfaceImplementations = FreezableHelper.FreezeListAndElements(interfaceImplementations);
base.FreezeInternal();
}
override Clone(){}
}
internal override AbstractUnresolvedEntity.RareFields WriteRareFields()
@ -83,20 +99,16 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -83,20 +99,16 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
/*
public IList<IMemberReference> ExplicitInterfaceImplementations {
get {
/*
RareFields rareFields = (RareFields)this.rareFields;
if (rareFields == null || rareFields.interfaceImplementations == null) {
rareFields = (RareFields)WriteRareFields();
return rareFields.interfaceImplementations = new List<IMemberReference>();
}
return rareFields.interfaceImplementations;
}
}*/
public IList<IMemberReference> ExplicitInterfaceImplementations {
get {
*/
if (interfaceImplementations == null)
interfaceImplementations = new List<IMemberReference>();
return interfaceImplementations;

12
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs

@ -42,6 +42,18 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -42,6 +42,18 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
base.FreezeInternal();
}
public override object Clone()
{
var copy = (DefaultUnresolvedMethod)base.Clone();
if (returnTypeAttributes != null)
copy.returnTypeAttributes = new List<IUnresolvedAttribute>(returnTypeAttributes);
if (typeParameters != null)
copy.typeParameters = new List<IUnresolvedTypeParameter>(typeParameters);
if (parameters != null)
copy.parameters = new List<IUnresolvedParameter>(parameters);
return copy;
}
public override void ApplyInterningProvider(IInterningProvider provider)
{
base.ApplyInterningProvider(provider);

8
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedProperty.cs

@ -39,6 +39,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -39,6 +39,14 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
base.FreezeInternal();
}
public override object Clone()
{
var copy = (DefaultUnresolvedProperty)base.Clone();
if (parameters != null)
copy.parameters = new List<IUnresolvedParameter>(parameters);
return copy;
}
public override void ApplyInterningProvider(IInterningProvider provider)
{
base.ApplyInterningProvider(provider);

23
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs

@ -75,6 +75,29 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -75,6 +75,29 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
this.UnresolvedFile = declaringTypeDefinition.UnresolvedFile;
}
protected override void FreezeInternal()
{
base.FreezeInternal();
baseTypes = FreezableHelper.FreezeList(baseTypes);
typeParameters = FreezableHelper.FreezeListAndElements(typeParameters);
nestedTypes = FreezableHelper.FreezeListAndElements(nestedTypes);
members = FreezableHelper.FreezeListAndElements(members);
}
public override object Clone()
{
var copy = (DefaultUnresolvedTypeDefinition)base.Clone();
if (baseTypes != null)
copy.baseTypes = new List<ITypeReference>(baseTypes);
if (typeParameters != null)
copy.typeParameters = new List<IUnresolvedTypeParameter>(typeParameters);
if (nestedTypes != null)
copy.nestedTypes = new List<IUnresolvedTypeDefinition>(nestedTypes);
if (members != null)
copy.members = new List<IUnresolvedMember>(members);
return copy;
}
public TypeKind Kind {
get { return kind; }
set {

Loading…
Cancel
Save