sofya.mutator
Class Mutator

java.lang.Object
  extended by sofya.mutator.Mutator
All Implemented Interfaces:
org.apache.bcel.Constants

public class Mutator
extends java.lang.Object
implements org.apache.bcel.Constants

This class generates mutants from a mutation table, with various selection criteria.

Version:
06/09/2006
Author:
Hyunsook Do, Alex Kinneer

Field Summary
 
Fields inherited from interface org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_RUNTIMEINVISIBLE_ANNOTATIONS, ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_Long, CONSTANT_Methodref, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
 
Constructor Summary
Mutator()
          Creates a new mutator.
Mutator(MutationSelector selector)
          Creates a new mutator.
Mutator(MutationSelector selector, Verifier verifier, IRG classGraph)
          Creates a new mutator.
 
Method Summary
 java.lang.String getClassName()
          Gets the fully qualified name of the currently loaded class.
protected  void initClass(org.apache.bcel.classfile.JavaClass clazz)
           
 void loadClass(java.lang.String className)
          Loads a new class.
 void loadClass(java.lang.String className, java.io.InputStream source)
          Loads a new class from a given input stream.
static void main(java.lang.String[] argv)
          Entry point for the mutator.
 void mutate()
          Mutates the currently loaded class.
protected  org.apache.bcel.classfile.JavaClass parseClass(java.lang.String className, java.io.InputStream source)
          Parses a class file to initialize the data structures used by the mutation generator.
 void writeClass(java.io.OutputStream dest)
          Writes the mutated class file to a stream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Mutator

public Mutator()
Creates a new mutator.


Mutator

public Mutator(MutationSelector selector)
Creates a new mutator.

Parameters:
selector - Selector providing the mutation selection policy.

Mutator

public Mutator(MutationSelector selector,
               Verifier verifier,
               IRG classGraph)
Creates a new mutator.

Parameters:
selector - Selector providing the mutation selection policy.
verifier - Verifier to be used for verifying mutants.
Method Detail

getClassName

public java.lang.String getClassName()
Gets the fully qualified name of the currently loaded class.

Returns:
The fully qualified name of the loaded class.

loadClass

public void loadClass(java.lang.String className)
               throws BadFileFormatException,
                      java.io.FileNotFoundException,
                      java.io.IOException,
                      java.lang.ClassFormatError,
                      java.lang.Exception
Loads a new class.

Parameters:
className - Name of the class to be loaded.
Throws:
BadFileFormatException
java.io.FileNotFoundException
java.io.IOException
java.lang.ClassFormatError
java.lang.Exception

loadClass

public void loadClass(java.lang.String className,
                      java.io.InputStream source)
               throws BadFileFormatException,
                      java.io.IOException,
                      java.lang.ClassFormatError,
                      java.lang.Exception
Loads a new class from a given input stream.

Parameters:
className - Name of the class to be loaded.
source - Stream from which the class is to be loaded.
Throws:
BadFileFormatException
java.io.IOException
java.lang.ClassFormatError
java.lang.Exception

parseClass

protected org.apache.bcel.classfile.JavaClass parseClass(java.lang.String className,
                                                         java.io.InputStream source)
                                                  throws java.io.IOException,
                                                         java.lang.ClassFormatError
Parses a class file to initialize the data structures used by the mutation generator.

Parameters:
className - Name of the class to be parsed.
source - Stream from which the class should be parsed. Permitted to be null in which case this method will attempt to load the class from the classpath or directly as an absolute path.
Throws:
java.io.IOException - If the class cannot be found or for any other I/O error that prevents successful parsing of the class.
java.lang.ClassFormatError - If the class is not a valid class file.

initClass

protected void initClass(org.apache.bcel.classfile.JavaClass clazz)
                  throws BadFileFormatException
Throws:
BadFileFormatException - If the class to be loaded is an interface.

writeClass

public void writeClass(java.io.OutputStream dest)
                throws java.io.IOException
Writes the mutated class file to a stream. Typically the stream should be pointed to a file.

Parameters:
dest - Stream to which the mutated class file should be written.
Throws:
java.io.IOException - If there is an error writing to the stream.

mutate

public void mutate()
            throws MutationException
Mutates the currently loaded class.

Throws:
MutationException - If the mutation table for the class cannot be read, the mutation table to record applied mutatations cannot be created, or if application of a mutation fails.

main

public static void main(java.lang.String[] argv)
Entry point for the mutator.