java.lang.Object
edu.ucsb.ccs.jcontractor.transformation.Transformation
edu.ucsb.ccs.jcontractor.transformation.ContractTransformation
edu.ucsb.ccs.jcontractor.transformation.LockCloneTransformation
- public class LockCloneTransformation
- extends ContractTransformation
Transformation to disable contract checking while in the
clone()
method. clone()
is used to
implement OLD references, and checking contracts on method called
from clone()
could require more calls to
clone()
. This leads to infinite recursion, which
would be bad. To prevent this scenario, jContractor does not check
contracts on any methods called from clone()
.
Note: Strictly speaking, all that is required is to not check
contracts that refer to OLD. However, just supressing all contract
checks is much easier to implement.
- Version:
- $Id: LockCloneTransformation.java,v 1.4 2002/07/11 19:42:45 parkera Exp $
Methods inherited from class edu.ucsb.ccs.jcontractor.transformation.ContractTransformation |
append, canCheckEntryInvariant, canCheckExitInvariant_Precondition, canCheckExitInvariant, canCheckPostcondition, canCheckPrecondition, canHaveInheritedContract_Precondition, canHaveInheritedContract, canHaveInvariant_Precondition, canHaveInvariant, canHavePostcondition_Precondition, canHavePostcondition, canHavePrecondition_Precondition, canHavePrecondition, canReferenceOld_Precondition, canReferenceOld, contractsCheckable_Precondition, contractsCheckable, createLoadArguments_Postcondition, createLoadArguments_Precondition, createLoadArguments, entryInvariantCheckable_Precondition, findMethod, findMethod, findMethodIndex, getContractClassName_Postcondition, getContractClassName_Postcondition, getContractClassName_Precondition, getContractClassName_Precondition, getContractClassName, getContractClassName, getInvariantMethodName_Postcondition, getInvariantMethodName_Precondition, getInvariantMethodName, getInvariantMethodSignature_Postcondition, getInvariantMethodSignature_Precondition, getInvariantMethodSignature, getPostconditionMethodName_Postcondition, getPostconditionMethodName_Precondition, getPostconditionMethodName, getPostconditionMethodSignature_Postcondition, getPostconditionMethodSignature_Precondition, getPostconditionMethodSignature, getPreconditionMethodName_Postcondition, getPreconditionMethodName_Precondition, getPreconditionMethodName, getPreconditionMethodSignature_Postcondition, getPreconditionMethodSignature_Precondition, getPreconditionMethodSignature, hasExternalContract, hasInterfaceContract, hasSuperClassContract, isContractClass_Postcondition, isContractClass_Precondition, isContractClass, isContractMethod_Postcondition, isContractMethod_Precondition, isContractMethod, isInvariantMethod_Precondition, isInvariantMethod, isPostconditionMethod_Postcondition, isPostconditionMethod, isPreconditionMethod_Precondition, isPreconditionMethod, postconditionCheckable_Precondition, preconditionCheckable_Precondition, prepend, prependToConstructor_Precondition, prependToConstructor, replaceInstruction, replaceInstruction, replaceReturnInstructions_Precondition, replaceReturnInstructions |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
LockCloneTransformation
public LockCloneTransformation()
acceptClass
public boolean acceptClass()
- Determine if the current class should be processed. All classes
in which contracts are checkable are processed.
- Specified by:
acceptClass
in class Transformation
transformMethod
public void transformMethod(org.apache.bcel.generic.MethodGen mg)
- Add code to a
clone()
method that will suppress
contract checks inside the method. Has no effect if the method
is not named "clone", with no arguments, and a Object return
type.
- Specified by:
transformMethod
in class Transformation
transformClass
public void transformClass()
- Does nothing. This transformation operates only on methods.
- Specified by:
transformClass
in class Transformation