From da6b371dd33c7ec06cf536c9c4e182457744d902 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 9 Mar 2018 00:19:03 +0100 Subject: [PATCH] Remove some dead code in the type system. --- .../CSharp/Resolver/CSharpOperators.cs | 8 - .../CSharp/Resolver/ReducedExtensionMethod.cs | 14 +- .../CSharp/TypeSystem/CSharpAttribute.cs | 166 ------------------ ...odTypeParameterWithInheritedConstraints.cs | 2 +- .../ICSharpCode.Decompiler.csproj | 1 - .../Semantics/LocalResolveResult.cs | 5 - .../Semantics/MemberResolveResult.cs | 5 - .../Semantics/ResolveResult.cs | 5 - .../Semantics/TypeResolveResult.cs | 9 - .../TypeSystem/AnonymousType.cs | 4 +- .../TypeSystem/IAttribute.cs | 13 +- ICSharpCode.Decompiler/TypeSystem/IEntity.cs | 26 --- ICSharpCode.Decompiler/TypeSystem/IField.cs | 5 - .../TypeSystem/IParameter.cs | 5 - .../TypeSystem/ITypeParameter.cs | 10 -- .../TypeSystem/IVariable.cs | 5 - .../Implementation/AbstractResolvedEntity.cs | 8 - .../AbstractResolvedTypeParameter.cs | 11 +- .../AbstractUnresolvedEntity.cs | 59 ------- .../Implementation/DefaultAttribute.cs | 25 +-- .../Implementation/DefaultParameter.cs | 16 +- .../Implementation/DefaultResolvedMethod.cs | 3 +- .../DefaultResolvedTypeDefinition.cs | 10 +- .../DefaultResolvedTypeParameter.cs | 6 +- .../DefaultUnresolvedAssembly.cs | 2 +- .../DefaultUnresolvedAttribute.cs | 16 +- .../Implementation/DefaultUnresolvedEvent.cs | 2 - .../Implementation/DefaultUnresolvedField.cs | 2 - .../Implementation/DefaultUnresolvedMethod.cs | 6 - .../DefaultUnresolvedParameter.cs | 17 +- .../DefaultUnresolvedProperty.cs | 2 - .../DefaultUnresolvedTypeDefinition.cs | 1 - .../DefaultUnresolvedTypeParameter.cs | 11 +- .../Implementation/DefaultVariable.cs | 16 +- .../Implementation/DummyTypeParameter.cs | 4 - .../Implementation/ResolvedAttributeBlob.cs | 14 +- .../Implementation/SpecializedMember.cs | 16 +- .../Implementation/SpecializedMethod.cs | 2 +- .../TypeSystem/TypeSystemExtensions.cs | 6 +- .../TypeSystem/VarArgInstanceMethod.cs | 8 - ICSharpCode.Decompiler/Util/ProjectedList.cs | 130 +------------- 41 files changed, 58 insertions(+), 618 deletions(-) delete mode 100644 ICSharpCode.Decompiler/CSharp/TypeSystem/CSharpAttribute.cs diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs index 7de1f70d6..7155f0b0b 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs @@ -152,14 +152,6 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver get { return SymbolKind.Operator; } } - DomRegion IEntity.Region { - get { return DomRegion.Empty; } - } - - DomRegion IEntity.BodyRegion { - get { return DomRegion.Empty; } - } - IReadOnlyList IEntity.Attributes { get { return EmptyList.Instance; } } diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs b/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs index 78438d86d..19b4c9e20 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs @@ -276,19 +276,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver return baseMethod.SymbolKind; } } - - public DomRegion Region { - get { - return baseMethod.Region; - } - } - - public DomRegion BodyRegion { - get { - return baseMethod.BodyRegion; - } - } - + public ITypeDefinition DeclaringTypeDefinition { get { return baseMethod.DeclaringTypeDefinition; diff --git a/ICSharpCode.Decompiler/CSharp/TypeSystem/CSharpAttribute.cs b/ICSharpCode.Decompiler/CSharp/TypeSystem/CSharpAttribute.cs deleted file mode 100644 index 004216e7d..000000000 --- a/ICSharpCode.Decompiler/CSharp/TypeSystem/CSharpAttribute.cs +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Linq; -using ICSharpCode.Decompiler.CSharp.Resolver; -using ICSharpCode.Decompiler.Semantics; -using ICSharpCode.Decompiler.TypeSystem; -using ICSharpCode.Decompiler.Util; - -namespace ICSharpCode.Decompiler.CSharp.TypeSystem -{ - [Serializable] - public sealed class CSharpAttribute : IUnresolvedAttribute - { - ITypeReference attributeType; - DomRegion region; - IList positionalArguments; - IList> namedCtorArguments; - IList> namedArguments; - - public CSharpAttribute(ITypeReference attributeType, DomRegion region, - IList positionalArguments, - IList> namedCtorArguments, - IList> namedArguments) - { - if (attributeType == null) - throw new ArgumentNullException("attributeType"); - this.attributeType = attributeType; - this.region = region; - this.positionalArguments = positionalArguments ?? EmptyList.Instance; - this.namedCtorArguments = namedCtorArguments ?? EmptyList>.Instance; - this.namedArguments = namedArguments ?? EmptyList>.Instance; - } - - public DomRegion Region { - get { return region; } - } - - public ITypeReference AttributeType { - get { return attributeType; } - } - - public IAttribute CreateResolvedAttribute(ITypeResolveContext context) - { - return new CSharpResolvedAttribute((CSharpTypeResolveContext)context, this); - } - - sealed class CSharpResolvedAttribute : IAttribute - { - readonly CSharpTypeResolveContext context; - readonly CSharpAttribute unresolved; - readonly IType attributeType; - - IList> namedArguments; - - public CSharpResolvedAttribute(CSharpTypeResolveContext context, CSharpAttribute unresolved) - { - this.context = context; - this.unresolved = unresolved; - // Pretty much any access to the attribute checks the type first, so - // we don't need to use lazy-loading for that. - this.attributeType = unresolved.AttributeType.Resolve(context); - } - - DomRegion IAttribute.Region { - get { return unresolved.Region; } - } - - IType IAttribute.AttributeType { - get { return attributeType; } - } - - ResolveResult ctorInvocation; - - InvocationResolveResult GetCtorInvocation() - { - ResolveResult rr = LazyInit.VolatileRead(ref this.ctorInvocation); - if (rr != null) { - return rr as InvocationResolveResult; - } else { - CSharpResolver resolver = new CSharpResolver(context); - int totalArgumentCount = unresolved.positionalArguments.Count + unresolved.namedCtorArguments.Count; - ResolveResult[] arguments = new ResolveResult[totalArgumentCount]; - string[] argumentNames = new string[totalArgumentCount]; - int i = 0; - while (i < unresolved.positionalArguments.Count) { - IConstantValue cv = unresolved.positionalArguments[i]; - arguments[i] = cv.Resolve(context); - i++; - } - foreach (var pair in unresolved.namedCtorArguments) { - argumentNames[i] = pair.Key; - arguments[i] = pair.Value.Resolve(context); - i++; - } - rr = resolver.ResolveObjectCreation(attributeType, arguments, argumentNames); - return LazyInit.GetOrSet(ref this.ctorInvocation, rr) as InvocationResolveResult; - } - } - - IMethod IAttribute.Constructor { - get { - var invocation = GetCtorInvocation(); - if (invocation != null) - return invocation.Member as IMethod; - else - return null; - } - } - - IList positionalArguments; - - IList IAttribute.PositionalArguments { - get { - var result = LazyInit.VolatileRead(ref this.positionalArguments); - if (result != null) { - return result; - } else { - var invocation = GetCtorInvocation(); - if (invocation != null) - result = invocation.GetArgumentsForCall(); - else - result = EmptyList.Instance; - return LazyInit.GetOrSet(ref this.positionalArguments, result); - } - } - } - - IList> IAttribute.NamedArguments { - get { - var namedArgs = LazyInit.VolatileRead(ref this.namedArguments); - if (namedArgs != null) { - return namedArgs; - } else { - namedArgs = new List>(); - foreach (var pair in unresolved.namedArguments) { - IMember member = attributeType.GetMembers(m => (m.SymbolKind == SymbolKind.Field || m.SymbolKind == SymbolKind.Property) && m.Name == pair.Key).FirstOrDefault(); - if (member != null) { - ResolveResult val = pair.Value.Resolve(context); - namedArgs.Add(new KeyValuePair(member, val)); - } - } - return LazyInit.GetOrSet(ref this.namedArguments, namedArgs); - } - } - } - } - } -} \ No newline at end of file diff --git a/ICSharpCode.Decompiler/CSharp/TypeSystem/MethodTypeParameterWithInheritedConstraints.cs b/ICSharpCode.Decompiler/CSharp/TypeSystem/MethodTypeParameterWithInheritedConstraints.cs index 46bb6d231..82106ca33 100644 --- a/ICSharpCode.Decompiler/CSharp/TypeSystem/MethodTypeParameterWithInheritedConstraints.cs +++ b/ICSharpCode.Decompiler/CSharp/TypeSystem/MethodTypeParameterWithInheritedConstraints.cs @@ -67,7 +67,7 @@ namespace ICSharpCode.Decompiler.CSharp.TypeSystem public ResolvedMethodTypeParameterWithInheritedConstraints(MethodTypeParameterWithInheritedConstraints unresolved, ITypeResolveContext context) : base(context.CurrentMember, unresolved.Index, unresolved.Name, unresolved.Variance, - unresolved.Attributes.CreateResolvedAttributes(context), unresolved.Region) + unresolved.Attributes.CreateResolvedAttributes(context)) { } diff --git a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj index 98c828ca9..2103b37df 100644 --- a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj +++ b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj @@ -235,7 +235,6 @@ - diff --git a/ICSharpCode.Decompiler/Semantics/LocalResolveResult.cs b/ICSharpCode.Decompiler/Semantics/LocalResolveResult.cs index 96958f541..2a5aa731c 100644 --- a/ICSharpCode.Decompiler/Semantics/LocalResolveResult.cs +++ b/ICSharpCode.Decompiler/Semantics/LocalResolveResult.cs @@ -68,10 +68,5 @@ namespace ICSharpCode.Decompiler.Semantics { return string.Format(CultureInfo.InvariantCulture, "[LocalResolveResult {0}]", variable); } - - public override DomRegion GetDefinitionRegion() - { - return variable.Region; - } } } diff --git a/ICSharpCode.Decompiler/Semantics/MemberResolveResult.cs b/ICSharpCode.Decompiler/Semantics/MemberResolveResult.cs index 5805b440e..7abf53057 100644 --- a/ICSharpCode.Decompiler/Semantics/MemberResolveResult.cs +++ b/ICSharpCode.Decompiler/Semantics/MemberResolveResult.cs @@ -139,10 +139,5 @@ namespace ICSharpCode.Decompiler.Semantics { return string.Format(CultureInfo.InvariantCulture, "[{0} {1}]", GetType().Name, member); } - - public override DomRegion GetDefinitionRegion() - { - return member.Region; - } } } diff --git a/ICSharpCode.Decompiler/Semantics/ResolveResult.cs b/ICSharpCode.Decompiler/Semantics/ResolveResult.cs index f45b5e40f..ed29737a9 100644 --- a/ICSharpCode.Decompiler/Semantics/ResolveResult.cs +++ b/ICSharpCode.Decompiler/Semantics/ResolveResult.cs @@ -65,11 +65,6 @@ namespace ICSharpCode.Decompiler.Semantics return Enumerable.Empty(); } - public virtual DomRegion GetDefinitionRegion() - { - return DomRegion.Empty; - } - public virtual ResolveResult ShallowClone() { return (ResolveResult)MemberwiseClone(); diff --git a/ICSharpCode.Decompiler/Semantics/TypeResolveResult.cs b/ICSharpCode.Decompiler/Semantics/TypeResolveResult.cs index a8049aa0d..8d54caa43 100644 --- a/ICSharpCode.Decompiler/Semantics/TypeResolveResult.cs +++ b/ICSharpCode.Decompiler/Semantics/TypeResolveResult.cs @@ -33,14 +33,5 @@ namespace ICSharpCode.Decompiler.Semantics public override bool IsError { get { return this.Type.Kind == TypeKind.Unknown; } } - - public override DomRegion GetDefinitionRegion() - { - ITypeDefinition def = this.Type.GetDefinition(); - if (def != null) - return def.Region; - else - return DomRegion.Empty; - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/AnonymousType.cs b/ICSharpCode.Decompiler/TypeSystem/AnonymousType.cs index 5450a5b19..a484d02ef 100644 --- a/ICSharpCode.Decompiler/TypeSystem/AnonymousType.cs +++ b/ICSharpCode.Decompiler/TypeSystem/AnonymousType.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.Decompiler.TypeSystem { ICompilation compilation; IUnresolvedProperty[] unresolvedProperties; - IList resolvedProperties; + IReadOnlyList resolvedProperties; public AnonymousType(ICompilation compilation, IList properties) { @@ -129,7 +129,7 @@ namespace ICSharpCode.Decompiler.TypeSystem get { return true; } } - public IList Properties { + public IReadOnlyList Properties { get { return resolvedProperties; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/IAttribute.cs b/ICSharpCode.Decompiler/TypeSystem/IAttribute.cs index bd2a258e6..6c9438663 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IAttribute.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IAttribute.cs @@ -44,11 +44,6 @@ namespace ICSharpCode.Decompiler.TypeSystem [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1711:IdentifiersShouldNotHaveIncorrectSuffix")] public interface IAttribute { - /// - /// Gets the code region of this attribute. - /// - DomRegion Region { get; } - /// /// Gets the type of the attribute. /// @@ -59,15 +54,15 @@ namespace ICSharpCode.Decompiler.TypeSystem /// This property may return null if no matching constructor was found. /// IMethod Constructor { get; } - + /// /// Gets the positional arguments. /// - IList PositionalArguments { get; } - + IReadOnlyList PositionalArguments { get; } + /// /// Gets the named arguments passed to the attribute. /// - IList> NamedArguments { get; } + IReadOnlyList> NamedArguments { get; } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/IEntity.cs b/ICSharpCode.Decompiler/TypeSystem/IEntity.cs index e191311e6..f55a5393b 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IEntity.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IEntity.cs @@ -31,16 +31,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// SymbolKind SymbolKind { get; } - /// - /// Gets the complete entity region (including header+body) - /// - DomRegion Region { get; } - - /// - /// Gets the entity body region. - /// - DomRegion BodyRegion { get; } - /// /// Gets the declaring class. /// For members, this is the class that contains the member. @@ -48,12 +38,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// IUnresolvedTypeDefinition DeclaringTypeDefinition { get; } - /// - /// Gets the parsed file in which this entity is defined. - /// Returns null if this entity wasn't parsed from source code (e.g. loaded from a .dll with CecilLoader). - /// - IUnresolvedFile UnresolvedFile { get; } - /// /// Gets the attributes on this entity. /// @@ -98,16 +82,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// new string Name { get; } - /// - /// Gets the complete entity region (including header+body) - /// - DomRegion Region { get; } - - /// - /// Gets the entity body region. - /// - DomRegion BodyRegion { get; } - /// /// Gets the declaring class. /// For members, this is the class that contains the member. diff --git a/ICSharpCode.Decompiler/TypeSystem/IField.cs b/ICSharpCode.Decompiler/TypeSystem/IField.cs index 0987d9c79..f590c8aa5 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IField.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IField.cs @@ -70,11 +70,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// new string Name { get; } // solve ambiguity between IMember.Name and IVariable.Name - /// - /// Gets the region where the field is declared. - /// - new DomRegion Region { get; } // solve ambiguity between IEntity.Region and IVariable.Region - /// /// Gets whether this field is readonly. /// diff --git a/ICSharpCode.Decompiler/TypeSystem/IParameter.cs b/ICSharpCode.Decompiler/TypeSystem/IParameter.cs index 937146011..f5fca79a3 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IParameter.cs @@ -27,11 +27,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// string Name { get; } - /// - /// Gets the declaration region of the variable. - /// - DomRegion Region { get; } - /// /// Gets the type of the variable. /// diff --git a/ICSharpCode.Decompiler/TypeSystem/ITypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/ITypeParameter.cs index 24a0ed32c..78cc617d7 100644 --- a/ICSharpCode.Decompiler/TypeSystem/ITypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/ITypeParameter.cs @@ -46,11 +46,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// VarianceModifier Variance { get; } - /// - /// Gets the region where the type parameter is defined. - /// - DomRegion Region { get; } - ITypeParameter CreateResolvedTypeParameter(ITypeResolveContext context); } @@ -96,11 +91,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// VarianceModifier Variance { get; } - /// - /// Gets the region where the type parameter is defined. - /// - DomRegion Region { get; } - /// /// Gets the effective base class of this type parameter. /// diff --git a/ICSharpCode.Decompiler/TypeSystem/IVariable.cs b/ICSharpCode.Decompiler/TypeSystem/IVariable.cs index a46e3b5f8..e3eab1b92 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IVariable.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IVariable.cs @@ -28,11 +28,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// new string Name { get; } - /// - /// Gets the declaration region of the variable. - /// - DomRegion Region { get; } - /// /// Gets the type of the variable. /// diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs index ce59b8eee..9431ef85c 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs @@ -44,14 +44,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return unresolved.SymbolKind; } } - public DomRegion Region { - get { return unresolved.Region; } - } - - public DomRegion BodyRegion { - get { return unresolved.BodyRegion; } - } - public ITypeDefinition DeclaringTypeDefinition { get { return parentContext.CurrentTypeDefinition; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs index b58eed3da..cb4c283e1 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs @@ -32,10 +32,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation readonly int index; readonly string name; readonly IReadOnlyList attributes; - readonly DomRegion region; readonly VarianceModifier variance; - protected AbstractTypeParameter(IEntity owner, int index, string name, VarianceModifier variance, IReadOnlyList attributes, DomRegion region) + protected AbstractTypeParameter(IEntity owner, int index, string name, VarianceModifier variance, IReadOnlyList attributes) { if (owner == null) throw new ArgumentNullException("owner"); @@ -45,11 +44,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.index = index; this.name = name ?? ((this.OwnerType == SymbolKind.Method ? "!!" : "!") + index.ToString(CultureInfo.InvariantCulture)); this.attributes = attributes ?? EmptyList.Instance; - this.region = region; this.variance = variance; } - protected AbstractTypeParameter(ICompilation compilation, SymbolKind ownerType, int index, string name, VarianceModifier variance, IReadOnlyList attributes, DomRegion region) + protected AbstractTypeParameter(ICompilation compilation, SymbolKind ownerType, int index, string name, VarianceModifier variance, IReadOnlyList attributes) { if (compilation == null) throw new ArgumentNullException("compilation"); @@ -58,7 +56,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.index = index; this.name = name ?? ((this.OwnerType == SymbolKind.Method ? "!!" : "!") + index.ToString(CultureInfo.InvariantCulture)); this.attributes = attributes ?? EmptyList.Instance; - this.region = region; this.variance = variance; } @@ -86,10 +83,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return variance; } } - public DomRegion Region { - get { return region; } - } - public ICompilation Compilation { get { return compilation; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs index 4b4186be8..a142f27a5 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs @@ -36,7 +36,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation string name = string.Empty; IList attributes; - internal RareFields rareFields; // 1 byte per enum + 2 bytes for flags SymbolKind symbolKind; @@ -84,8 +83,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation protected virtual void FreezeInternal() { attributes = FreezableHelper.FreezeListAndElements(attributes); - if (rareFields != null) - rareFields.FreezeInternal(); } /// @@ -101,8 +98,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation ThrowIfFrozen(); name = provider.Intern(name); attributes = provider.InternList(attributes); - if (rareFields != null) - rareFields.ApplyInterningProvider(provider); } /// @@ -117,32 +112,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation copy.flags[FlagFrozen] = false; if (attributes != null) copy.attributes = new List(attributes); - if (rareFields != null) - copy.rareFields = (RareFields)rareFields.Clone(); return copy; } - [Serializable] - internal class RareFields - { - internal DomRegion region; - internal DomRegion bodyRegion; - internal IUnresolvedFile unresolvedFile; - - protected internal virtual void FreezeInternal() - { - } - - public virtual void ApplyInterningProvider(InterningProvider provider) - { - } - - public virtual object Clone() - { - return MemberwiseClone(); - } - } - protected void ThrowIfFrozen() { FreezableHelper.ThrowIfFrozen(this); @@ -156,37 +128,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - internal virtual RareFields WriteRareFields() - { - ThrowIfFrozen(); - if (rareFields == null) rareFields = new RareFields(); - return rareFields; - } - - public DomRegion Region { - get { return rareFields != null ? rareFields.region : DomRegion.Empty; } - set { - if (value != DomRegion.Empty || rareFields != null) - WriteRareFields().region = value; - } - } - - public DomRegion BodyRegion { - get { return rareFields != null ? rareFields.bodyRegion : DomRegion.Empty; } - set { - if (value != DomRegion.Empty || rareFields != null) - WriteRareFields().bodyRegion = value; - } - } - - public IUnresolvedFile UnresolvedFile { - get { return rareFields != null ? rareFields.unresolvedFile : null; } - set { - if (value != null || rareFields != null) - WriteRareFields().unresolvedFile = value; - } - } - public IUnresolvedTypeDefinition DeclaringTypeDefinition { get { return declaringTypeDefinition; } set { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultAttribute.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultAttribute.cs index 08ad1b9b6..b34c9af73 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultAttribute.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultAttribute.cs @@ -30,26 +30,22 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public class DefaultAttribute : IAttribute { readonly IType attributeType; - readonly IList positionalArguments; - readonly IList> namedArguments; - readonly DomRegion region; + readonly IReadOnlyList positionalArguments; + readonly IReadOnlyList> namedArguments; volatile IMethod constructor; - public DefaultAttribute(IType attributeType, IList positionalArguments = null, - IList> namedArguments = null, - DomRegion region = default(DomRegion)) + public DefaultAttribute(IType attributeType, IReadOnlyList positionalArguments = null, + IReadOnlyList> namedArguments = null) { if (attributeType == null) throw new ArgumentNullException("attributeType"); this.attributeType = attributeType; this.positionalArguments = positionalArguments ?? EmptyList.Instance; this.namedArguments = namedArguments ?? EmptyList>.Instance; - this.region = region; } - public DefaultAttribute(IMethod constructor, IList positionalArguments = null, - IList> namedArguments = null, - DomRegion region = default(DomRegion)) + public DefaultAttribute(IMethod constructor, IReadOnlyList positionalArguments = null, + IReadOnlyList> namedArguments = null) { if (constructor == null) throw new ArgumentNullException("constructor"); @@ -57,7 +53,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.attributeType = constructor.DeclaringType ?? SpecialType.UnknownType; this.positionalArguments = positionalArguments ?? EmptyList.Instance; this.namedArguments = namedArguments ?? EmptyList>.Instance; - this.region = region; if (this.positionalArguments.Count != constructor.Parameters.Count) { throw new ArgumentException("Positional argument count must match the constructor's parameter count"); } @@ -67,10 +62,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return attributeType; } } - public DomRegion Region { - get { return region; } - } - public IMethod Constructor { get { IMethod ctor = this.constructor; @@ -87,11 +78,11 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - public IList PositionalArguments { + public IReadOnlyList PositionalArguments { get { return positionalArguments; } } - public IList> NamedArguments { + public IReadOnlyList> NamedArguments { get { return namedArguments; } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs index bcff35df9..1ef38d722 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs @@ -30,7 +30,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { readonly IType type; readonly string name; - readonly DomRegion region; readonly IReadOnlyList attributes; readonly bool isRef, isOut, isParams, isOptional; readonly object defaultValue; @@ -46,7 +45,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.name = name; } - public DefaultParameter(IType type, string name, IParameterizedMember owner = null, DomRegion region = default(DomRegion), IReadOnlyList attributes = null, + public DefaultParameter(IType type, string name, IParameterizedMember owner = null, IReadOnlyList attributes = null, bool isRef = false, bool isOut = false, bool isParams = false, bool isOptional = false, object defaultValue = null) { if (type == null) @@ -56,7 +55,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.type = type; this.name = name; this.owner = owner; - this.region = region; this.attributes = attributes; this.isRef = isRef; this.isOut = isOut; @@ -97,10 +95,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return name; } } - public DomRegion Region { - get { return region; } - } - public IType Type { get { return type; } } @@ -143,7 +137,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public ISymbolReference ToReference() { if (owner == null) - return new ParameterReference(type.ToTypeReference(), name, region, isRef, isOut, isParams, isOptional, defaultValue); + return new ParameterReference(type.ToTypeReference(), name, isRef, isOut, isParams, isOptional, defaultValue); return new OwnedParameterReference(owner.ToReference(), owner.Parameters.IndexOf(this)); } } @@ -175,11 +169,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { readonly ITypeReference type; readonly string name; - readonly DomRegion region; readonly bool isRef, isOut, isParams, isOptional; readonly object defaultValue; - public ParameterReference(ITypeReference type, string name, DomRegion region, bool isRef, bool isOut, bool isParams, bool isOptional, object defaultValue) + public ParameterReference(ITypeReference type, string name, bool isRef, bool isOut, bool isParams, bool isOptional, object defaultValue) { if (type == null) throw new ArgumentNullException("type"); @@ -187,7 +180,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation throw new ArgumentNullException("name"); this.type = type; this.name = name; - this.region = region; this.isRef = isRef; this.isOut = isOut; this.isParams = isParams; @@ -197,7 +189,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public ISymbol Resolve(ITypeResolveContext context) { - return new DefaultParameter(type.Resolve(context), name, region: region, isRef: isRef, isOut: isOut, isParams: isParams, isOptional: isOptional, defaultValue: defaultValue); + return new DefaultParameter(type.Resolve(context), name, isRef: isRef, isOut: isOut, isParams: isParams, isOptional: isOptional, defaultValue: defaultValue); } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs index 6ee360072..40e6764fe 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs @@ -174,8 +174,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public IReadOnlyList TypeArguments { get { - // ToList() call is necessary because IList<> isn't covariant - return TypeParameters.ToList(); + return TypeParameters; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs index f86bf1ff5..d6194370f 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs @@ -78,7 +78,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation else typeParameters[i] = unresolvedTP.CreateResolvedTypeParameter(contextForTypeParameters); } - result = Array.AsReadOnly(typeParameters); + result = typeParameters; } return LazyInit.GetOrSet(ref this.typeParameters, result); } @@ -550,14 +550,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return parts[0].FullTypeName; } } - public DomRegion Region { - get { return parts[0].Region; } - } - - public DomRegion BodyRegion { - get { return parts[0].BodyRegion; } - } - public ITypeDefinition DeclaringTypeDefinition { get { return parentContext.CurrentTypeDefinition; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeParameter.cs index 5a09f4886..0d4e1dd96 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeParameter.cs @@ -33,10 +33,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation int index, string name = null, VarianceModifier variance = VarianceModifier.Invariant, IReadOnlyList attributes = null, - DomRegion region = default(DomRegion), bool hasValueTypeConstraint = false, bool hasReferenceTypeConstraint = false, bool hasDefaultConstructorConstraint = false, IReadOnlyList constraints = null) - : base(owner, index, name, variance, attributes, region) + : base(owner, index, name, variance, attributes) { this.hasValueTypeConstraint = hasValueTypeConstraint; this.hasReferenceTypeConstraint = hasReferenceTypeConstraint; @@ -49,10 +48,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation int index, string name = null, VarianceModifier variance = VarianceModifier.Invariant, IReadOnlyList attributes = null, - DomRegion region = default(DomRegion), bool hasValueTypeConstraint = false, bool hasReferenceTypeConstraint = false, bool hasDefaultConstructorConstraint = false, IReadOnlyList constraints = null) - : base(compilation, ownerType, index, name, variance, attributes, region) + : base(compilation, ownerType, index, name, variance, attributes) { this.hasValueTypeConstraint = hasValueTypeConstraint; this.hasReferenceTypeConstraint = hasReferenceTypeConstraint; diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs index bf971c324..1515b8981 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs @@ -427,7 +427,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation readonly DefaultResolvedAssembly assembly; readonly UnresolvedNamespace ns; readonly INamespace parentNamespace; - readonly IList childNamespaces; + readonly IReadOnlyList childNamespaces; IEnumerable types; public NS(DefaultResolvedAssembly assembly, UnresolvedNamespace ns, INamespace parentNamespace) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAttribute.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAttribute.cs index 024197767..36771f595 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAttribute.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAttribute.cs @@ -192,10 +192,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation readonly DefaultUnresolvedAttribute unresolved; readonly ITypeResolveContext context; readonly IType attributeType; - readonly IList positionalArguments; - + readonly IReadOnlyList positionalArguments; + // cannot use ProjectedList because KeyValuePair is value type - IList> namedArguments; + IReadOnlyList> namedArguments; IMethod constructor; volatile bool constructorResolved; @@ -244,25 +244,25 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return null; } - public IList PositionalArguments { + public IReadOnlyList PositionalArguments { get { return positionalArguments; } } - public IList> NamedArguments { + public IReadOnlyList> NamedArguments { get { var namedArgs = LazyInit.VolatileRead(ref this.namedArguments); if (namedArgs != null) { return namedArgs; } else { - namedArgs = new List>(); + var newNamedArgs = new List>(); foreach (var pair in unresolved.NamedArguments) { IMember member = pair.Key.Resolve(context); if (member != null) { ResolveResult val = pair.Value.Resolve(context); - namedArgs.Add(new KeyValuePair(member, val)); + newNamedArgs.Add(new KeyValuePair(member, val)); } } - return LazyInit.GetOrSet(ref this.namedArguments, namedArgs); + return LazyInit.GetOrSet(ref this.namedArguments, newNamedArgs); } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedEvent.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedEvent.cs index b16e3c707..e55a978ed 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedEvent.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedEvent.cs @@ -46,8 +46,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.SymbolKind = SymbolKind.Event; this.DeclaringTypeDefinition = declaringType; this.Name = name; - if (declaringType != null) - this.UnresolvedFile = declaringType.UnresolvedFile; } public bool CanAdd { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedField.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedField.cs index e70829110..3aa096a7b 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedField.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedField.cs @@ -44,8 +44,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.SymbolKind = SymbolKind.Field; this.DeclaringTypeDefinition = declaringType; this.Name = name; - if (declaringType != null) - this.UnresolvedFile = declaringType.UnresolvedFile; } public bool IsConst { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedMethod.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedMethod.cs index 8b8522aa3..142e72470 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedMethod.cs @@ -74,8 +74,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.SymbolKind = SymbolKind.Method; this.DeclaringTypeDefinition = declaringType; this.Name = name; - if (declaringType != null) - this.UnresolvedFile = declaringType.UnresolvedFile; } public IList ReturnTypeAttributes { @@ -220,15 +218,11 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { if (typeDefinition == null) throw new ArgumentNullException("typeDefinition"); - DomRegion region = typeDefinition.Region; - region = new DomRegion(region.FileName, region.BeginLine, region.BeginColumn); // remove endline/endcolumn return new DefaultUnresolvedMethod(typeDefinition, ".ctor") { SymbolKind = SymbolKind.Constructor, Accessibility = typeDefinition.IsAbstract ? Accessibility.Protected : Accessibility.Public, IsSynthetic = true, HasBody = true, - Region = region, - BodyRegion = region, ReturnType = KnownTypeReference.Void }; } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs index 05db0cad6..ad8b8bb9c 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs @@ -35,7 +35,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation ITypeReference type = SpecialType.UnknownType; IList attributes; IConstantValue defaultValue; - DomRegion region; byte flags; public DefaultUnresolvedParameter() @@ -94,14 +93,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - public DomRegion Region { - get { return region; } - set { - FreezableHelper.ThrowIfFrozen(this); - region = value; - } - } - bool HasFlag(byte flag) { return (this.flags & flag) != 0; @@ -169,7 +160,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation // compare everything except for the IsFrozen flag DefaultUnresolvedParameter p = other as DefaultUnresolvedParameter; return p != null && type == p.type && name == p.name && - defaultValue == p.defaultValue && region == p.region && (flags & ~1) == (p.flags & ~1) && ListEquals(attributes, p.attributes); + defaultValue == p.defaultValue && (flags & ~1) == (p.flags & ~1) && ListEquals(attributes, p.attributes); } static bool ListEquals(IList list1, IList list2) @@ -208,7 +199,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return new ResolvedParameterWithDefaultValue(defaultValue, context) { Type = type.Resolve(context), Name = name, - Region = region, Attributes = attributes.CreateResolvedAttributes(context), IsRef = this.IsRef, IsOut = this.IsOut, @@ -218,7 +208,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation var owner = context.CurrentMember as IParameterizedMember; var resolvedAttributes = attributes.CreateResolvedAttributes (context); bool isOptional = resolvedAttributes != null && resolvedAttributes.Any (a => IsOptionalAttribute (a.AttributeType)); - return new DefaultParameter (type.Resolve (context), name, owner, region, + return new DefaultParameter (type.Resolve (context), name, owner, resolvedAttributes, IsRef, IsOut, IsParams, isOptional); } } @@ -238,7 +228,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public IParameterizedMember Owner { get { return context.CurrentMember as IParameterizedMember; } } public IType Type { get; internal set; } public string Name { get; internal set; } - public DomRegion Region { get; internal set; } public IReadOnlyList Attributes { get; internal set; } public bool IsRef { get; internal set; } public bool IsOut { get; internal set; } @@ -267,7 +256,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public ISymbolReference ToReference() { if (Owner == null) - return new ParameterReference(Type.ToTypeReference(), Name, Region, IsRef, IsOut, IsParams, true, ConstantValue); + return new ParameterReference(Type.ToTypeReference(), Name, IsRef, IsOut, IsParams, true, ConstantValue); return new OwnedParameterReference(Owner.ToReference(), Owner.Parameters.IndexOf(this)); } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedProperty.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedProperty.cs index ee39954a2..6edba4d10 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedProperty.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedProperty.cs @@ -63,8 +63,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.SymbolKind = SymbolKind.Property; this.DeclaringTypeDefinition = declaringType; this.Name = name; - if (declaringType != null) - this.UnresolvedFile = declaringType.UnresolvedFile; } public bool IsIndexer { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs index aae9c4127..cd980478f 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeDefinition.cs @@ -71,7 +71,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.DeclaringTypeDefinition = declaringTypeDefinition; this.namespaceName = declaringTypeDefinition.Namespace; this.Name = name; - this.UnresolvedFile = declaringTypeDefinition.UnresolvedFile; } protected override void FreezeInternal() diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeParameter.cs index 047f80f50..f636ff68a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedTypeParameter.cs @@ -33,7 +33,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation IList attributes; IList constraints; string name; - DomRegion region; SymbolKind ownerType; VarianceModifier variance; @@ -125,14 +124,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - public DomRegion Region { - get { return region; } - set { - FreezableHelper.ThrowIfFrozen(this); - region = value; - } - } - public bool HasDefaultConstructorConstraint { get { return flags[FlagDefaultConstructorConstraint]; } set { @@ -185,7 +176,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation throw new InvalidOperationException("Could not determine the type parameter's owner."); return new DefaultTypeParameter( owner, index, name, variance, - this.Attributes.CreateResolvedAttributes(context), this.Region, + this.Attributes.CreateResolvedAttributes(context), this.HasValueTypeConstraint, this.HasReferenceTypeConstraint, this.HasDefaultConstructorConstraint, this.Constraints.Resolve(context) ); } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs index 0f1350519..01399bbe6 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs @@ -26,7 +26,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public sealed class DefaultVariable : IVariable { readonly string name; - readonly DomRegion region; readonly IType type; readonly object constantValue; readonly bool isConst; @@ -41,11 +40,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.name = name; } - public DefaultVariable(IType type, string name, DomRegion region = default(DomRegion), + public DefaultVariable(IType type, string name, bool isConst = false, object constantValue = null) : this(type, name) { - this.region = region; this.isConst = isConst; this.constantValue = constantValue; } @@ -54,10 +52,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return name; } } - public DomRegion Region { - get { return region; } - } - public IType Type { get { return type; } } @@ -76,7 +70,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public ISymbolReference ToReference() { - return new VariableReference(type.ToTypeReference(), name, region, isConst, constantValue); + return new VariableReference(type.ToTypeReference(), name, isConst, constantValue); } } @@ -84,11 +78,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { ITypeReference variableTypeReference; string name; - DomRegion region; bool isConst; object constantValue; - public VariableReference(ITypeReference variableTypeReference, string name, DomRegion region, bool isConst, object constantValue) + public VariableReference(ITypeReference variableTypeReference, string name, bool isConst, object constantValue) { if (variableTypeReference == null) throw new ArgumentNullException("variableTypeReference"); @@ -96,14 +89,13 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation throw new ArgumentNullException("name"); this.variableTypeReference = variableTypeReference; this.name = name; - this.region = region; this.isConst = isConst; this.constantValue = constantValue; } public ISymbol Resolve(ITypeResolveContext context) { - return new DefaultVariable(variableTypeReference.Resolve(context), name, region, isConst, constantValue); + return new DefaultVariable(variableTypeReference.Resolve(context), name, isConst, constantValue); } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs index bc5667945..114f03dcc 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs @@ -181,10 +181,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return VarianceModifier.Invariant; } } - DomRegion ITypeParameter.Region { - get { return DomRegion.Empty; } - } - IEntity ITypeParameter.Owner { get { return null; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/ResolvedAttributeBlob.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/ResolvedAttributeBlob.cs index 36a2f6530..03914dac6 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/ResolvedAttributeBlob.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/ResolvedAttributeBlob.cs @@ -42,9 +42,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation IMethod constructor; volatile bool constructorResolved; - - IList positionalArguments; - IList> namedArguments; + + IReadOnlyList positionalArguments; + IReadOnlyList> namedArguments; public CecilResolvedAttribute(ITypeResolveContext context, UnresolvedAttributeBlob unresolved) { @@ -61,10 +61,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.ctorParameterTypes = EmptyList.Instance; } - DomRegion IAttribute.Region { - get { return DomRegion.Empty; } - } - public IType AttributeType { get { return attributeType; } } @@ -96,7 +92,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return null; } - public IList PositionalArguments { + public IReadOnlyList PositionalArguments { get { var result = LazyInit.VolatileRead(ref this.positionalArguments); if (result != null) { @@ -107,7 +103,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - public IList> NamedArguments { + public IReadOnlyList> NamedArguments { get { var result = LazyInit.VolatileRead(ref this.namedArguments); if (result != null) { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs index c1bf2ea0a..76d410fb1 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs @@ -170,14 +170,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return baseMember.SymbolKind; } } - public DomRegion Region { - get { return baseMember.Region; } - } - - public DomRegion BodyRegion { - get { return baseMember.BodyRegion; } - } - public ITypeDefinition DeclaringTypeDefinition { get { return baseMember.DeclaringTypeDefinition; } } @@ -342,11 +334,11 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - protected IReadOnlyList CreateParameters(TypeVisitor substitution) + protected IParameter[] CreateParameters(TypeVisitor substitution) { var paramDefs = ((IParameterizedMember)this.baseMember).Parameters; if (paramDefs.Count == 0) { - return EmptyList.Instance; + return Empty.Array; } else { var parameters = new IParameter[paramDefs.Count]; for (int i = 0; i < parameters.Length; i++) { @@ -354,11 +346,11 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation IType newType = p.Type.AcceptVisitor(substitution); parameters[i] = new DefaultParameter( newType, p.Name, this, - p.Region, p.Attributes, p.IsRef, p.IsOut, + p.Attributes, p.IsRef, p.IsOut, p.IsParams, p.IsOptional, p.ConstantValue ); } - return Array.AsReadOnly(parameters); + return parameters; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs index 6034d2bb8..7e883cfab 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs @@ -234,7 +234,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation internal TypeVisitor substitution; public SpecializedTypeParameter(ITypeParameter baseTp, IMethod specializedOwner) - : base(specializedOwner, baseTp.Index, baseTp.Name, baseTp.Variance, baseTp.Attributes, baseTp.Region) + : base(specializedOwner, baseTp.Index, baseTp.Name, baseTp.Variance, baseTp.Attributes) { // We don't have to consider already-specialized baseTps because // we read the baseTp directly from the unpacked memberDefinition. diff --git a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs index 5cdce3698..905c90729 100644 --- a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs +++ b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs @@ -224,7 +224,7 @@ namespace ICSharpCode.Decompiler.TypeSystem IVariable v = (IVariable)symbol; return new DefaultVariable( Import(compilation, v.Type), - v.Name, v.Region, v.IsConst, v.ConstantValue + v.Name, v.IsConst, v.ConstantValue ); case SymbolKind.Parameter: IParameter p = (IParameter)symbol; @@ -237,7 +237,7 @@ namespace ICSharpCode.Decompiler.TypeSystem } else { return new DefaultParameter( Import(compilation, p.Type), - p.Name, null, p.Region, + p.Name, null, null, p.IsRef, p.IsOut, p.IsParams ); } @@ -498,7 +498,7 @@ namespace ICSharpCode.Decompiler.TypeSystem // There is intentionally no Resolve() overload for IList: the resulting IList would // contains nulls when there are resolve errors. - public static IList Resolve(this IList constantValues, ITypeResolveContext context) + public static IReadOnlyList Resolve(this IList constantValues, ITypeResolveContext context) { if (constantValues == null) throw new ArgumentNullException("constantValues"); diff --git a/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs b/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs index 5170042bd..384f077cc 100644 --- a/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs @@ -229,14 +229,6 @@ namespace ICSharpCode.Decompiler.TypeSystem #region IEntity implementation - public DomRegion Region { - get { return baseMethod.Region; } - } - - public DomRegion BodyRegion { - get { return baseMethod.BodyRegion; } - } - public ITypeDefinition DeclaringTypeDefinition { get { return baseMethod.DeclaringTypeDefinition; } } diff --git a/ICSharpCode.Decompiler/Util/ProjectedList.cs b/ICSharpCode.Decompiler/Util/ProjectedList.cs index 114855895..2291488f1 100644 --- a/ICSharpCode.Decompiler/Util/ProjectedList.cs +++ b/ICSharpCode.Decompiler/Util/ProjectedList.cs @@ -21,7 +21,7 @@ using System.Collections.Generic; namespace ICSharpCode.Decompiler.Util { - public sealed class ProjectedList : IList, IReadOnlyList where TOutput : class + public sealed class ProjectedList : IReadOnlyList where TOutput : class { readonly IList input; readonly Func projection; @@ -48,73 +48,10 @@ namespace ICSharpCode.Decompiler.Util } } - TOutput IList.this[int index] { - get { return this[index]; } - set { - throw new NotSupportedException(); - } - } - public int Count { get { return items.Length; } } - bool ICollection.IsReadOnly { - get { return true; } - } - - int IList.IndexOf(TOutput item) - { - var comparer = EqualityComparer.Default; - for (int i = 0; i < this.Count; i++) { - if (comparer.Equals(this[i], item)) - return i; - } - return -1; - } - - void IList.Insert(int index, TOutput item) - { - throw new NotSupportedException(); - } - - void IList.RemoveAt(int index) - { - throw new NotSupportedException(); - } - - void ICollection.Add(TOutput item) - { - throw new NotSupportedException(); - } - - void ICollection.Clear() - { - throw new NotSupportedException(); - } - - bool ICollection.Contains(TOutput item) - { - var comparer = EqualityComparer.Default; - for (int i = 0; i < this.Count; i++) { - if (comparer.Equals(this[i], item)) - return true; - } - return false; - } - - void ICollection.CopyTo(TOutput[] array, int arrayIndex) - { - for (int i = 0; i < items.Length; i++) { - array[arrayIndex + i] = this[i]; - } - } - - bool ICollection.Remove(TOutput item) - { - throw new NotSupportedException(); - } - public IEnumerator GetEnumerator() { for (int i = 0; i < this.Count; i++) { @@ -128,7 +65,7 @@ namespace ICSharpCode.Decompiler.Util } } - public sealed class ProjectedList : IList, IReadOnlyList where TOutput : class + public sealed class ProjectedList : IReadOnlyList where TOutput : class { readonly IList input; readonly TContext context; @@ -157,73 +94,10 @@ namespace ICSharpCode.Decompiler.Util } } - TOutput IList.this[int index] { - get { return this[index]; } - set { - throw new NotSupportedException(); - } - } - public int Count { get { return items.Length; } } - bool ICollection.IsReadOnly { - get { return true; } - } - - int IList.IndexOf(TOutput item) - { - var comparer = EqualityComparer.Default; - for (int i = 0; i < this.Count; i++) { - if (comparer.Equals(this[i], item)) - return i; - } - return -1; - } - - void IList.Insert(int index, TOutput item) - { - throw new NotSupportedException(); - } - - void IList.RemoveAt(int index) - { - throw new NotSupportedException(); - } - - void ICollection.Add(TOutput item) - { - throw new NotSupportedException(); - } - - void ICollection.Clear() - { - throw new NotSupportedException(); - } - - bool ICollection.Contains(TOutput item) - { - var comparer = EqualityComparer.Default; - for (int i = 0; i < this.Count; i++) { - if (comparer.Equals(this[i], item)) - return true; - } - return false; - } - - void ICollection.CopyTo(TOutput[] array, int arrayIndex) - { - for (int i = 0; i < items.Length; i++) { - array[arrayIndex + i] = this[i]; - } - } - - bool ICollection.Remove(TOutput item) - { - throw new NotSupportedException(); - } - public IEnumerator GetEnumerator() { for (int i = 0; i < this.Count; i++) {