if (hasCloneMethod && !invokesSuperClone && !isFinal) {
if (hasCloneMethod && !invokesSuperClone && !isFinal && obj.isPublic()) {
  public void visitAfter(JavaClass obj)     {	if (!check) return;	if (implementsCloneableDirectly && !hasCloneMethod) {		if (!referencesCloneMethod)                        bugReporter.reportBug(				new BugInstance("CN_IDIOM", NORMAL_PRIORITY)                                .addClass(this));		}	if (hasCloneMethod && !invokesSuperClone && !isFinal) {		bugReporter.reportBug(new BugInstance("CN_IDIOM_NO_SUPER_CALL", NORMAL_PRIORITY)			.addClass(this)			.addMethod(cloneMethodAnnotation)			);	}	/*	if (!isCloneable && hasCloneMethod) {		if (throwsExceptions) 		System.out.println("has public clone method that throws exceptions and class is not Cloneable: " + betterClassName) ;		else System.out.println("has public clone method but is not Cloneable: " + betterClassName) ;		}	*/	}