void HandleMember(Expression issueAnchor, Expression targetExpression, IMember member, ResolveResult targetResolveResult)
            {
                var typeResolveResult = targetResolveResult as TypeResolveResult;

                if (typeResolveResult == null)
                {
                    return;
                }
                if (!member.IsStatic)
                {
                    return;
                }
                if (typeResolveResult.Type.Equals(member.DeclaringType))
                {
                    return;
                }
                // check whether member.DeclaringType contains the original type
                // (curiously recurring template pattern)
                var v = new ContainsTypeVisitor(typeResolveResult.Type.GetDefinition());

                member.DeclaringType.AcceptVisitor(v);
                if (v.IsContained)
                {
                    return;
                }
                AddIssue(new CodeIssue(issueAnchor, context.TranslateString("Static method invoked via derived type"),
                                       GetAction(context, targetExpression, member)));
            }
			void HandleMember(Expression issueAnchor, Expression targetExpression, IMember member, ResolveResult targetResolveResult)
			{
				var typeResolveResult = targetResolveResult as TypeResolveResult;
				if (typeResolveResult == null)
					return;
				if (!member.IsStatic)
					return;
				if (typeResolveResult.Type.Equals(member.DeclaringType))
					return;
				// check whether member.DeclaringType contains the original type
				// (curiously recurring template pattern)
				var v = new ContainsTypeVisitor(typeResolveResult.Type.GetDefinition());
				member.DeclaringType.AcceptVisitor(v);
				if (v.IsContained)
					return;
				AddIssue(issueAnchor, context.TranslateString("Static method invoked via derived type"),
				         GetAction(context, targetExpression, member));
			}