diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs index b9ae10a9b..304713e9b 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs @@ -214,16 +214,6 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver get { return compilation.MainAssembly; } } - ISymbolReference ISymbol.ToReference() - { - throw new NotSupportedException(); - } - - IMemberReference IMember.ToReference() - { - throw new NotSupportedException(); - } - TypeParameterSubstitution IMember.Substitution { get { return TypeParameterSubstitution.Identity; diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs b/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs index c5630a782..2c4dc4241 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs @@ -66,44 +66,6 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver } #region IMember implementation - - [Serializable] - public sealed class ReducedExtensionMethodMemberReference : IMemberReference - { - readonly IMethod baseMethod; - - public ReducedExtensionMethodMemberReference (IMethod baseMethod) - { - this.baseMethod = baseMethod; - } - - public IMember Resolve(ITypeResolveContext context) - { - return new ReducedExtensionMethod ((IMethod)baseMethod.ToReference ().Resolve (context)); - } - - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return Resolve(context); - } - - public ITypeReference DeclaringTypeReference { - get { - return baseMethod.ToReference ().DeclaringTypeReference; - } - } - } - - public IMemberReference ToReference() - { - return new ReducedExtensionMethodMemberReference (baseMethod); - } - - ISymbolReference ISymbol.ToReference() - { - return ToReference(); - } - public IMember MemberDefinition { get { return baseMethod.MemberDefinition; diff --git a/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs b/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs index 707972dfa..0d70e8cc6 100644 --- a/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs +++ b/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs @@ -201,11 +201,6 @@ namespace ICSharpCode.Decompiler.CSharp.TypeSystem { return null; } - - public ISymbolReference ToReference() - { - return new MergedNamespaceReference(ExternAlias, ((INamespace)this).FullName); - } } } } diff --git a/ICSharpCode.Decompiler/Documentation/IdStringMemberReference.cs b/ICSharpCode.Decompiler/Documentation/IdStringMemberReference.cs index 4ca902a8f..b1eb9c6c0 100644 --- a/ICSharpCode.Decompiler/Documentation/IdStringMemberReference.cs +++ b/ICSharpCode.Decompiler/Documentation/IdStringMemberReference.cs @@ -68,10 +68,5 @@ namespace ICSharpCode.Decompiler.Documentation } return null; } - - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return Resolve(context); - } } } diff --git a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj index 995c102b8..1066e146e 100644 --- a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj +++ b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj @@ -489,7 +489,6 @@ - @@ -505,7 +504,6 @@ - @@ -534,7 +532,6 @@ - diff --git a/ICSharpCode.Decompiler/TypeSystem/IField.cs b/ICSharpCode.Decompiler/TypeSystem/IField.cs index f590c8aa5..f54219a3a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IField.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IField.cs @@ -85,7 +85,5 @@ namespace ICSharpCode.Decompiler.TypeSystem /// If this is true, then ConstantValue contains the size of the buffer. /// bool IsFixed { get; } - - new IMemberReference ToReference(); // solve ambiguity between IMember.ToReference() and IVariable.ToReference() } } diff --git a/ICSharpCode.Decompiler/TypeSystem/IMember.cs b/ICSharpCode.Decompiler/TypeSystem/IMember.cs index 16f06e2f7..ad1e46e51 100644 --- a/ICSharpCode.Decompiler/TypeSystem/IMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/IMember.cs @@ -81,7 +81,7 @@ namespace ICSharpCode.Decompiler.TypeSystem IMember CreateResolved(ITypeResolveContext context); } - public interface IMemberReference : ISymbolReference + public interface IMemberReference { /// /// Gets the declaring type reference for the member. @@ -100,7 +100,7 @@ namespace ICSharpCode.Decompiler.TypeSystem /// /// Returns the resolved member, or null if the member could not be found. /// - new IMember Resolve(ITypeResolveContext context); + IMember Resolve(ITypeResolveContext context); } /// @@ -159,15 +159,6 @@ namespace ICSharpCode.Decompiler.TypeSystem /// bool IsOverridable { get; } - /// - /// Creates a member reference that can be used to rediscover this member in another compilation. - /// - /// - /// If this member is specialized using open generic types, the resulting member reference will need to be looked up in an appropriate generic context. - /// Otherwise, the main resolve context of a compilation is sufficient. - /// - new IMemberReference ToReference(); - /// /// Gets the substitution belonging to this specialized member. /// Returns TypeParameterSubstitution.Identity for not specialized members. diff --git a/ICSharpCode.Decompiler/TypeSystem/ISymbol.cs b/ICSharpCode.Decompiler/TypeSystem/ISymbol.cs index 12a765b85..e13851394 100644 --- a/ICSharpCode.Decompiler/TypeSystem/ISymbol.cs +++ b/ICSharpCode.Decompiler/TypeSystem/ISymbol.cs @@ -84,15 +84,5 @@ namespace ICSharpCode.Decompiler.TypeSystem /// Gets the short name of the symbol. /// string Name { get; } - - /// - /// Creates a symbol reference that can be used to rediscover this symbol in another compilation. - /// - ISymbolReference ToReference(); - } - - public interface ISymbolReference - { - ISymbol Resolve(ITypeResolveContext context); } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs index 4a89b2cd6..0a19f0164 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs @@ -60,8 +60,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public IReadOnlyList Attributes { get; protected set; } - public abstract ISymbolReference ToReference(); - public bool IsStatic { get { return unresolved.IsStatic; } } public bool IsAbstract { get { return unresolved.IsAbstract; } } public bool IsSealed { get { return unresolved.IsSealed; } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedMember.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedMember.cs index 73d38c0b3..d930a6ec9 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedMember.cs @@ -113,22 +113,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public abstract IMember Specialize(TypeParameterSubstitution substitution); - IMemberReference IMember.ToReference() - { - return (IMemberReference)ToReference(); - } - - public override ISymbolReference ToReference() - { - var declType = this.DeclaringType; - var declTypeRef = declType != null ? declType.ToTypeReference() : SpecialType.UnknownType; - if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) { - return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference()); - } else { - return new DefaultMemberReference(this.SymbolKind, declTypeRef, this.Name); - } - } - internal IMethod GetAccessor(ref IMethod accessorField, IUnresolvedMethod unresolvedAccessor) { if (unresolvedAccessor == null) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs index 63db9706c..dcf47f9ea 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedTypeParameter.cs @@ -364,41 +364,10 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { return this == other; // use reference equality for type parameters } - - public virtual ISymbolReference ToReference() - { - if (owner == null) - return TypeParameterReference.Create(ownerType, index); - return new OwnedTypeParameterReference(owner.ToReference(), index); - } public override string ToString() { return this.ReflectionName + " (owner=" + owner + ")"; } } - - public sealed class OwnedTypeParameterReference : ISymbolReference - { - ISymbolReference owner; - int index; - - public OwnedTypeParameterReference(ISymbolReference owner, int index) - { - if (owner == null) - throw new ArgumentNullException("owner"); - this.owner = owner; - this.index = index; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - var entity = owner.Resolve(context) as IEntity; - if (entity is ITypeDefinition) - return ((ITypeDefinition)entity).TypeParameters[index]; - if (entity is IMethod) - return ((IMethod)entity).TypeParameters[index]; - return null; - } - } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedMember.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedMember.cs index 955295a34..a99cde01a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedMember.cs @@ -152,11 +152,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return Resolve(ExtendContextForType(context, this.DeclaringTypeDefinition), this.SymbolKind, this.Name, interfaceTypeReference); } - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return ((IUnresolvedMember)this).Resolve(context); - } - protected static ITypeResolveContext ExtendContextForType(ITypeResolveContext assemblyContext, IUnresolvedTypeDefinition typeDef) { if (typeDef == null) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/AccessorOwnerMemberReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/AccessorOwnerMemberReference.cs index bd126a3cc..efd95d849 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/AccessorOwnerMemberReference.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/AccessorOwnerMemberReference.cs @@ -47,10 +47,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation else return null; } - - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return ((IMemberReference)this).Resolve(context); - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultMemberReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultMemberReference.cs index 49f277bd3..1da5bd448 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultMemberReference.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultMemberReference.cs @@ -99,11 +99,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return null; } - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return ((IMemberReference)this).Resolve(context); - } - int ISupportsInterning.GetHashCodeForInterning() { return (int)symbolKind ^ typeReference.GetHashCode() ^ name.GetHashCode() ^ parameterTypes.GetHashCode(); diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs index 1ef38d722..8580c9d2d 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultParameter.cs @@ -133,63 +133,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } return b.ToString(); } - - public ISymbolReference ToReference() - { - if (owner == null) - return new ParameterReference(type.ToTypeReference(), name, isRef, isOut, isParams, isOptional, defaultValue); - return new OwnedParameterReference(owner.ToReference(), owner.Parameters.IndexOf(this)); - } - } - - sealed class OwnedParameterReference : ISymbolReference - { - readonly IMemberReference memberReference; - readonly int index; - - public OwnedParameterReference(IMemberReference member, int index) - { - if (member == null) - throw new ArgumentNullException("member"); - this.memberReference = member; - this.index = index; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - IParameterizedMember member = memberReference.Resolve(context) as IParameterizedMember; - if (member != null && index >= 0 && index < member.Parameters.Count) - return member.Parameters[index]; - else - return null; - } - } - - public sealed class ParameterReference : ISymbolReference - { - readonly ITypeReference type; - readonly string name; - readonly bool isRef, isOut, isParams, isOptional; - readonly 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"); - if (name == null) - throw new ArgumentNullException("name"); - this.type = type; - this.name = name; - this.isRef = isRef; - this.isOut = isOut; - this.isParams = isParams; - this.isOptional = isOptional; - this.defaultValue = defaultValue; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - return new DefaultParameter(type.Resolve(context), name, isRef: isRef, isOut: isOut, isParams: isParams, isOptional: isOptional, defaultValue: defaultValue); - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedField.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedField.cs index 3bc84af40..f0f8cba79 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedField.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedField.cs @@ -81,10 +81,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation substitution = new TypeParameterSubstitution(substitution.ClassTypeArguments, EmptyList.Instance); return new SpecializedField(this, substitution); } - - IMemberReference IField.ToReference() - { - return (IMemberReference)ToReference(); - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs index 40e6764fe..130356be8 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedMethod.cs @@ -228,19 +228,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - public override ISymbolReference ToReference() - { - var declType = this.DeclaringType; - var declTypeRef = declType != null ? declType.ToTypeReference() : SpecialType.UnknownType; - if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) { - return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference()); - } else { - return new DefaultMemberReference( - this.SymbolKind, declTypeRef, this.Name, this.TypeParameters.Count, - this.Parameters.Select(p => p.Type.ToTypeReference()).ToList()); - } - } - public override IMember Specialize(TypeParameterSubstitution substitution) { if (TypeParameterSubstitution.Identity.Equals(substitution)) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedProperty.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedProperty.cs index 115753dfa..5afaf4e3a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedProperty.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedProperty.cs @@ -84,19 +84,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation get { return unresolved.IsIndexer; } } - public override ISymbolReference ToReference() - { - var declType = this.DeclaringType; - var declTypeRef = declType != null ? declType.ToTypeReference() : SpecialType.UnknownType; - if (IsExplicitInterfaceImplementation && ImplementedInterfaceMembers.Count == 1) { - return new ExplicitInterfaceImplementationMemberReference(declTypeRef, ImplementedInterfaceMembers[0].ToReference()); - } else { - return new DefaultMemberReference( - this.SymbolKind, declTypeRef, this.Name, 0, - this.Parameters.Select(p => p.Type.ToTypeReference()).ToList()); - } - } - public override IMember Specialize(TypeParameterSubstitution substitution) { if (TypeParameterSubstitution.Identity.Equals(substitution) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs index 393ad32e5..bfa34941b 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs @@ -633,11 +633,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - ISymbolReference ISymbol.ToReference() - { - return (ISymbolReference)ToTypeReference(); - } - public IEnumerable GetNestedTypes(Predicate filter = null, GetMemberOptions options = GetMemberOptions.None) { const GetMemberOptions opt = GetMemberOptions.IgnoreInheritedMembers | GetMemberOptions.ReturnMemberDefinitions; diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs index 764e7771a..422bf8425 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs @@ -567,68 +567,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation else return null; } - - public ISymbolReference ToReference() - { - return new NamespaceReference(new DefaultAssemblyReference(assembly.AssemblyName), ns.FullName); - } - } - } - } - - public sealed class NamespaceReference : ISymbolReference - { - IAssemblyReference assemblyReference; - string fullName; - - public NamespaceReference(IAssemblyReference assemblyReference, string fullName) - { - if (assemblyReference == null) - throw new ArgumentNullException("assemblyReference"); - this.assemblyReference = assemblyReference; - this.fullName = fullName; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - IAssembly assembly = assemblyReference.Resolve(context); - INamespace parent = assembly.RootNamespace; - - string[] parts = fullName.Split('.'); - - int i = 0; - while (i < parts.Length && parent != null) { - parent = parent.GetChildNamespace(parts[i]); - i++; - } - - return parent; - } - } - - public sealed class MergedNamespaceReference : ISymbolReference - { - string externAlias; - string fullName; - - public MergedNamespaceReference(string externAlias, string fullName) - { - this.externAlias = externAlias; - this.fullName = fullName; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - string[] parts = fullName.Split('.'); - INamespace parent = context.Compilation.GetNamespaceForExternAlias(externAlias); - - int i = 0; - while (i < parts.Length && parent != null) { - parent = parent.GetChildNamespace(parts[i]); - i++; } - - return parent; } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs index ad8b8bb9c..4b7077759 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultUnresolvedParameter.cs @@ -252,13 +252,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { return DefaultParameter.ToString(this); } - - public ISymbolReference ToReference() - { - if (Owner == null) - 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/DefaultVariable.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs index 01399bbe6..e92327673 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultVariable.cs @@ -67,35 +67,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public SymbolKind SymbolKind { get { return SymbolKind.Variable; } } - - public ISymbolReference ToReference() - { - return new VariableReference(type.ToTypeReference(), name, isConst, constantValue); - } - } - - public sealed class VariableReference : ISymbolReference - { - ITypeReference variableTypeReference; - string name; - bool isConst; - object constantValue; - - public VariableReference(ITypeReference variableTypeReference, string name, bool isConst, object constantValue) - { - if (variableTypeReference == null) - throw new ArgumentNullException("variableTypeReference"); - if (name == null) - throw new ArgumentNullException("name"); - this.variableTypeReference = variableTypeReference; - this.name = name; - this.isConst = isConst; - this.constantValue = constantValue; - } - - public ISymbol Resolve(ITypeResolveContext context) - { - 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 94928c156..0b838a03a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/DummyTypeParameter.cs @@ -237,10 +237,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation bool ITypeParameter.HasValueTypeConstraint { get { return false; } } - - public ISymbolReference ToReference() - { - return new TypeParameterReference(ownerType, index); - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/ExplicitInterfaceImplementationMemberReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/ExplicitInterfaceImplementationMemberReference.cs deleted file mode 100644 index d33173730..000000000 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/ExplicitInterfaceImplementationMemberReference.cs +++ /dev/null @@ -1,80 +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; - -namespace ICSharpCode.Decompiler.TypeSystem.Implementation -{ - /// - /// References a member that is an explicit interface implementation. - /// - /// - /// Resolving an ExplicitInterfaceImplementationMemberReference requires a context - /// that provides enough information for resolving the declaring type reference - /// and the interface member reference. - /// Note that the interface member reference is resolved in 'context.WithCurrentTypeDefinition(declaringType.GetDefinition())' - /// - this is done to ensure that open generics in the interface member reference resolve to the type parameters of the - /// declaring type. - /// - [Serializable] - public sealed class ExplicitInterfaceImplementationMemberReference : IMemberReference - { - ITypeReference typeReference; - IMemberReference interfaceMemberReference; - - public ExplicitInterfaceImplementationMemberReference(ITypeReference typeReference, IMemberReference interfaceMemberReference) - { - if (typeReference == null) - throw new ArgumentNullException("typeReference"); - if (interfaceMemberReference == null) - throw new ArgumentNullException("interfaceMemberReference"); - this.typeReference = typeReference; - this.interfaceMemberReference = interfaceMemberReference; - } - - public ITypeReference DeclaringTypeReference { - get { return typeReference; } - } - - public IMember Resolve(ITypeResolveContext context) - { - IType declaringType = typeReference.Resolve(context); - IMember interfaceMember = interfaceMemberReference.Resolve(context.WithCurrentTypeDefinition(declaringType.GetDefinition())); - if (interfaceMember == null) - return null; - IEnumerable members; - if (interfaceMember.SymbolKind == SymbolKind.Accessor) { - members = declaringType.GetAccessors( - m => m.IsExplicitInterfaceImplementation, - GetMemberOptions.IgnoreInheritedMembers); - } else { - members = declaringType.GetMembers( - m => m.SymbolKind == interfaceMember.SymbolKind && m.IsExplicitInterfaceImplementation, - GetMemberOptions.IgnoreInheritedMembers); - } - return members.FirstOrDefault(m => m.ImplementedInterfaceMembers.Count == 1 && interfaceMember.Equals(m.ImplementedInterfaceMembers[0])); - } - - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return Resolve(context); - } - } -} diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/GetClassTypeReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/GetClassTypeReference.cs index 42265828c..c934e2ff9 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/GetClassTypeReference.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/GetClassTypeReference.cs @@ -24,7 +24,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation /// Type Reference used when the fully qualified type name is known. /// [Serializable] - public sealed class GetClassTypeReference : ITypeReference, ISymbolReference, ISupportsInterning + public sealed class GetClassTypeReference : ITypeReference, ISupportsInterning { readonly IAssemblyReference assembly; readonly FullTypeName fullTypeName; @@ -124,14 +124,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return type ?? new UnknownType(fullTypeName, isReferenceType); } - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - var type = Resolve(context); - if (type is ITypeDefinition) - return (ISymbol)type; - return null; - } - public override string ToString() { return fullTypeName.ToString() + (assembly != null ? ", " + assembly.ToString() : null); diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/MergedNamespace.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/MergedNamespace.cs index 07bb87ff5..c98f7285a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/MergedNamespace.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/MergedNamespace.cs @@ -155,10 +155,5 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return string.Format(CultureInfo.InvariantCulture, "[MergedNamespace {0}{1} (from {2} assemblies)]", externAlias != null ? externAlias + "::" : null, this.FullName, this.namespaces.Length); } - - public ISymbolReference ToReference() - { - return new MergedNamespaceReference(externAlias, FullName); - } } } diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/NestedTypeReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/NestedTypeReference.cs index 3cfd69a43..a1646e1fd 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/NestedTypeReference.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/NestedTypeReference.cs @@ -24,7 +24,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation /// Type reference used to reference nested types. /// [Serializable] - public sealed class NestedTypeReference : ITypeReference, ISymbolReference, ISupportsInterning + public sealed class NestedTypeReference : ITypeReference, ISupportsInterning { readonly ITypeReference declaringTypeRef; readonly string name; @@ -78,14 +78,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation return new UnknownType(null, name, additionalTypeParameterCount); } - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - var type = Resolve(context); - if (type is ITypeDefinition) - return (ISymbol)type; - return null; - } - public override string ToString() { if (additionalTypeParameterCount == 0) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs index b232e225d..86ed53812 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs @@ -58,27 +58,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation this.substitution = TypeParameterSubstitution.Compose(newSubstitution, this.substitution); } - public virtual IMemberReference ToReference() - { - return new SpecializingMemberReference( - baseMember.ToReference(), - ToTypeReference(substitution.ClassTypeArguments), - null); - } - - ISymbolReference ISymbol.ToReference() - { - return ToReference(); - } - - internal static IList ToTypeReference(IReadOnlyList typeArguments) - { - if (typeArguments == null) - return null; - else - return typeArguments.Select(t => t.ToTypeReference()).ToArray(); - } - internal IMethod WrapAccessor(ref IMethod cachingField, IMethod accessorDefinition) { if (accessorDefinition == null) diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs index 7e883cfab..fda5f6983 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs @@ -147,29 +147,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation accessorOwner = value; } } - - public override IMemberReference ToReference() - { - // Pass the MethodTypeArguments to the SpecializingMemberReference only if - // the generic method itself is parameterized, not if the generic method is only - // specialized with class type arguments. - - // This is necessary due to this part of the ToReference() contract: - // If this member is specialized using open generic types, the resulting member reference will need to be looked up in an appropriate generic context. - // Otherwise, the main resolve context of a compilation is sufficient. - // -> - // This means that if the method itself isn't specialized, - // we must not include TypeParameterReferences for the specialized type parameters - // in the resulting member reference. - if (isParameterized) { - return new SpecializingMemberReference( - baseMember.ToReference(), - ToTypeReference(base.Substitution.ClassTypeArguments), - ToTypeReference(base.Substitution.MethodTypeArguments)); - } else { - return base.ToReference(); - } - } public override bool Equals(object obj) { diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializingMemberReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializingMemberReference.cs deleted file mode 100644 index 46c846632..000000000 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializingMemberReference.cs +++ /dev/null @@ -1,67 +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; - -namespace ICSharpCode.Decompiler.TypeSystem.Implementation -{ - [Serializable] - public sealed class SpecializingMemberReference : IMemberReference - { - IMemberReference memberDefinitionReference; - IList classTypeArgumentReferences; - IList methodTypeArgumentReferences; - - public SpecializingMemberReference(IMemberReference memberDefinitionReference, IList classTypeArgumentReferences = null, IList methodTypeArgumentReferences = null) - { - if (memberDefinitionReference == null) - throw new ArgumentNullException("memberDefinitionReference"); - this.memberDefinitionReference = memberDefinitionReference; - this.classTypeArgumentReferences = classTypeArgumentReferences; - this.methodTypeArgumentReferences = methodTypeArgumentReferences; - } - - public IMember Resolve(ITypeResolveContext context) - { - var memberDefinition = memberDefinitionReference.Resolve(context); - if (memberDefinition == null) - return null; - return memberDefinition.Specialize( - new TypeParameterSubstitution( - classTypeArgumentReferences != null ? classTypeArgumentReferences.Resolve(context) : null, - methodTypeArgumentReferences != null ? methodTypeArgumentReferences.Resolve(context) : null - ) - ); - } - - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return Resolve(context); - } - - public ITypeReference DeclaringTypeReference { - get { - if (classTypeArgumentReferences != null) - return new ParameterizedTypeReference(memberDefinitionReference.DeclaringTypeReference, classTypeArgumentReferences); - else - return memberDefinitionReference.DeclaringTypeReference; - } - } - } -} diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/TypeParameterReference.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/TypeParameterReference.cs index 712d536bc..f328d3615 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/TypeParameterReference.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/TypeParameterReference.cs @@ -23,7 +23,7 @@ using ICSharpCode.Decompiler.Util; namespace ICSharpCode.Decompiler.TypeSystem.Implementation { [Serializable] - public sealed class TypeParameterReference : ITypeReference, ISymbolReference + public sealed class TypeParameterReference : ITypeReference { static readonly TypeParameterReference[] classTypeParameterReferences = new TypeParameterReference[8]; static readonly TypeParameterReference[] methodTypeParameterReferences = new TypeParameterReference[8]; @@ -80,11 +80,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } } - ISymbol ISymbolReference.Resolve(ITypeResolveContext context) - { - return Resolve(context) as ISymbol; - } - public override string ToString() { if (ownerType == SymbolKind.Method) diff --git a/ICSharpCode.Decompiler/TypeSystem/ProjectReference.cs b/ICSharpCode.Decompiler/TypeSystem/ProjectReference.cs deleted file mode 100644 index a74670df1..000000000 --- a/ICSharpCode.Decompiler/TypeSystem/ProjectReference.cs +++ /dev/null @@ -1,56 +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; - -namespace ICSharpCode.Decompiler.TypeSystem -{ - /// - /// References another project content in the same solution. - /// Using the class requires that you - /// - [Serializable] - public class ProjectReference : IAssemblyReference - { - readonly string projectFileName; - - /// - /// Creates a new reference to the specified project (must be part of the same solution). - /// - /// Full path to the file name. Must be identical to of the target project; do not use a relative path. - public ProjectReference(string projectFileName) - { - this.projectFileName = projectFileName; - } - - public IAssembly Resolve(ITypeResolveContext context) - { - var solution = context.Compilation.SolutionSnapshot; - var pc = solution.GetProjectContent(projectFileName); - if (pc != null) - return pc.Resolve(context); - else - return null; - } - - public override string ToString() - { - return string.Format("[ProjectReference {0}]", projectFileName); - } - } -} diff --git a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs index 1ef80ee96..13506eb9a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs +++ b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs @@ -208,69 +208,6 @@ namespace ICSharpCode.Decompiler.TypeSystem #endregion #region Import - /// - /// Imports a symbol from another compilation. - /// - public static ISymbol Import(this ICompilation compilation, ISymbol symbol) - { - if (compilation == null) - throw new ArgumentNullException("compilation"); - if (symbol == null) - return null; - switch (symbol.SymbolKind) { - case SymbolKind.TypeParameter: - return (ITypeParameter)Import(compilation, (IType)symbol); - case SymbolKind.Variable: - IVariable v = (IVariable)symbol; - return new DefaultVariable( - Import(compilation, v.Type), - v.Name, v.IsConst, v.ConstantValue - ); - case SymbolKind.Parameter: - IParameter p = (IParameter)symbol; - if (p.Owner != null) { - int index = p.Owner.Parameters.IndexOf(p); - var owner = (IParameterizedMember)Import(compilation, p.Owner); - if (owner == null || index < 0 || index >= owner.Parameters.Count) - return null; - return owner.Parameters[index]; - } else { - return new DefaultParameter( - Import(compilation, p.Type), - p.Name, null, - null, p.IsRef, p.IsOut, p.IsParams - ); - } - case SymbolKind.Namespace: - return Import(compilation, (INamespace)symbol); - default: - if (symbol is IEntity) - return Import(compilation, (IEntity)symbol); - throw new NotSupportedException("Unsupported symbol kind: " + symbol.SymbolKind); - } - } - - /// - /// Imports a type from another compilation. - /// - public static IType Import(this ICompilation compilation, IType type) - { - if (compilation == null) - throw new ArgumentNullException("compilation"); - if (type == null) - return null; - var compilationProvider = type as ICompilationProvider; - if (compilationProvider != null && compilationProvider.Compilation == compilation) - return type; - IEntity typeParameterOwner = GetTypeParameterOwner(type); - IEntity importedTypeParameterOwner = compilation.Import(typeParameterOwner); - if (importedTypeParameterOwner != null) { - return type.ToTypeReference().Resolve(new SimpleTypeResolveContext(importedTypeParameterOwner)); - } else { - return type.ToTypeReference().Resolve(compilation.TypeResolveContext); - } - } - /// /// Imports a type from another compilation. /// @@ -284,95 +221,6 @@ namespace ICSharpCode.Decompiler.TypeSystem return typeDefinition; return typeDefinition.ToTypeReference().Resolve(compilation.TypeResolveContext).GetDefinition(); } - - /// - /// Imports an entity from another compilation. - /// - public static IEntity Import(this ICompilation compilation, IEntity entity) - { - if (compilation == null) - throw new ArgumentNullException("compilation"); - if (entity == null) - return null; - if (entity.Compilation == compilation) - return entity; - if (entity is IMember) - return ((IMember)entity).ToReference().Resolve(compilation.TypeResolveContext); - else if (entity is ITypeDefinition) - return ((ITypeDefinition)entity).ToTypeReference().Resolve(compilation.TypeResolveContext).GetDefinition(); - else - throw new NotSupportedException("Unknown entity type"); - } - - /// - /// Imports a member from another compilation. - /// - public static IMember Import(this ICompilation compilation, IMember member) - { - if (compilation == null) - throw new ArgumentNullException("compilation"); - if (member == null) - return null; - if (member.Compilation == compilation) - return member; - return member.ToReference().Resolve(compilation.TypeResolveContext); - } - - /// - /// Imports a member from another compilation. - /// - public static IMethod Import(this ICompilation compilation, IMethod method) - { - return (IMethod)compilation.Import((IMember)method); - } - - /// - /// Imports a member from another compilation. - /// - public static IField Import(this ICompilation compilation, IField field) - { - return (IField)compilation.Import((IMember)field); - } - - /// - /// Imports a member from another compilation. - /// - public static IEvent Import(this ICompilation compilation, IEvent ev) - { - return (IEvent)compilation.Import((IMember)ev); - } - - /// - /// Imports a member from another compilation. - /// - public static IProperty Import(this ICompilation compilation, IProperty property) - { - return (IProperty)compilation.Import((IMember)property); - } - - /// - /// Imports a namespace from another compilation. - /// - /// - /// This method may return null if the namespace does not exist in the target compilation. - /// - public static INamespace Import(this ICompilation compilation, INamespace ns) - { - if (compilation == null) - throw new ArgumentNullException("compilation"); - if (ns == null) - return null; - if (ns.ParentNamespace == null) { - // root namespace - return compilation.GetNamespaceForExternAlias(ns.ExternAlias); - } else { - INamespace parent = Import(compilation, ns.ParentNamespace); - if (parent != null) - return parent.GetChildNamespace(ns.Name); - else - return null; - } - } #endregion #region GetDelegateInvokeMethod diff --git a/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs b/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs index 75bd2981f..8761bec35 100644 --- a/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs +++ b/ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs @@ -164,11 +164,6 @@ namespace ICSharpCode.Decompiler.TypeSystem #region IMember implementation - public IMemberReference ToReference() - { - throw new NotImplementedException(); - } - IMember IMember.Specialize(TypeParameterSubstitution substitution) { return Specialize(substitution); @@ -213,12 +208,7 @@ namespace ICSharpCode.Decompiler.TypeSystem #endregion #region ISymbol implementation - - ISymbolReference ISymbol.ToReference() - { - return ToReference(); - } - + public SymbolKind SymbolKind { get { return baseMethod.SymbolKind; } }