Esempio n. 1
0
        public IMember FindBaseMembers()
        {
            var result = InheritanceHelper.GetBaseMembers(this, false);

            //var result = bm
            //    .Where(m => m.DeclaringTypeDefinition != null && m.DeclaringTypeDefinition.Kind == TypeKind.Class)
            //    .ToArray();

            ////IEnumerable<IMember> otherMembers = DeclaringTypeDefinition.Members;
            ////if (SymbolKind == SymbolKind.Accessor)
            ////    otherMembers = DeclaringTypeDefinition.GetAccessors(options: GetMemberOptions.IgnoreInheritedMembers);
            ////result = result.Where(item => !otherMembers.Any(m => m.IsExplicitInterfaceImplementation && m.ImplementedInterfaceMembers.Contains(item))).ToArray();

            return(result.FirstOrDefault());
        }
Esempio n. 2
0
        static IMember FindDerivedMember(IMember importedMember, ITypeDefinition derivedType)
        {
            IMember derivedMember;

            if (importedMember.DeclaringTypeDefinition.Kind == TypeKind.Interface)
            {
                derivedMember = derivedType.GetMembers(null, GetMemberOptions.IgnoreInheritedMembers)
                                .FirstOrDefault(m => m.ImplementedInterfaceMembers.Any(im => im.Region == importedMember.Region));
            }
            else
            {
                derivedMember = InheritanceHelper.GetDerivedMember(importedMember, derivedType);
            }
            return(derivedMember);
        }
 bool IsInactiveConditionalMethod(IParameterizedMember member)
 {
     if (member.SymbolKind != SymbolKind.Method || member.ReturnType.Kind != TypeKind.Void)
     {
         return(false);
     }
     foreach (var baseMember in InheritanceHelper.GetBaseMembers(member, false))
     {
         if (IsInactiveConditional(baseMember.Attributes))
         {
             return(true);
         }
     }
     return(IsInactiveConditional(member.Attributes));
 }
        Accessibility ComputeAccessibility()
        {
            var baseAcc = base.Accessibility;

            if (IsOverride && !(CanGet && CanSet))
            {
                foreach (var baseMember in InheritanceHelper.GetBaseMembers(this, false))
                {
                    if (!baseMember.IsOverride)
                    {
                        return(baseMember.Accessibility);
                    }
                }
            }
            return(baseAcc);
        }
 bool IsInactiveConditionalMethod(IParameterizedMember member)
 {
     if (member.EntityType != EntityType.Method || member.ReturnType.Kind != TypeKind.Void)
     {
         return(false);
     }
     while (member.IsOverride)
     {
         member = (IParameterizedMember)InheritanceHelper.GetBaseMember(member);
         if (member == null)
         {
             return(false);
         }
     }
     return(IsInactiveConditional(member.Attributes));
 }
Esempio n. 6
0
        protected virtual int GetIndex(IMember member)
        {
            var originalMember = member;

            while (member != null && member.IsOverride && !this.IsTemplateOverride(member))
            {
                member = InheritanceHelper.GetBaseMember(member);
            }

            if (member == null)
            {
                member = originalMember;
            }

            return(this.Members.IndexOf(member.MemberDefinition));
        }
Esempio n. 7
0
 Accessibility ComputeAccessibility()
 {
     if (IsOverride && (getter == null || setter == null))
     {
         foreach (var baseMember in InheritanceHelper.GetBaseMembers(this, includeImplementedInterfaces: false))
         {
             if (!baseMember.IsOverride)
             {
                 return(baseMember.Accessibility);
             }
         }
     }
     return(AccessibilityExtensions.Union(
                this.Getter?.Accessibility ?? Accessibility.None,
                this.Setter?.Accessibility ?? Accessibility.None));
 }
Esempio n. 8
0
            public override void VisitInvocationExpression(InvocationExpression invocationExpression)
            {
                base.VisitInvocationExpression(invocationExpression);
                var mr = invocationExpression.Target as MemberReferenceExpression;

                if (mr == null || !(mr.Target is BaseReferenceExpression))
                {
                    return;
                }

                var invocationRR = ctx.Resolve(invocationExpression) as InvocationResolveResult;

                if (invocationRR == null)
                {
                    return;
                }

                var parentEntity = invocationExpression.GetParent <EntityDeclaration>();

                if (parentEntity == null)
                {
                    return;
                }
                var rr = ctx.Resolve(parentEntity) as MemberResolveResult;

                if (rr == null)
                {
                    return;
                }

                if (invocationExpression.Arguments.Count >= invocationRR.Member.Parameters.Count ||
                    invocationRR.Member.Parameters.Count == 0 ||
                    !invocationRR.Member.Parameters.Last().IsOptional)
                {
                    return;
                }

                if (!InheritanceHelper.GetBaseMembers(rr.Member, false).Any(m => m == invocationRR.Member))
                {
                    return;
                }
                AddIssue(new CodeIssue(
                             invocationExpression.RParToken,
                             ctx.TranslateString("Call to base member with implicit default parameters")
                             ));
            }
Esempio n. 9
0
            void Check(EntityDeclaration entity)
            {
                if (!entity.HasModifier(Modifiers.Override))
                {
                    return;
                }
                var rr = ctx.Resolve(entity) as MemberResolveResult;

                if (rr == null || rr.IsError)
                {
                    return;
                }
                var method = rr.Member as IParameterizedMember;

                if (method == null)
                {
                    return;
                }
                var baseMethod = InheritanceHelper.GetBaseMember(method) as IParameterizedMember;

                if (baseMethod == null)
                {
                    return;
                }

                for (int i = 0; i < Math.Min(method.Parameters.Count, baseMethod.Parameters.Count); i++)
                {
                    var arg     = method.Parameters[i];
                    var baseArg = baseMethod.Parameters[i];

                    if (arg.Name != baseArg.Name)
                    {
                        int _i         = i;
                        var parameters = entity.GetChildrenByRole(Roles.Parameter);
                        AddIssue(new CodeIssue(
                                     parameters.ElementAt(_i).NameToken,
                                     ctx.TranslateString("Parameter name differs in base method declaration"),
                                     string.Format(ctx.TranslateString("Rename to '{0}'"), baseArg.Name),
                                     s => {
                            s.Rename(arg, baseArg.Name);
                        }
                                     ));
                    }
                }
            }
Esempio n. 10
0
        public void Setup()
        {
            String uri = "tcp://localhost:4003";

            MainInheritanceListener implFactory = new MainInheritanceListener();

            listener = InheritanceHelper.NewListener(uri, null, implFactory);

            listener.TransportControl(TransportConsts.START_AND_WAIT_UP, 4000);

            MainInheritanceClient client = new MainInheritanceClient();

            server = InheritanceHelper.NewServer(uri, null, client);

            //    server._TransportControl(Etch.Transport.TransportConsts.START_AND_WAIT_UP, 4000);

            server._StartAndWaitUp(4000);
        }
Esempio n. 11
0
            public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
            {
                if (!methodDeclaration.HasModifier(Modifiers.Override))
                {
                    return;
                }
                var lastParam = methodDeclaration.Parameters.LastOrDefault();

                if (lastParam == null || lastParam.ParameterModifier != ParameterModifier.Params)
                {
                    return;
                }
                var type = lastParam.Type as ComposedType;

                if (type == null || !type.ArraySpecifiers.Any())
                {
                    return;
                }
                var rr = ctx.Resolve(methodDeclaration) as MemberResolveResult;

                if (rr == null)
                {
                    return;
                }
                var baseMember = InheritanceHelper.GetBaseMember(rr.Member) as IMethod;

                if (baseMember == null || baseMember.Parameters.Count == 0 || baseMember.Parameters.Last().IsParams)
                {
                    return;
                }
                AddIssue(new CodeIssue(
                             lastParam.GetChildByRole(ParameterDeclaration.ParamsModifierRole),
                             ctx.TranslateString("'params' is always ignored in overrides"),
                             ctx.TranslateString("Remove 'params' modifier"),
                             script => {
                    var p = (ParameterDeclaration)lastParam.Clone();
                    p.ParameterModifier = ParameterModifier.None;
                    script.Replace(lastParam, p);
                }
                             )
                {
                    IssueMarker = IssueMarker.GrayOut
                });
            }
Esempio n. 12
0
        ///
        /// <summary>Main for InheritanceClient</summary>
        /// <param name="args"></param>
        ///
        public static void Main(String[] args)
        {
            string uri = "tcp://localhost:4001";

            if (args.Length > 0)
            {
                uri = args[0];
            }

            MainInheritanceClient   implFactory = new MainInheritanceClient();
            RemoteInheritanceServer server      = InheritanceHelper.NewServer(uri, null, implFactory);

            server._TransportControl(TransportConsts.START_AND_WAIT_UP, 4000);

            // Insert Your Code Here
            //---------------------------------------------------------------------

            server._TransportControl(TransportConsts.STOP_AND_WAIT_DOWN, 4000);
        }
Esempio n. 13
0
        public IEnumerable <IMember> GetOverridableMembers()
        {
            // Disallow trying to override in e.g. interfaces or enums
            if (this.CurrentType.Kind != TypeKind.Class &&
                this.CurrentType.Kind != TypeKind.Struct)
            {
                return(new IMember[0]);
            }

            var candidates = this.CurrentType
                             .GetMembers(m => (m.IsVirtual || m.IsAbstract) && m.IsOverridable).ToArray();

            var overridden = this.CurrentType
                             .GetMembers(m => m.IsOverride &&
                                         m.DeclaringTypeDefinition == currentTypeDefinition)
                             .SelectMany(m => InheritanceHelper.GetBaseMembers(m, true));

            return(candidates.Except(overridden));
        }
Esempio n. 14
0
        private static CompilerRule[] GetVirtualMemberRules(IEmitter emitter, IEntity entity)
        {
            if (entity is IMember member)
            {
                if (member.IsOverride)
                {
                    var baseMember = InheritanceHelper.GetBaseMember(member);
                    return(new[] { Rules.Get(emitter, baseMember) });
                }

                if (member.ImplementedInterfaceMembers.Count > 0)
                {
                    var interfaceMember = member.ImplementedInterfaceMembers.First();
                    return(Rules.GetClassRules(emitter, interfaceMember.DeclaringTypeDefinition));
                }
            }

            return(null);
        }
            void VisitParameterizedEntityDeclaration(string memberType, EntityDeclaration entityDeclaration, AstNodeCollection <ParameterDeclaration> parameters)
            {
                // Ignore explicit interface implementations (those should have no optional parameters as there can't be any direct calls)
                if (!entityDeclaration.GetChildByRole(EntityDeclaration.PrivateImplementationTypeRole).IsNull)
                {
                    return;
                }
                //Override is not strictly necessary because methodDeclaration
                //might still implement an interface member
                var memberResolveResult = ctx.Resolve(entityDeclaration) as MemberResolveResult;

                if (memberResolveResult == null)
                {
                    return;
                }
                var member      = (IParameterizedMember)memberResolveResult.Member;
                var baseMembers = InheritanceHelper.GetBaseMembers(member, true).ToList();

                foreach (IParameterizedMember baseMember in baseMembers)
                {
                    if (baseMember.IsOverride || baseMember.DeclaringType.Kind == TypeKind.Interface)
                    {
                        continue;
                    }
                    CompareMethods(memberType, parameters, member, baseMember);
                    return;
                }
                // only check 1 interface method -> multiple interface implementations could lead to deault value conflicts
                // possible other solutions: Skip the interface check entirely
                var interfaceBaseMethods = baseMembers.Where(b => b.DeclaringType.Kind == TypeKind.Interface).ToList();

                if (interfaceBaseMethods.Count == 1)
                {
                    foreach (IParameterizedMember baseMember in interfaceBaseMethods)
                    {
                        if (baseMember.DeclaringType.Kind == TypeKind.Interface)
                        {
                            CompareMethods(memberType, parameters, member, baseMember);
                        }
                    }
                }
            }
Esempio n. 16
0
        IEnumerable <IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
        {
            var token  = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
            var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;

            if (!type.GetAllBaseTypeDefinitions()
                .Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module))
            {
                yield break;
            }

            foreach (var @event in type.GetEvents(options: GetMemberOptions.ReturnMemberDefinitions))
            {
                if (InheritanceHelper.GetBaseMembers(@event, true)
                    .Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module))
                {
                    yield return(@event);
                }
            }
        }
        IEnumerable <IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type)
        {
            var token = analyzedEntity.MetadataToken;
            var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
            var module             = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
            var allTypes           = type.GetAllBaseTypeDefinitions();

            if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
            {
                yield break;
            }

            foreach (var method in type.Methods)
            {
                var baseMembers = InheritanceHelper.GetBaseMembers(method, true);
                if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
                {
                    yield return(method);
                }
            }
        }
Esempio n. 18
0
            void CheckTypeCast(Expression typeCastNode, Expression expr, TextLocation castStart, TextLocation castEnd)
            {
                var outerTypeCastNode = typeCastNode;

                while (outerTypeCastNode.Parent != null && outerTypeCastNode.Parent is ParenthesizedExpression)
                {
                    outerTypeCastNode = (Expression)outerTypeCastNode.Parent;
                }
                IMember accessingMember;
                var     expectedType = GetExpectedType(outerTypeCastNode, out accessingMember);
                var     exprType     = ctx.Resolve(expr).Type;

                if (expectedType.Kind == TypeKind.Interface && IsExplicitImplementation(exprType, expectedType, outerTypeCastNode))
                {
                    return;
                }
                var baseTypes = exprType.GetAllBaseTypes().ToList();

                if (!baseTypes.Any(t => t.Equals(expectedType)))
                {
                    return;
                }

                // check if the called member doesn't change it's virtual slot when changing types
                if (accessingMember != null)
                {
                    var baseMember = InheritanceHelper.GetBaseMember(accessingMember);
                    foreach (var bt in baseTypes)
                    {
                        foreach (var member in bt.GetMembers(m => m.Name == accessingMember.Name))
                        {
                            if (InheritanceHelper.GetBaseMember(member) != baseMember)
                            {
                                return;
                            }
                        }
                    }
                }
                AddIssue(outerTypeCastNode, typeCastNode, expr, castStart, castEnd);
            }
        private QuickFixResponse GetMemberResponse(ITypeResolveContext rctx, MemberResolveResult resolveResult)
        {
            var quickFixes = new List <QuickFix>();

            //TODO: we don't need to scan all types in all projects
            foreach (ITypeDefinition type in GetAllTypes(rctx))
            {
                if (type != null)
                {
                    IMember member =
                        InheritanceHelper.GetDerivedMember(resolveResult.Member, type);
                    if (member != null)
                    {
                        var quickFix = QuickFix.ForFirstLineInRegion
                                           (member.MemberDefinition.Region
                                           , _solution.GetFile(type.Region.FileName));
                        quickFixes.Add(quickFix);
                    }
                }
            }
            return(new QuickFixResponse(quickFixes));
        }
Esempio n. 20
0
        public static IAttribute GetInheritedAttribute(IMember member, string attrName)
        {
            foreach (var attr in member.Attributes)
            {
                if (attr.AttributeType.FullName == attrName)
                {
                    return(attr);
                }
            }

            if (member.IsOverride)
            {
                member = InheritanceHelper.GetBaseMember(member);

                if (member != null)
                {
                    return(Helpers.GetInheritedAttribute(member, attrName));
                }
            }

            return(null);
        }
Esempio n. 21
0
        public static string GetMethodName(IMethod method)
        {
            if (!method.IsPublic)
            {
                return(null);
            }

            string           name             = null;
            MethodDefinition methodDefinition = GetMethodDefinition(method);

            if (methodDefinition != null)
            {
                var info = methods_.GetOrDefault(methodDefinition);
                if (info != null)
                {
                    name = info.Name;
                }
            }
            if (name == null)
            {
                if (method.IsOverride)
                {
                    IMethod baseMethod = (IMethod)InheritanceHelper.GetBaseMember(method);
                    name = GetMethodName(baseMethod);
                }
                else if (method.ImplementedInterfaceMembers.Count > 0)
                {
                    foreach (IMethod baseMethod in method.ImplementedInterfaceMembers)
                    {
                        name = GetMethodName(baseMethod);
                        if (name != null)
                        {
                            break;
                        }
                    }
                }
            }
            return(name);
        }
Esempio n. 22
0
        protected override CodeAction GetAction(RefactoringContext context, MethodDeclaration node)
        {
            if (node == null || !node.HasModifier(Modifiers.Override))
            {
                return(null);
            }
            if (!node.NameToken.Contains(context.Location))
            {
                return(null);
            }

            IMethod resolvedMember = (IMethod)(context.Resolve(node) as MemberResolveResult).Member;

            if (resolvedMember == null)
            {
                return(null);
            }

            IMethod originalMember = (IMethod)InheritanceHelper.GetBaseMember(resolvedMember);

            if (originalMember == null || originalMember.Documentation == null)
            {
                return(null);
            }
            string comments = originalMember.Documentation.ToString();

            if (string.IsNullOrEmpty(comments))
            {
                return(null);
            }

            string[] lines = comments.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
            return(new CodeAction(context.TranslateString("Copy comments from base"), script => {
                foreach (string co in lines)
                {
                    script.InsertBefore(node, new Comment(co, CommentType.Documentation));
                }
            }, node.NameToken));
        }
Esempio n. 23
0
            public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
            {
                if (!methodDeclaration.HasModifier(Modifiers.Override))
                {
                    return;
                }
                var lastParam = methodDeclaration.Parameters.LastOrDefault();

                if (lastParam == null || lastParam.ParameterModifier == ParameterModifier.Params)
                {
                    return;
                }
                var type = lastParam.Type as ComposedType;

                if (type == null || !type.ArraySpecifiers.Any())
                {
                    return;
                }
                var rr = ctx.Resolve(methodDeclaration) as MemberResolveResult;

                if (rr == null)
                {
                    return;
                }
                var baseMember = InheritanceHelper.GetBaseMember(rr.Member) as IMethod;

                if (baseMember == null || baseMember.Parameters.Count == 0 || !baseMember.Parameters.Last().IsParams)
                {
                    return;
                }
                AddIssue(
                    lastParam.NameToken,
                    string.Format(ctx.TranslateString("Base method '{0}' has a 'params' modifier"), baseMember.FullName),
                    ctx.TranslateString("Add 'params' modifier"),
                    script => {
                    script.ChangeModifier(lastParam, ParameterModifier.Params);
                }
                    );
            }
Esempio n. 24
0
        IEnumerable <IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
        {
            if (!analyzedEntity.DeclaringType.GetAllBaseTypeDefinitions()
                .Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken && t.ParentModule.PEFile == type.ParentModule.PEFile))
            {
                yield break;
            }

            foreach (var @event in type.Events)
            {
                if ([email protected])
                {
                    continue;
                }
                if (InheritanceHelper.GetBaseMembers(@event, false)
                    .Any(p => p.MetadataToken == analyzedEntity.MetadataToken &&
                         p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile))
                {
                    yield return(@event);
                }
            }
        }
Esempio n. 25
0
            void CheckAutomaticToStringCallers(InvocationExpression invocationExpression, IMember member)
            {
                if (member.IsOverride)
                {
                    member = InheritanceHelper.GetBaseMember(member);
                    if (member == null)
                    {
                        return;
                    }
                }
                var key = new Tuple <string, int>(member.ReflectionName, invocationExpression.Arguments.Count);
                Tuple <int, int> checkInfo;

                if (membersCallingToString.TryGetValue(key, out checkInfo))
                {
                    var arguments = invocationExpression.Arguments.ToList();
                    for (int i = checkInfo.Item1; i < Math.Min(invocationExpression.Arguments.Count, checkInfo.Item2 + 1); ++i)
                    {
                        CheckExpressionInAutoCallContext(arguments[i]);
                    }
                }
            }
Esempio n. 26
0
 /// <summary>
 /// Gets the attributes on the entity.
 /// </summary>
 /// <param name="entity">The entity on which the attributes are declared.</param>
 /// <param name="inherit">
 /// Specifies whether attributes inherited from base classes and base members
 /// (if the given <paramref name="entity"/> in an <c>override</c>)
 /// should be returned.
 /// </param>
 /// <returns>
 /// Returns the list of attributes that were found.
 /// If inherit is true, attributes from the entity itself are returned first;
 /// followed by attributes inherited from the base entity.
 /// </returns>
 public static IEnumerable <IAttribute> GetAttributes(this IEntity entity, bool inherit)
 {
     if (inherit)
     {
         if (entity is ITypeDefinition td)
         {
             return(InheritanceHelper.GetAttributes(td));
         }
         else if (entity is IMember m)
         {
             return(InheritanceHelper.GetAttributes(m));
         }
         else
         {
             throw new NotSupportedException("Unknown entity type");
         }
     }
     else
     {
         return(entity.GetAttributes());
     }
 }
Esempio n. 27
0
        public virtual bool IsTemplateOverride(IMember member)
        {
            if (member.IsOverride)
            {
                member = InheritanceHelper.GetBaseMember(member);

                if (member != null)
                {
                    var  inline   = this.Emitter.GetInline(member);
                    bool isInline = !string.IsNullOrWhiteSpace(inline);
                    if (isInline)
                    {
                        if (member.IsOverride)
                        {
                            return(this.IsTemplateOverride(member));
                        }
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 28
0
        bool IsAppropriateCallTarget(IMember expectedTarget, IMember actualTarget, bool isVirtCall)
        {
            if (expectedTarget.Equals(actualTarget))
            {
                return(true);
            }

            if (isVirtCall && actualTarget.IsOverride)
            {
                foreach (var possibleTarget in InheritanceHelper.GetBaseMembers(actualTarget, false))
                {
                    if (expectedTarget.Equals(possibleTarget))
                    {
                        return(true);
                    }
                    if (!possibleTarget.IsOverride)
                    {
                        break;
                    }
                }
            }
            return(false);
        }
Esempio n. 29
0
        /// <summary>
        /// Gets the XML documentation element for the specified entity.
        /// Returns null if no documentation is found.
        /// </summary>
        public static XmlDocumentationElement Get(IEntity entity, bool inheritDocIfMissing = true)
        {
            var documentationComment = entity.Documentation;

            if (documentationComment != null)
            {
                return(Create(documentationComment, entity));
            }

            IMember member = entity as IMember;

            if (inheritDocIfMissing && member != null)
            {
                foreach (IMember baseMember in InheritanceHelper.GetBaseMembers(member, includeImplementedInterfaces: true))
                {
                    documentationComment = baseMember.Documentation;
                    if (documentationComment != null)
                    {
                        return(Create(documentationComment, baseMember));
                    }
                }
            }
            return(null);
        }
Esempio n. 30
0
        IList <IMember> FindImplementedInterfaceMembers()
        {
            if (unresolved.IsExplicitInterfaceImplementation)
            {
                List <IMember> result = new List <IMember>();
                foreach (var memberReference in unresolved.ExplicitInterfaceImplementations)
                {
                    IMember member = memberReference.Resolve(context);
                    if (member != null)
                    {
                        result.Add(member);
                    }
                }
                return(result.ToArray());
            }
            else if (unresolved.IsStatic || !unresolved.IsPublic || DeclaringTypeDefinition == null || DeclaringTypeDefinition.Kind == TypeKind.Interface)
            {
                return(EmptyList <IMember> .Instance);
            }
            else
            {
                // TODO: implement interface member mappings correctly
                var result = InheritanceHelper.GetBaseMembers(this, true)
                             .Where(m => m.DeclaringTypeDefinition != null && m.DeclaringTypeDefinition.Kind == TypeKind.Interface)
                             .ToArray();

                IEnumerable <IMember> otherMembers = DeclaringTypeDefinition.Members;
                if (SymbolKind == SymbolKind.Accessor)
                {
                    otherMembers = DeclaringTypeDefinition.GetAccessors(options: GetMemberOptions.IgnoreInheritedMembers);
                }
                result = result.Where(item => !otherMembers.Any(m => m.IsExplicitInterfaceImplementation && m.ImplementedInterfaceMembers.Contains(item))).ToArray();

                return(result);
            }
        }