File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/parser/text/HtmlParser.java | File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/parser/text/HtmlParser.java | |||
Method name: String substituteSpecialCharacters(String)
|
Method name: String substituteSpecialCharactersInHeaderfields(String)
|
|||
Number of AST nodes: 52 | Number of AST nodes: 51 | |||
1 | StringBuffer sb = new StringBuffer(s.length());↵ | 1 | StringBuffer sb = new StringBuffer(s.length());↵ | |
2 | StringReader sr = new StringReader(s);↵ | 2 | StringReader sr = new StringReader(s);↵ | |
3 | BufferedReader br = new BufferedReader(sr);↵ | 3 | BufferedReader br = new BufferedReader(sr);↵ | |
4 | String ss = null;↵ | 4 | String ss = null;↵ | |
5 | // TODO (@author karlpeder): Extend handling of special entities as in restoreSpecialCharacters↵ | |||
6 | /*↵ | |||
7 | * *20030623, karlpeder* " and space handled also↵ | |||
8 | */↵ | |||
5 | try {↵ | 9 | try {↵ | |
6 | while ((ss = br.readLine()) != null) {↵ | 10 | while ((ss = br.readLine()) != null) {↵ | |
7 | int i = 0;↵ | 11 | int i = 0;↵ | |
8 | while (i < ss.length()) {↵ | 12 | while (i < ss.length()) {↵ | |
9 | switch (ss.charAt(i)) {↵ | 13 | switch (ss.charAt(i)) {↵ | |
10 | case '<':↵ | 14 | case '<':↵ | |
11 | sb.append("<");↵ | 15 | sb.append("<");↵ | |
12 | i++;↵ | 16 | i++;↵ | |
13 | break;↵ | 17 | break;↵ | |
14 | case '>':↵ | 18 | case '>':↵ | |
15 | sb.append(">");↵ | 19 | sb.append(">");↵ | |
16 | i++;↵ | 20 | i++;↵ | |
17 | break;↵ | 21 | break;↵ | |
18 | case '&':↵ | 22 | case '&':↵ | |
19 | sb.append("&");↵ | 23 | sb.append("&");↵ | |
20 | i++;↵ | 24 | i++;↵ | |
21 | break;↵ | 25 | break;↵ | |
22 | case '"':↵ | 26 | case '"':↵ | |
23 | sb.append(""");↵ | 27 | sb.append(""");↵ | |
24 | i++;↵ | 28 | i++;↵ | |
25 | break;↵ | 29 | break;↵ | |
30 | /*↵ | |||
26 | case ' ':↵ | 31 | case '\'':↵ | |
27 | //sb.append(" ");↵ | 32 | sb.append("'");↵ | |
33 | i++;↵ | |||
34 | break;*/↵ | |||
35 | case ' ':↵ | |||
28 | if (ss.substring(i).startsWith(" ")) {↵ | 36 | if (ss.substring(i).startsWith(" ")) {↵ | |
29 | sb.append(" ");↵ | 37 | sb.append(" ");↵ | |
30 | i = i + 2;↵ | 38 | i = i + 2;↵ | |
31 | } else if (ss.substring(i).startsWith(" ")) {↵ | 39 | } else if (ss.substring(i).startsWith(" ")) {↵ | |
32 | sb.append(" ");↵ | 40 | sb.append(" ");↵ | |
33 | i = i + 3;↵ | 41 | i = i + 3;↵ | |
34 | } else if (ss.substring(i).startsWith(" ")) {↵ | 42 | } else if (ss.substring(i).startsWith(" ")) {↵ | |
35 | sb.append(" ");↵ | 43 | sb.append(" ");↵ | |
36 | i = i + 2;↵ | 44 | i = i + 2;↵ | |
37 | } else {↵ | 45 | } else {↵ | |
38 | sb.append(' ');↵ | 46 | sb.append(' ');↵ | |
39 | i++;↵ | 47 | i++;↵ | |
40 | }↵ | 48 | }↵ | |
41 | break;↵ | 49 | break;↵ | |
42 | case '\t':↵ | 50 | case '\t':↵ | |
43 | sb.append(" ");↵ | 51 | sb.append(" ");↵ | |
44 | i++;↵ | 52 | i++;↵ | |
45 | break;↵ | 53 | break;↵ | |
46 | case '\n':↵ | 54 | case '\n':↵ | |
47 | sb.append("<br>");↵ | 55 | sb.append("<br>");↵ | |
48 | i++;↵ | 56 | i++;↵ | |
49 | break;↵ | 57 | break;↵ | |
50 | default:↵ | 58 | default:↵ | |
51 | sb.append(ss.charAt(i));↵ | 59 | sb.append(ss.charAt(i));↵ | |
52 | i++;↵ | 60 | i++;↵ | |
53 | break;↵ | 61 | break;↵ | |
54 | }↵ | 62 | }↵ | |
55 | }↵ | 63 | }↵ | |
56 | sb.append("<br>\n");↵ | |||
57 | }↵ | 64 | }↵ | |
58 | } catch (Exception e) {↵ | 65 | } catch (Exception e) {↵ | |
59 | LOG.severe("Error substituting special characters: "↵ | 66 | LOG.severe("Error substituting special characters: "↵ | |
60 | + e.getMessage());↵ | 67 | + e.getMessage());↵ | |
61 | return null; // error↵ | 68 | return null; // error↵ | |
62 | }↵ | 69 | }↵ | |
63 | return sb.toString(); | 70 |
| |
See real code fragment | See real code fragment |
Number of common nesting structure subtrees | 1 |
Number of refactorable cases | 0 |
Number of non-refactorable cases | 1 |
Time elapsed for finding largest common nesting structure subtrees (ms) | 50.8 |
Clones location | Clones are declared in the same class |
Number of node comparisons | 614 |
Number of mapped statements | 51 |
Number of unmapped statements in the first code fragment | 1 |
Number of unmapped statements in the second code fragment | 0 |
Time elapsed for statement mapping (ms) | 3246.6 |
Clone type | Type 3 |
ID | Statement | ID | Statement | ||||
---|---|---|---|---|---|---|---|
1 | StringBuffer sb = new StringBuffer(s.length()); | 1 | StringBuffer sb = new StringBuffer(s.length()); | ||||
2 | StringReader sr = new StringReader(s); | 2 | StringReader sr = new StringReader(s); | ||||
3 | BufferedReader br = new BufferedReader(sr); | 3 | BufferedReader br = new BufferedReader(sr); | ||||
4 | String ss = null; | 4 | String ss = null; | ||||
5 | try | 5 | try | ||||
6 | while ((ss = br.readLine()) != null) | 6 | while ((ss = br.readLine()) != null) | ||||
7 | int i = 0; | 7 | int i = 0; | ||||
8 | while (i < ss.length()) | 8 | while (i < ss.length()) | ||||
9 | switch (ss.charAt(i)) | 9 | switch (ss.charAt(i)) | ||||
10 | case '<': | 10 | case '<': | ||||
11 | sb.append("<"); | 11 | sb.append("<"); | ||||
12 | i++; | 12 | i++; | ||||
13 | break; | 13 | break; | ||||
14 | case '>': | 14 | case '>': | ||||
15 | sb.append(">"); | 15 | sb.append(">"); | ||||
16 | i++; | 16 | i++; | ||||
17 | break; | 17 | break; | ||||
18 | case '&': | 18 | case '&': | ||||
19 | sb.append("&"); | 19 | sb.append("&"); | ||||
20 | i++; | 20 | i++; | ||||
21 | break; | 21 | break; | ||||
22 | case '"': | 22 | case '"': | ||||
23 | sb.append("""); | 23 | sb.append("""); | ||||
24 | i++; | 24 | i++; | ||||
25 | break; | 25 | break; | ||||
26 | case ' ': | 26 | case ' ': | ||||
27 | if (ss.substring(i).startsWith(" ")) | 27 | if (ss.substring(i).startsWith(" ")) | ||||
28 | sb.append(" "); | 28 | sb.append(" "); | ||||
29 | i = i + 2; | 29 | i = i + 2; | ||||
30 | else if (ss.substring(i).startsWith(" ")) | 30 | else if (ss.substring(i).startsWith(" ")) | ||||
31 | sb.append(" "); | 31 | sb.append(" "); | ||||
32 | i = i + 3; | 32 | i = i + 3; | ||||
33 | else if (ss.substring(i).startsWith(" ")) | 33 | else if (ss.substring(i).startsWith(" ")) | ||||
34 | sb.append(" "); | 34 | sb.append(" "); | ||||
35 | i = i + 2; | 35 | i = i + 2; | ||||
else | else | ||||||
36 | sb.append(' '); | 36 | sb.append(' '); | ||||
37 | i++; | 37 | i++; | ||||
38 | break; | 38 | break; | ||||
39 | case '\t': | 39 | case '\t': | ||||
40 | sb.append(" "); | 40 | sb.append(" "); | ||||
41 | i++; | 41 | i++; | ||||
42 | break; | 42 | break; | ||||
43 | case '\n': | 43 | case '\n': | ||||
44 | sb.append("<br>"); | 44 | sb.append("<br>"); | ||||
45 | i++; | 45 | i++; | ||||
46 | break; | 46 | break; | ||||
47 | default: | 47 | default: | ||||
48 | sb.append(ss.charAt(i)); | 48 | sb.append(ss.charAt(i)); | ||||
49 | i++; | 49 | i++; | ||||
50 | break; | 50 | break; | ||||
51 | sb.append("<br>\n"); |
| | ||||
52 | return sb.toString(); | 51 | return sb.toString(); |
Row | Violation |
---|---|
1 | Unmatched statement sb.append("<br>\n"); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
2 | Clone fragment #1 returns variables sb , while Clone fragment #2 returns variables |