public static CodeImplementedInterfaceItem MapImplementedInterface(string name, ImmutableArray <ISymbol> members, INamedTypeSymbol implementingClass, SyntaxNode currentClass, ICodeViewUserControl control) { var item = new CodeImplementedInterfaceItem { Name = name, FullName = name, Id = name, ForegroundColor = Colors.Black, BorderColor = Colors.DarkGray, FontSize = Settings.Default.Font.SizeInPoints - 2, Kind = CodeItemKindEnum.ImplementedInterface, IsExpanded = true, Control = control }; foreach (var member in members) { var implementation = implementingClass.FindImplementationForInterfaceMember(member); if (implementation == null || !implementation.DeclaringSyntaxReferences.Any()) { continue; } // Ignore interface members not directly implemented in the current class if (implementation.ContainingSymbol != implementingClass) { continue; } // Ignore interface members not directly implemented in the current file (partial class) if (implementation.DeclaringSyntaxReferences != null && implementation.DeclaringSyntaxReferences.Any() && implementation.DeclaringSyntaxReferences.First().SyntaxTree.FilePath != currentClass.SyntaxTree.FilePath) { continue; } var reference = implementation.DeclaringSyntaxReferences.First(); var declarationSyntax = reference.GetSyntax(); var interfaceMember = SyntaxMapper.MapMember(declarationSyntax as MemberDeclarationSyntax); if (interfaceMember == null) { continue; } interfaceMember.OverlayMoniker = KnownMonikers.InterfacePublic; item.Members.Add(interfaceMember); } if (item.Members.Any()) { item.StartLine = item.Members.Min(i => i.StartLine); item.EndLine = item.Members.Max(i => i.EndLine); } return(item); }
public static CodeImplementedInterfaceItem MapImplementedInterface(string name, ImmutableArray <ISymbol> members, INamedTypeSymbol implementingClass) { var item = new CodeImplementedInterfaceItem { Name = name, FullName = name, Id = name, Foreground = ColorHelper.ToBrush(Colors.Black), BorderBrush = ColorHelper.ToBrush(Colors.DarkGray), FontSize = Settings.Default.Font.SizeInPoints - 2, Kind = CodeItemKindEnum.ImplementedInterface, IsExpanded = true }; foreach (var member in members) { var implementation = implementingClass.FindImplementationForInterfaceMember(member); if (implementation == null || !implementation.DeclaringSyntaxReferences.Any()) { continue; } var reference = implementation.DeclaringSyntaxReferences.First(); var declarationSyntax = reference.GetSyntax(); var interfaceMember = SyntaxMapper.MapMember(declarationSyntax as MemberDeclarationSyntax); if (interfaceMember == null) { continue; } interfaceMember.OverlayMoniker = KnownMonikers.InterfacePublic; item.Members.Add(interfaceMember); } if (item.Members.Any()) { item.StartLine = item.Members.Min(i => i.StartLine); item.EndLine = item.Members.Max(i => i.EndLine); } return(item); }