internal static string GetEventName(IEventSymbol sym) { if (null == sym) { return(string.Empty); } if (sym.ExplicitInterfaceImplementations.Length > 0) { int ix = sym.Name.LastIndexOf('.'); return(ClassInfo.CalcNameWithFullTypeName(sym.Name.Substring(ix + 1), sym.ContainingType)); } else { return(sym.Name); } }
private void BuildInterfaceInfo(INamedTypeSymbol typeSym, CSharpCompilation compilation, SymbolTable symTable) { foreach (var intf in typeSym.AllInterfaces) { if (!InterfaceSymbols.Contains(intf)) { InterfaceSymbols.Add(intf); } foreach (var sym in intf.GetMembers()) { var msym = sym as IMethodSymbol; if (null != msym) { var implSym = typeSym.FindImplementationForInterfaceMember(sym) as IMethodSymbol; if (null != implSym) { string name = symTable.NameMangling(msym); name = ClassInfo.CalcNameWithFullTypeName(name, sym.ContainingType); string implName = symTable.NameMangling(implSym); if (!InterfaceMethodMap.ContainsKey(name)) { InterfaceMethodMap.Add(name, implName); } } } var psym = sym as IPropertySymbol; if (null != psym && !psym.IsIndexer) { var implSym = typeSym.FindImplementationForInterfaceMember(sym) as IPropertySymbol; if (null != implSym && !psym.IsIndexer) { string name = SymbolTable.GetPropertyName(psym); name = ClassInfo.CalcNameWithFullTypeName(name, sym.ContainingType); string implName = SymbolTable.GetPropertyName(implSym); if (!InterfaceMethodMap.ContainsKey(name)) { InterfaceMethodMap.Add(name, implName); } } } var esym = sym as IEventSymbol; if (null != esym) { var implSym = typeSym.FindImplementationForInterfaceMember(sym) as IEventSymbol; if (null != implSym) { string name = SymbolTable.GetEventName(esym); name = ClassInfo.CalcNameWithFullTypeName(name, sym.ContainingType); string implName = SymbolTable.GetEventName(implSym); if (!InterfaceMethodMap.ContainsKey(name)) { InterfaceMethodMap.Add(name, implName); } } } } } if (typeSym.TypeKind != TypeKind.Interface) { foreach (var sym in typeSym.GetMembers()) { var msym = sym as IMethodSymbol; if (null != msym && msym.ExplicitInterfaceImplementations.Length > 0) { foreach (var implSym in msym.ExplicitInterfaceImplementations) { string fn = ClassInfo.GetFullName(implSym.ContainingType); ClassSymbolInfo csi; if (symTable.ClassSymbols.TryGetValue(fn, out csi)) { if (!csi.ExplicitInterfaceImplementationMethods.Contains(implSym)) { csi.ExplicitInterfaceImplementationMethods.Add(implSym); } } } } var psym = sym as IPropertySymbol; if (null != psym && !psym.IsIndexer && psym.ExplicitInterfaceImplementations.Length > 0) { foreach (var implSym in psym.ExplicitInterfaceImplementations) { string fn = ClassInfo.GetFullName(implSym.ContainingType); ClassSymbolInfo csi; if (symTable.ClassSymbols.TryGetValue(fn, out csi)) { if (!csi.ExplicitInterfaceImplementationProperties.Contains(implSym)) { csi.ExplicitInterfaceImplementationProperties.Add(implSym); } } } } var esym = sym as IEventSymbol; if (null != esym && esym.ExplicitInterfaceImplementations.Length > 0) { foreach (var implSym in esym.ExplicitInterfaceImplementations) { string fn = ClassInfo.GetFullName(implSym.ContainingType); ClassSymbolInfo csi; if (symTable.ClassSymbols.TryGetValue(fn, out csi)) { if (!csi.ExplicitInterfaceImplementationEvents.Contains(implSym)) { csi.ExplicitInterfaceImplementationEvents.Add(implSym); } } } } } } }