offset--; for(;;) { for(int i = offset; i >= 0; i--) { char ch = lineText.array[lineText.offset + i]; if(ch == c) { if(!haveTokens) { tokenHandler.init(); buffer.markTokens(line,tokenHandler); haveTokens = true; } if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) count++; } else if(ch == cprime) { if(!haveTokens) { tokenHandler.init(); buffer.markTokens(line,tokenHandler); haveTokens = true; } if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) { count--; if(count == 0) return buffer.getLineStartOffset(line) + i; } } } //{{{ Go on to previous line line--; if(line < 0 || (startLine - line) > BRACKET_MATCH_LIMIT) break; buffer.getLineText(line,lineText); offset = lineText.count - 1; haveTokens = false; //}}} }
offset++; for(;;) { for(int i = offset; i < lineText.count; i++) { char ch = lineText.array[lineText.offset + i]; if(ch == c) { if(!haveTokens) { tokenHandler.init(); buffer.markTokens(line,tokenHandler); haveTokens = true; } if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) count++; } else if(ch == cprime) { if(!haveTokens) { tokenHandler.init(); buffer.markTokens(line,tokenHandler); haveTokens = true; } if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) { count--; if(count == 0) return buffer.getLineStartOffset(line) + i; } } } //{{{ Go on to next line line++; if(line >= buffer.getLineCount() || (line - startLine) > BRACKET_MATCH_LIMIT) break; buffer.getLineText(line,lineText); offset = 0; haveTokens = false; //}}} }
Clone fragments detected by clone detection tool
File path: /jEdit-4.2/src/org/gjt/sp/jedit/TextUtilities.java File path: /jEdit-4.2/src/org/gjt/sp/jedit/TextUtilities.java
Method name: int findMatchingBracket(Buffer, int, int) Method name: int findMatchingBracket(Buffer, int, int)
Number of AST nodes: 26 Number of AST nodes: 26
1
offset--;
1
offset++;
2
			for(;;)
2
			for(;;)
3
			{
3
			{
4
				for(int i = offset; i &gt;= 0; i--)
4
				for(int i = offset; i &lt; lineText.count; i++)
5
				{
5
				{
6
					char ch = lineText.array[lineText.offset + i];
6
					char ch = lineText.array[lineText.offset + i];
7
					if(ch == c)
7
					if(ch == c)
8
					{
8
					{
9
						if(!haveTokens)
9
						if(!haveTokens)
10
						{
10
						{
11
							tokenHandler.init();
11
							tokenHandler.init();
12
							buffer.markTokens(line,tokenHandler);
12
							buffer.markTokens(line,tokenHandler);
13
							haveTokens = true;
13
							haveTokens = true;
14
						}
14
						}
15
						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)
15
						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)
16
							count++;
16
							count++;
17
					}
17
					}
18
					else if(ch == cprime)
18
					else if(ch == cprime)
19
					{
19
					{
20
						if(!haveTokens)
20
						if(!haveTokens)
21
						{
21
						{
22
							tokenHandler.init();
22
							tokenHandler.init();
23
							buffer.markTokens(line,tokenHandler);
23
							buffer.markTokens(line,tokenHandler);
24
							haveTokens = true;
24
							haveTokens = true;
25
						}
25
						}
26
						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)
26
						if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket)
27
						{
27
						{
28
							count--;
28
							count--;
29
							if(count == 0)
29
							if(count == 0)
30
								return buffer.getLineStartOffset(line) + i;
30
								return buffer.getLineStartOffset(line) + i;
31
						}
31
						}
32
					}
32
					}
33
				}
33
				}
34
				//{{{ Go on to previous line
34
				//{{{ Go on to next line
35
				line--;
35
				line++;
36
				if(line &lt; 0 || (startLine - line) > BRACKET_MATCH_LIMIT)
36
				if(line &gt;= buffer.getLineCount() || (line - startLine) > BRACKET_MATCH_LIMIT)
37
					break;
37
					break;
38
				buffer.getLineText(line,lineText);
38
				buffer.getLineText(line,lineText);
39
				offset = lineText.count - 1;
39
				offset = 0;
40
				haveTokens = false;
40
				haveTokens = false;
41
				//}}}
41
				//}}}
42
			}
42
			}
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)5.5
Clones locationClones are in the same method
Number of node comparisons85
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements13
    Number of unmapped statements in the first code fragment4
    Number of unmapped statements in the second code fragment4
    Time elapsed for statement mapping (ms)1268.3
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    71
    char ch = lineText.array[lineText.offset + i];
    45
    char ch = lineText.array[lineText.offset + i];
    72
    if (ch == c)
    72
    if (ch == c)
    53
    if (ch == cprime)
    Differences
    Expression1Expression2Difference
    ccprimeVARIABLE_NAME_MISMATCH
    53
    if (ch == cprime)
    73
    if (!haveTokens)
    54
    if (!haveTokens)
    74
    tokenHandler.init();
    55
    tokenHandler.init();
    75
    buffer.markTokens(line, tokenHandler);
    56
    buffer.markTokens(line, tokenHandler);
    76
    haveTokens = true;
    57
    haveTokens = true;
                                                                                                                                                
    58
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    Preondition Violations
    Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    58
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
                            
    59
    count--;
    Preondition Violations
    Unmatched statement count--; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    59
    count--;
    77
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    77
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    Preondition Violations
    Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                                                                                
    78
    count++;
    78
    count++;
    Preondition Violations
    Unmatched statement count++; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                            
    79
    else if (ch == cprime)
    79
    else if (ch == cprime)
    46
    else if (ch == c)
    Differences
    Expression1Expression2Difference
    cprimecVARIABLE_NAME_MISMATCH
    46
    else if (ch == c)
    80
    if (!haveTokens)
    47
    if (!haveTokens)
    81
    tokenHandler.init();
    48
    tokenHandler.init();
    82
    buffer.markTokens(line, tokenHandler);
    49
    buffer.markTokens(line, tokenHandler);
    83
    haveTokens = true;
    50
    haveTokens = true;
                                                                                                                                                
    51
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    Preondition Violations
    Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    51
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
                            
    52
    count++;
    Preondition Violations
    Unmatched statement count++; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    52
    count++;
    84
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    84
    if (getTokenAtOffset(tokenHandler.getTokens(), i).id == idOfBracket)
    Preondition Violations
    Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                                                                                
    85
    count--;
    85
    count--;
    Preondition Violations
    Unmatched statement count--; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                            
    86
    if (count == 0)
    60
    if (count == 0)
    87
    return buffer.getLineStartOffset(line) + i;
    61
    return buffer.getLineStartOffset(line) + i;
    Precondition Violations (8)
    Row Violation
    1Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    2Unmatched statement count--; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    3Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    4Unmatched statement count++; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    5Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    6Unmatched statement count++; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    7Unmatched statement if(getTokenAtOffset(tokenHandler.getTokens(),i).id == idOfBracket) cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    8Unmatched statement count--; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted