InputStream istream = CommandHelper.getBodyPart(mailbox, uid); // get headers Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS); // put headers in list Enumeration e = h.getKeys(); List list = new ArrayList(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); list.add(h.get(key)); } // load database from file load(); 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) { }
InputStream istream = CommandHelper.getBodyPart(mailbox, uid); // get headers Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS); // put headers in list Enumeration e = h.getKeys(); List list = new ArrayList(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); list.add(h.get(key)); } // load database from file load(); 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) { }
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 trainMessageAsHam(IMailbox, Object) Method name: void trainMessageAsSpam(IMailbox, Object)
Number of AST nodes: 20 Number of AST nodes: 20
1
InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
1
InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
2
		// get headers
2
		// get headers
3
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
3
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
4
		// put headers in list
4
		// put headers in list
5
		Enumeration e = h.getKeys();
5
		Enumeration e = h.getKeys();
6
		List list = new ArrayList();
6
		List list = new ArrayList();
7
		while (e.hasMoreElements()) {
7
		while (e.hasMoreElements()) {
8
			String key = (String) e.nextElement();
8
			String key = (String) e.nextElement();
9
			list.add(h.get(key));
9
			list.add(h.get(key));
10
		}
10
		}
11
		// load database from file
11
		// load database from file
12
		load();
12
		load();
13
		try {
13
		try {
14
			CloneStreamMaster master = new CloneStreamMaster(istream);
14
			CloneStreamMaster master = new CloneStreamMaster(istream);
15
			InputStream inputStream = master.getClone();
15
			InputStream inputStream = master.getClone();
16
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
16
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
17
			// close stream
17
			// close stream
18
			inputStream.close();
18
			inputStream.close();
19
			// get new inputstream
19
			// get new inputstream
20
			inputStream = master.getClone();
20
			inputStream = master.getClone();
21
			Message message = new Message(inputStream, list, md5sum);
21
			Message message = new Message(inputStream, list, md5sum);
22
			// check if this message was already learned
22
			// check if this message was already learned
23
			
23
			// -> only add if this is not the case
24
if (db.MD5SumExists(md5sum)) {
24
			if (db.MD5SumExists(md5sum)) {
25
				// message already exists
25
				// message already exists
26
				// --> correct token data
26
				// --> correct token data
27
				filter.correctMessageAsHam(message);
27
				filter.correctMessageAsSpam(message);
28
			} else {
28
			} else {
29
				// new message
29
				// new message
30
				filter.trainMessageAsHam(message);
30
				filter.trainMessageAsSpam(message);
31
			}
31
			}
32
			// close stream
32
			// close stream
33
			inputStream.close();
33
			inputStream.close();
34
			// set dirty flag
34
			// set dirty flag
35
			hasChanged = true;
35
			hasChanged = true;
36
		} catch (IOException e1) {
36
		} catch (IOException e1) {
37
			LOG.severe(e1.getMessage());
37
			LOG.severe(e1.getMessage());
38
			if (Logging.DEBUG)
38
			if (Logging.DEBUG)
39
				e1.printStackTrace();
39
				e1.printStackTrace();
40
		} catch (NoSuchAlgorithmException nsae) {
40
		} catch (NoSuchAlgorithmException nsae) {
41
		}
41
		}
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.6
Clones locationClones are declared in the same class
Number of node comparisons124
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements20
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment0
    Time elapsed for statement mapping (ms)21.6
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    1
    InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
    1
    InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
    2
    Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
    2
    Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
    3
    Enumeration e = h.getKeys();
    3
    Enumeration e = h.getKeys();
    4
    List list = new ArrayList();
    4
    List list = new ArrayList();
    5
    while (e.hasMoreElements())
    5
    while (e.hasMoreElements())
    6
    String key = (String)e.nextElement();
    6
    String key = (String)e.nextElement();
    7
    list.add(h.get(key));
    7
    list.add(h.get(key));
    8
    load();
    8
    load();
    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.correctMessageAsHam(message);
    17
    filter.correctMessageAsHam(message);
    17
    filter.correctMessageAsSpam(message);
    Differences
    Expression1Expression2Difference
    correctMessageAsHamcorrectMessageAsSpamMETHOD_INVOCATION_NAME_MISMATCH
    Preondition Violations
    Expression filter.correctMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.correctMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.correctMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    Expression filter.correctMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    17
    filter.correctMessageAsSpam(message);
    else
    else
    18
    filter.trainMessageAsHam(message);
    18
    filter.trainMessageAsHam(message);
    18
    filter.trainMessageAsSpam(message);
    Differences
    Expression1Expression2Difference
    trainMessageAsHamtrainMessageAsSpamMETHOD_INVOCATION_NAME_MISMATCH
    Preondition Violations
    Expression filter.trainMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.trainMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression filter.trainMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    Expression filter.trainMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    18
    filter.trainMessageAsSpam(message);
    19
    inputStream.close();
    19
    inputStream.close();
    20
    hasChanged = true;
    20
    hasChanged = true;
    Precondition Violations (8)
    Row Violation
    1Expression filter.correctMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    2Expression filter.correctMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    3Expression filter.correctMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    4Expression filter.correctMessageAsSpam(message) is a void method call, and thus it cannot be parameterized
    5Expression filter.trainMessageAsHam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    6Expression filter.trainMessageAsSpam(message) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    7Expression filter.trainMessageAsHam(message) is a void method call, and thus it cannot be parameterized
    8Expression filter.trainMessageAsSpam(message) is a void method call, and thus it cannot be parameterized