The description of this rule seems to say that this would be OK condition if the class only had protected or private constructors, We actually wanted to allow for that case, but the rule as provided did not allow. I updated a custom version with this xpath to allow abstract class with no abstract methods if there are no public constructors. You should make this something that could be turned on/off if there is a desire to maintain backward compatibility. Here is my xpath
<property name="xpath">
<value><![CDATA[
//ClassOrInterfaceDeclaration
[@Abstract='true'
and count( .//MethodDeclaration[@Abstract='true'] )=0 ]
[count(ImplementsList)=0]
[count(.//ExtendsList)=0]
[count(ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Public='true']) > 0 ]
[count(ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/ConstructorDeclaration[@Protected='true' or Private='true' or @PackagePrivate='true']) = 0]
]]>