Index: BadRecursiveInvocationRule.cs =================================================================== --- BadRecursiveInvocationRule.cs (revision 66711) +++ BadRecursiveInvocationRule.cs (working copy) @@ -42,6 +42,12 @@ string mDecl = method.DeclaringType.Name; bool argsEqual = (mref.Parameters.Count == method.Parameters.Count); + bool namesEqual = rName.Equals(mName); + // Don't need to compare declaring types if this is a + // virtual call and the recieving object is the same + bool typesEqual = + insn.OpCode.Value == OpCodeConstants.Callvirt || + rDecl.Equals(mDecl); if(argsEqual) { for(int j = 0; j < mref.Parameters.Count; j++) { ParameterDefinition p1 = @@ -58,7 +64,7 @@ argsEqual = false; } } - if(rName.Equals(mName) && rDecl.Equals(mDecl) && argsEqual) { + if(namesEqual && typesEqual && argsEqual) { if(LoadsVerbatimArgs(method, i)) { MessageCollection messages = new MessageCollection(); string etype = method.DeclaringType.FullName;