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);
        }
コード例 #2
0
        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("'");
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 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;
     }
 }