ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR); /* local variable | this | */ Bytecode code = new Bytecode(cp, 2, 1); // aload_0 // load this code.addAload(0); // getfield // get field "$JAVASSIST_CALLBACK" defined already code.addOpcode(Opcode.GETFIELD); int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR); code.addIndex(field_index); // areturn // return the value of the field code.addOpcode(Opcode.ARETURN); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo);
ConstPool cp = classfile.getConstPool(); int this_class_index = cp.getThisClassInfo(); MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME, SETFIELDHANDLER_METHOD_DESCRIPTOR); /* local variables | this | callback | */ Bytecode code = new Bytecode(cp, 3, 3); // aload_0 // load this code.addAload(0); // aload_1 // load callback code.addAload(1); // putfield // put field "$JAVASSIST_CALLBACK" defined already code.addOpcode(Opcode.PUTFIELD); int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR); code.addIndex(field_index); // return code.addOpcode(Opcode.RETURN); minfo.setCodeAttribute(code.toCodeAttribute()); minfo.setAccessFlags(AccessFlag.PUBLIC); classfile.addMethod(minfo);
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/core/src/main/java/org/hibernate/bytecode/javassist/FieldTransformer.java File path: /hibernate-distribution-3.3.2.GA/project/core/src/main/java/org/hibernate/bytecode/javassist/FieldTransformer.java
Method name: void addGetFieldHandlerMethod(ClassFile) Method name: void addSetFieldHandlerMethod(ClassFile)
Number of AST nodes: 12 Number of AST nodes: 13
1
ConstPool cp = classfile.getConstPool();
1
ConstPool cp = classfile.getConstPool();
2
		int this_class_index = cp.getThisClassInfo();
2
		int this_class_index = cp.getThisClassInfo();
3
		MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME,
3
		MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME,
4
		                                  GETFIELDHANDLER_METHOD_DESCRIPTOR);
4
		                                  SETFIELDHANDLER_METHOD_DESCRIPTOR);
5
		/* local variable | this | */
5
		/* local variables | this | callback | */
6
		Bytecode code = new Bytecode(cp, 2, 1);
6
		Bytecode code = new Bytecode(cp, 3, 3);
7
		// aload_0 // load this
7
		// aload_0 // load this
8
		code.addAload(0);
8
		code.addAload(0);
9
		// ge
9
		// aload_1 // load callback
10
		code.addAload(1);
10
tfield // get field "$JAVASSIST_CALLBACK" defined already
11
		// putfield // put field "$JAVASSIST_CALLBACK" defined already
11
		code.addOpcode(Opcode.GETFIELD);
12
		code.addOpcode(Opcode.PUTFIELD);
12
		int field_index = cp.addFieldrefInfo(this_class_index,
13
		int field_index = cp.addFieldrefInfo(this_class_index,
13
		                                     HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
14
		                                     HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
14
		code.addIndex(field_index);
15
		code.addIndex(field_index);
15
		// areturn // return the value of the field
16
		// return
16
		code.addOpcode(Opcode.ARETURN);
17
		code.addOpcode(Opcode.RETURN);
17
		minfo.setCodeAttribute(code.toCodeAttribute());
18
		minfo.setCodeAttribute(code.toCodeAttribute());
18
		minfo.setAccessFlags(AccessFlag.PUBLIC);
19
		minfo.setAccessFlags(AccessFlag.PUBLIC);
19
		classfile.addMethod(minfo);
20
		classfile.addMethod(minfo);
Summary
Number of common nesting structure subtrees1
Number of refactorable cases0
Number of non-refactorable cases1
Time elapsed for finding largest common nesting structure subtrees (ms)0.0
Clones locationClones are declared in the same class
Number of node comparisons113
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements12
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment1
    Time elapsed for statement mapping (ms)0.0
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    1
    ConstPool cp = classfile.getConstPool();
    1
    ConstPool cp = classfile.getConstPool();
    2
    int this_class_index = cp.getThisClassInfo();
    2
    int this_class_index = cp.getThisClassInfo();
    3
    MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR);
    3
    MethodInfo minfo = new MethodInfo(cp, GETFIELDHANDLER_METHOD_NAME, GETFIELDHANDLER_METHOD_DESCRIPTOR);
    3
    MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME, SETFIELDHANDLER_METHOD_DESCRIPTOR);
    Differences
    Expression1Expression2Difference
    GETFIELDHANDLER_METHOD_NAMESETFIELDHANDLER_METHOD_NAMEVARIABLE_NAME_MISMATCH
    GETFIELDHANDLER_METHOD_DESCRIPTORSETFIELDHANDLER_METHOD_DESCRIPTORVARIABLE_NAME_MISMATCH
    3
    MethodInfo minfo = new MethodInfo(cp, SETFIELDHANDLER_METHOD_NAME, SETFIELDHANDLER_METHOD_DESCRIPTOR);
    4
    Bytecode code = new Bytecode(cp, 2, 1);
    4
    Bytecode code = new Bytecode(cp, 2, 1);
    4
    Bytecode code = new Bytecode(cp, 3, 3);
    Differences
    Expression1Expression2Difference
    23LITERAL_VALUE_MISMATCH
    13LITERAL_VALUE_MISMATCH
    4
    Bytecode code = new Bytecode(cp, 3, 3);
    5
    code.addAload(0);
    5
    code.addAload(0);
                                            
    6
    code.addAload(1);
    6
    code.addOpcode(Opcode.GETFIELD);
    6
    code.addOpcode(Opcode.GETFIELD);
    7
    code.addOpcode(Opcode.PUTFIELD);
    Differences
    Expression1Expression2Difference
    GETFIELDPUTFIELDVARIABLE_NAME_MISMATCH
    7
    code.addOpcode(Opcode.PUTFIELD);
    7
    int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
    8
    int field_index = cp.addFieldrefInfo(this_class_index, HANDLER_FIELD_NAME, HANDLER_FIELD_DESCRIPTOR);
    8
    code.addIndex(field_index);
    9
    code.addIndex(field_index);
    9
    code.addOpcode(Opcode.ARETURN);
    9
    code.addOpcode(Opcode.ARETURN);
    10
    code.addOpcode(Opcode.RETURN);
    Differences
    Expression1Expression2Difference
    ARETURNRETURNVARIABLE_NAME_MISMATCH
    10
    code.addOpcode(Opcode.RETURN);
    10
    minfo.setCodeAttribute(code.toCodeAttribute());
    11
    minfo.setCodeAttribute(code.toCodeAttribute());
    11
    minfo.setAccessFlags(AccessFlag.PUBLIC);
    12
    minfo.setAccessFlags(AccessFlag.PUBLIC);
    12
    classfile.addMethod(minfo);
    13
    classfile.addMethod(minfo);
    Precondition Violations (1)
    Row Violation
    1Clone fragment #1 returns variables , while Clone fragment #2 returns variables code