public static IEnumerable <OverridableMemberInstance> GetOverridenMembers( this IClassLikeDeclaration classLikeDeclaration) { Contract.Requires(classLikeDeclaration != null); Contract.Ensures(Contract.Result <IEnumerable <OverridableMemberInstance> >() != null); var alreadyOverriden = new List <OverridableMemberInstance>(); foreach (IOverridableMember member in classLikeDeclaration.DeclaredElement.GetMembers().OfType <IOverridableMember>()) { if (member.IsExplicitImplementation) { foreach (IExplicitImplementation implementation in member.ExplicitImplementations) { OverridableMemberInstance element = implementation.Resolve(); if (element != null) { alreadyOverriden.Add(element); } } } else if (member.IsOverride) { foreach (OverridableMemberInstance isntance in new OverridableMemberInstance(member).GetImmediateOverride()) { alreadyOverriden.Add(isntance); } } } return(alreadyOverriden); }
protected override void AppendTooltip(CannotAccessExplicitImplementationError highlighting, CSharpColorizer colorizer) { IExplicitImplementation explicitImplementation = highlighting.ExplicitImplementation; OverridableMemberInstance resolvedMember = explicitImplementation.Resolve(); colorizer.AppendPlainText("Cannot access explicit implementation of '"); colorizer.AppendExpressionType(explicitImplementation.DeclaringType, false, PresenterOptions.NameOnly); colorizer.AppendOperator("."); if (resolvedMember != null) { colorizer.AppendDeclaredElement(resolvedMember.Element, resolvedMember.Substitution, PresenterOptions.NameOnly, highlighting.Reference.GetTreeNode()); } else { colorizer.AppendPlainText(explicitImplementation.MemberName); } colorizer.AppendPlainText("'"); }
public static TH CollectDeclarationInfo <T, TH>([NotNull] this IOverridableMember member, [NotNull] T name) where T : class, IMemberName where TH : IMemberHierarchy <T>, new() { var decl = new TH { Element = name }; OverridableMemberInstance superMember = null; foreach (var super in member.GetImmediateSuperMembers()) { superMember = super; if (super.DeclaringType.IsInterfaceType() || super.GetRootSuperMembers(false).Any(m => m.DeclaringType.IsInterfaceType())) { break; } } if (superMember != null) { decl.Super = superMember.GetName <T>(); var firstMember = superMember.GetRootSuperMembers(false).FirstOrDefault() ?? superMember; decl.First = firstMember.GetName <T>(); } if (decl.First != null && decl.Super != null && decl.First.Equals(decl.Super)) { if (decl.Super.DeclaringType.IsInterfaceType) { decl.Super = null; } else { decl.First = null; } } return(decl); }
private static IEnumerable <IOverridableMember> GetMembers(OverridableMemberInstance overridableMember) { // For properties we should compare IProperty.Getter and IProperty.Setter with // _requiredFunction.DeclaredElement if (overridableMember.Member is IProperty) { var property = (IProperty)overridableMember.Member; if (property.Getter != null) { yield return(property.Getter); } if (property.Setter != null) { yield return(property.Setter); } } else { yield return(overridableMember.Member); } }
private IEnumerable<IOverridableMember> GetMembers(OverridableMemberInstance overridableMember) { // For properties we should compare IProperty.Getter and IProperty.Setter with // _requiredFunction.DeclaredElement if (overridableMember.Member is IProperty) { var property = (IProperty) overridableMember.Member; if (property.Getter != null) yield return property.Getter; if (property.Setter != null) yield return property.Setter; } else { yield return overridableMember.Member; } }