ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.CSharpToVBNetConvertVisitor.CreateInterfaceImplementations C# (CSharp) Method

CreateInterfaceImplementations() private method

private CreateInterfaceImplementations ( IMember currentMember, ParametrizedNode memberDecl, List interfaceImplementations ) : void
currentMember IMember
memberDecl ParametrizedNode
interfaceImplementations List
return void
		void CreateInterfaceImplementations(IMember currentMember, ParametrizedNode memberDecl, List<InterfaceImplementation> interfaceImplementations)
		{
			if (currentMember != null
			    && (memberDecl.Modifier & Modifiers.Visibility) == Modifiers.None
			    && interfaceImplementations.Count == 1)
			{
				// member is explicitly implementing an interface member
				// to convert explicit interface implementations to VB, make the member private
				// and ensure its name does not collide with another member
				memberDecl.Modifier |= Modifiers.Private;
				memberDecl.Name = interfaceImplementations[0].InterfaceType.Type.Replace('.', '_') + "_" + memberDecl.Name;
			}
			
			if (currentMember != null && currentMember.IsPublic
			    && currentMember.DeclaringType.ClassType != ClassType.Interface)
			{
				// member could be implicitly implementing an interface member,
				// search for interfaces containing the member
				foreach (IReturnType directBaseType in currentMember.DeclaringType.GetCompoundClass().BaseTypes) {
					IClass directBaseClass = directBaseType.GetUnderlyingClass();
					if (directBaseClass != null && directBaseClass.ClassType == ClassType.Interface) {
						// include members inherited from other interfaces in the search:
						foreach (IReturnType baseType in MemberLookupHelper.GetTypeInheritanceTree(directBaseType)) {
							IClass baseClass = baseType.GetUnderlyingClass();
							if (baseClass != null && baseClass.ClassType == ClassType.Interface) {
								IMember similarMember = MemberLookupHelper.FindSimilarMember(baseClass, currentMember);
								// add an interface implementation for similarMember
								// only when similarMember is not explicitly implemented by another member in this class
								if (similarMember != null && !HasExplicitImplementationFor(similarMember, baseType, memberDecl.Parent)) {
									interfaceImplementations.Add(new InterfaceImplementation(
										Refactoring.CodeGenerator.ConvertType(baseType, CreateContext()),
										currentMember.Name));
								}
							}
						}
					}
				}
			}
		}