private void CreateExplicitInterfaceImplementations(TypeDefinitionMember member) { List <ITypeDefinitionMember> interfaceMembers = Util.FindRelatedInterfaceMembers(member); foreach (ITypeDefinitionMember interfaceMember in interfaceMembers) { IMethodDefinition methodDef = interfaceMember.ResolvedTypeDefinitionMember as IMethodDefinition; if (methodDef != null) { List <IMethodImplementation> methodImpls = null; methodImpls = GetExplicitImplementationOverrides(member, methodImpls); if (methodImpls != null) { // Make sure implementedmethod is in the closure TrimType trimType = (TrimType)_currentTrimAssembly.GetTypeElement(Util.GetTypeName(Util.ContainingTypeDefinition(interfaceMember))); if (trimType != null) { TrimMember trimMember = trimType.GetMemberElementFromMember(interfaceMember); if (trimMember != null) { MethodImplementation methodImpl = new MethodImplementation(); methodImpl.ImplementedMethod = interfaceMember.ResolvedTypeDefinitionMember as IMethodReference; methodImpl.ImplementingMethod = member as IMethodReference; methodImpl.ContainingType = member.ContainingTypeDefinition; methodImpls.Add(Rewrite(methodImpl)); } } } } } }
public override List <IMethodDefinition> Rewrite(List <IMethodDefinition> methodDefinitions) { TrimType currentType = CurrentTrimElement as TrimType; List <IMethodDefinition> newList = new List <IMethodDefinition>(); if (methodDefinitions == null) { return(newList); } foreach (IMethodDefinition method in methodDefinitions) { MemberElement currentElement = currentType.GetMemberElementFromMember(method); if (currentElement != null) { _trimElements.Push(currentElement); IMethodDefinition newMethod = Rewrite(method); newList.Add(newMethod); _trimElements.Pop(); } } return(newList); }
public override List <IPropertyDefinition> Rewrite(List <IPropertyDefinition> propertyDefinitions) { TrimType currentType = CurrentTrimElement as TrimType; List <IPropertyDefinition> newList = new List <IPropertyDefinition>(); if (propertyDefinitions == null) { return(newList); } foreach (IPropertyDefinition property in propertyDefinitions) { MemberElement currentElement = currentType.GetMemberElementFromMember(property); if (currentElement != null) { _trimElements.Push(currentElement); IPropertyDefinition newProperty = Rewrite(property); newList.Add(newProperty); _trimElements.Pop(); } } return(newList); }
public override List <IEventDefinition> Rewrite(List <IEventDefinition> eventDefinitions) { TrimType currentType = CurrentTrimElement as TrimType; List <IEventDefinition> newList = new List <IEventDefinition>(); if (eventDefinitions == null) { return(newList); } foreach (IEventDefinition evnt in eventDefinitions) { MemberElement currentElement = currentType.GetMemberElementFromMember(evnt); if (currentElement != null) { _trimElements.Push(currentElement); IEventDefinition newEvnt = Rewrite(evnt); newList.Add(newEvnt); _trimElements.Pop(); } } return(newList); }
public override List <IMethodImplementation> Rewrite(List <IMethodImplementation> methodImplementations) { TrimType currentType = CurrentTrimElement as TrimType; List <IMethodImplementation> newList = new List <IMethodImplementation>(); if (methodImplementations == null) { return(newList); } foreach (IMethodImplementation methodImpl in methodImplementations) { IMethodReference implementingMethod = methodImpl.ImplementingMethod; IMethodReference implementedMethod = methodImpl.ImplementedMethod; TrimMember implementingMemberElement = currentType.GetMemberElementFromMember(implementingMethod); TrimMember implementedMemberElement = null; if (implementingMemberElement != null) { ITypeReference implementedType = Util.CanonicalizeTypeReference(implementedMethod.ContainingType); TrimType implementedTypeElement = (TrimType)_currentTrimAssembly.GetTypeElement(Util.GetTypeName(implementedType)); if (implementedTypeElement != null) { implementedMemberElement = implementedTypeElement.GetMemberElementFromMember(Util.CanonicalizeMethodReference(implementedMethod)); } } else { } if (implementingMemberElement != null && (implementedMemberElement != null || !_includeSet.Assemblies.ContainsKey(Util.GetDefiningAssembly(implementedMethod.ContainingType).Name.Value))) { IMethodImplementation newMethodImpl = Rewrite(methodImpl); newList.Add(newMethodImpl); } //else //{ Console.WriteLine("Removing {0}'s impl of {1}", implementingMethod.ToString(), implementedMethod.ToString()); } } return(newList); }