sofya.mutator
Class MutationGenerator

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

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

Class that generates a mutation table (<class>.mut) that lists possible mutants for each input class file.

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
MutationGenerator(MutatorConfiguration mc)
          Creates a new mutation table generator.
 
Method Summary
 MutationTable generateMutations()
          Generates mutations for the loaded class using the mutation operators enabled in the mutator configuration.
 void generateMutations(MutationTable table)
          Generates mutations for the loaded class using the mutation operators enabled in the mutator configuration.
 java.lang.String getClassName()
          Gets the fully qualified name of the currently loaded class.
 void initialize()
          Initializes the mutation table generator.
 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 mutation generator.
protected  void parseClass(java.lang.String className, java.io.InputStream source)
          Parses a class file to initialize the data structures used by the mutation generator.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MutationGenerator

public MutationGenerator(MutatorConfiguration mc)
Creates a new mutation table generator.

Parameters:
mc - Configuration for the new mutation table generator.
Method Detail

initialize

public void initialize()
                throws MutationException
Initializes the mutation table generator.

This causes all of the mutation operators to be loaded and configured.

Throws:
MutationException - If a mutation operator implementation does not provide the necessary support for proper loading.

getClassName

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

Returns:
The fully qualified name of the currently 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 void parseClass(java.lang.String className,
                          java.io.InputStream source)
                   throws BadFileFormatException,
                          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:
BadFileFormatException - If the class to be loaded is an interface.
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.

generateMutations

public void generateMutations(MutationTable table)
Generates mutations for the loaded class using the mutation operators enabled in the mutator configuration.

Parameters:
table - Mutation table to record the generated mutations.

generateMutations

public MutationTable generateMutations()
Generates mutations for the loaded class using the mutation operators enabled in the mutator configuration.

Returns:
A new mutation table containing the generated mutations.

main

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