Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

edu.ucsb.ccs.jcontractor.transformation
Class AppendReturnTransformation  view AppendReturnTransformation download AppendReturnTransformation.java

java.lang.Object
  extended byedu.ucsb.ccs.jcontractor.transformation.Transformation
      extended byedu.ucsb.ccs.jcontractor.transformation.ContractTransformation
          extended byedu.ucsb.ccs.jcontractor.transformation.AppendReturnTransformation

public class AppendReturnTransformation
extends ContractTransformation

A transformation to append code to load the method's result from a local variable, and return. This must be done after processing with ReplaceReturnInstructionTransformation. This transformation requires that ReplaceReturnInstructionTransformation has saved the method's return value to a local variable, and placed the index of this variable into the shared data table.

This transformation is only required where ReplaceReturnInstructionTransformation is required, so it transforms only methods for which either the postcondition or exit invariant is checkable.

       Before:                        After:
   -----------                    --------------
   0:  iload_0                    0: iload_0
   1:  ifeq                       1: ifeq
   2:  iconst_0                   2: iconst_0
   3:  goto #6                    3: goto #6
   4:  iconst_1                   4: iconst_1
   5:  goto #6                    5: goto #6
   6:  nop                        6: nop
   7:  [check exit condition]     7: [check exit condition]
                                  8: iload_2
                                  9: ireturn
 

Version:
$Id: AppendReturnTransformation.java,v 1.7 2002/05/12 00:09:16 parkera Exp $

Field Summary
 
Fields inherited from class edu.ucsb.ccs.jcontractor.transformation.Transformation
transformer
 
Constructor Summary
AppendReturnTransformation()
           
 
Method Summary
 boolean acceptClass()
          Determine if the current class should be processed.
 void transformClass()
          Does nothing.
 void transformMethod(org.apache.bcel.generic.MethodGen mg)
          Append code to load the method's return value from a local variable and return.
 
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 edu.ucsb.ccs.jcontractor.transformation.Transformation
acceptClass_Precondition, getTransformer_Postcondition, getTransformer, setTransformer_Postcondition, setTransformer_Precondition, setTransformer, transform_Precondition, transform, transformClass_Precondition, transformMethod_Precondition
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AppendReturnTransformation

public AppendReturnTransformation()
Method Detail

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)
Append code to load the method's return value from a local variable and return. This transformation is only required where ReplaceReturnInstructionTransformation is required, so it transforms only methods for which either the postcondition or exit invariant is checkable. The index of the local variable that holds the return value is saved in the shared data table as ReplaceReturnInstructionTransformation .SHARED_INFO_RESULT_INDEX_KEY + mg.getName() + mg.getSignature().

Specified by:
transformMethod in class Transformation

transformClass

public void transformClass()
Does nothing. This transformation operates only on methods.

Specified by:
transformClass in class Transformation