This rule is defined by the following XPath expression:
//ClassOrInterfaceDeclaration [not(./ImplementsList/ClassOrInterfaceType [@Image='Cloneable'])] /ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration [MethodDeclaration [MethodDeclarator[@Image = 'clone' and count(FormalParameters/*) = 0]] [not((../MethodDeclaration[@Final = 'true'] or ancestor::ClassOrInterfaceDeclaration[1][@Final = 'true']) and Block[count(BlockStatement)=1] /BlockStatement/Statement/ThrowStatement/Expression /PrimaryExpression/PrimaryPrefix/AllocationExpression /ClassOrInterfaceType[@Image = 'CloneNotSupportedException'])]]
Example:
public class MyClass { public Object clone() throws CloneNotSupportedException { return foo; } }