Java


JAVA.CLASS.CLONE.CCSM : Clone Call to Super is Missing (Java)

Summary

Method clone() does not call super.clone().

The clone() method is used to generate a clone of an object, that is, a distinct instance with the same behavior as the original one. The default implementation in java.lang.Object checks that the object to clone either implements the java.lang.Cloneable interface or throws a java.lang.CloneNotSupportedException.

In order to clone an object it is generally sufficient to implement java.lang.Cloneable and use the default implementation of clone(). It is also possible to override that default implementation. Note that a class that inherits the default implementation allows its subclasses to implement java.lang.Cloneable and clone its instances.

Properties

Class Name Clone Call to Super is Missing (Java)
Significance reliability
Mnemonic JAVA.CLASS.CLONE.CCSM
Categories
CWE CWE:580 clone() Method Without super.clone()
CERT-Java CERT-Java:MET53-J Ensure that the clone() method calls super.clone()
Availability Available for Java only.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Clone Call to Super is Missing (Java)"

Example

// TestClone.java
public class CloneWithoutSuper implements Cloneable {
    @override
    public Object clone() throws CloneNotSupportedException { // Clone call to super is missing (Java) warning issued here
        Object returnMe = new CloneWithoutSuper();
        // ...
    }
}

public class MyClass extends CloneWithoutSuper{
    @override
    public Object clone() throws CloneNotSupportedException {
        Object returnMe = super.clone();
        // ...
    }
}

Resolution

Check that clone() is implemented calling super.clone() instead of creating a new object of the class in which is declared.

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.