/// <summary> /// It's not interesting to report diagnostics on implementation of interface accessors /// if the corresponding events or properties are not implemented (i.e. we want to suppress /// cascading diagnostics). /// Caveat: Indexed property accessors are always interesting. /// Caveat: It's also uninteresting if a WinRT event is implemented by a non-WinRT event, /// or vice versa. /// </summary> private bool ReportAccessorOfInterfacePropertyOrEvent(Symbol interfacePropertyOrEvent) { Debug.Assert((object)interfacePropertyOrEvent != null); // Accessors of indexed properties are always interesting. if (interfacePropertyOrEvent.IsIndexedProperty()) { return true; } Symbol implementingPropertyOrEvent = this.FindImplementationForInterfaceMemberWithDiagnostics(interfacePropertyOrEvent).Symbol; // If the property or event wasn't implemented, then we'd prefer to report diagnostics about that. if ((object)implementingPropertyOrEvent == null) { return false; } // If the property or event was an event and was implemented, but the WinRT-ness didn't agree, // then we'd prefer to report diagnostics about that. if (interfacePropertyOrEvent.Kind == SymbolKind.Event && implementingPropertyOrEvent.Kind == SymbolKind.Event && ((EventSymbol)interfacePropertyOrEvent).IsWindowsRuntimeEvent != ((EventSymbol)implementingPropertyOrEvent).IsWindowsRuntimeEvent) { return false; } return true; }