try { CloneStreamMaster master = new CloneStreamMaster(istream); InputStream inputStream = master.getClone(); byte[] md5sum = MD5SumHelper.createMD5(inputStream); // close stream inputStream.close(); // get new inputstream inputStream = master.getClone(); Message message = new Message(inputStream, list, md5sum); // check if this message was already learned // -> only add if this is not the case if (db.MD5SumExists(md5sum)) { // message already exists // --> correct token data filter.correctMessageAsSpam(message); } else { // new message filter.trainMessageAsSpam(message); } // close stream inputStream.close(); // set dirty flag hasChanged = true; } catch (IOException e1) { LOG.severe(e1.getMessage()); if (Logging.DEBUG) e1.printStackTrace(); } catch (NoSuchAlgorithmException nsae) { }
try { CloneStreamMaster master = new CloneStreamMaster(istream); InputStream inputStream = master.getClone(); byte[] md5sum = MD5SumHelper.createMD5(inputStream); // close stream inputStream.close(); // get new inputstream inputStream = master.getClone(); Message message = new Message(inputStream, list, md5sum); // check if this message was already learned if (db.MD5SumExists(md5sum)) { // message already exists // --> correct token data filter.correctMessageAsHam(message); } else { // new message filter.trainMessageAsHam(message); } // close stream inputStream.close(); // set dirty flag hasChanged = true; } catch (IOException e1) { LOG.severe(e1.getMessage()); if (Logging.DEBUG) e1.printStackTrace(); } catch (NoSuchAlgorithmException nsae) { }
Clone fragments detected by clone detection tool
File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/spam/MacchiatoPlugin.java File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/spam/MacchiatoPlugin.java
Method name: void trainMessageAsSpam(IMailbox, Object) Method name: void trainMessageAsHam(IMailbox, Object)
Number of AST nodes: 12 Number of AST nodes: 12
1
try {
1
try {
2
			CloneStreamMaster master = new CloneStreamMaster(istream);
2
			CloneStreamMaster master = new CloneStreamMaster(istream);
3
			InputStream inputStream = master.getClone();
3
			InputStream inputStream = master.getClone();
4
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
4
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
5
			// close stream
5
			// close stream
6
			inputStream.close();
6
			inputStream.close();
7
			// get new inputstream
7
			// get new inputstream
8
			inputStream = master.getClone();
8
			inputStream = master.getClone();
9
			Message message = new Message(inputStream, list, md5sum);
9
			Message message = new Message(inputStream, list, md5sum);
10
			// check if this message was already learned
10
			// check if this message was already learned
11
			// -> only add if this is not the case
11
			
12
			if (db.MD5SumExists(md5sum)) {
12
if (db.MD5SumExists(md5sum)) {
13
				// message already exists
13
				// message already exists
14
				// --> correct token data
14
				// --> correct token data
15
				filter.correctMessageAsSpam(message);
15
				filter.correctMessageAsHam(message);
16
			} else {
16
			} else {
17
				// new message
17
				// new message
18
				filter.trainMessageAsSpam(message);
18
				filter.trainMessageAsHam(message);
19
			}
19
			}
20
			// close stream
20
			// close stream
21
			inputStream.close();
21
			inputStream.close();
22
			// set dirty flag
22
			// set dirty flag
23
			hasChanged = true;
23
			hasChanged = true;
24
		} catch (IOException e1) {
24
		} catch (IOException e1) {
25
			LOG.severe(e1.getMessage());
25
			LOG.severe(e1.getMessage());
26
			if (Logging.DEBUG)
26
			if (Logging.DEBUG)
27
				e1.printStackTrace();
27
				e1.printStackTrace();
28
		} catch (NoSuchAlgorithmException nsae) {
28
		} catch (NoSuchAlgorithmException nsae) {
29
		}
29
		}
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.4
Clones locationClones are declared in the same class
Number of node comparisons90
  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 fragment0
    Time elapsed for statement mapping (ms)4.5
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    9
    try
    9
    try
    10
    CloneStreamMaster master = new CloneStreamMaster(istream);
    10
    CloneStreamMaster master = new CloneStreamMaster(istream);
    11
    InputStream inputStream = master.getClone();
    11
    InputStream inputStream = master.getClone();
    12
    byte[] md5sum = MD5SumHelper.createMD5(inputStream);
    12
    byte[] md5sum = MD5SumHelper.createMD5(inputStream);
    13
    inputStream.close();
    13
    inputStream.close();
    14
    inputStream = master.getClone();
    14
    inputStream = master.getClone();
    15
    Message message = new Message(inputStream, list, md5sum);
    15
    Message message = new Message(inputStream, list, md5sum);
    16
    if (db.MD5SumExists(md5sum))
    16
    if (db.MD5SumExists(md5sum))
    17
    filter.correctMessageAsSpam(message);
    17
    filter.correctMessageAsSpam(message);
    17
    filter.correctMessageAsHam(message);
    Differences
    Expression1Expression2Difference
    correctMessageAsSpamcorrectMessageAsHamMETHOD_INVOCATION_NAME_MISMATCH
    Preondition Violations
    Expression filter.correctMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.correctMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.correctMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    Expression filter.correctMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    17
    filter.correctMessageAsHam(message);
    else
    else
    18
    filter.trainMessageAsSpam(message);
    18
    filter.trainMessageAsSpam(message);
    18
    filter.trainMessageAsHam(message);
    Differences
    Expression1Expression2Difference
    trainMessageAsSpamtrainMessageAsHamMETHOD_INVOCATION_NAME_MISMATCH
    Preondition Violations
    Expression filter.trainMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.trainMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.trainMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    Expression filter.trainMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    18
    filter.trainMessageAsHam(message);
    19
    inputStream.close();
    19
    inputStream.close();
    20
    hasChanged = true;
    20
    hasChanged = true;
    Precondition Violations (8)
    Row Violation
    1Expression filter.correctMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    2Expression filter.correctMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    3Expression filter.correctMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    4Expression filter.correctMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    5Expression filter.trainMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    6Expression filter.trainMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    7Expression filter.trainMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    8Expression filter.trainMessageAsHam(message) is a void method call, and thus it cannot be parameterized