Skip to content

Commit f4e9bfe

Browse files
committed
Less object creation in GenericTokenParser.
1 parent ecc148e commit f4e9bfe

File tree

1 file changed

+44
-36
lines changed

1 file changed

+44
-36
lines changed

src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -31,50 +31,58 @@ public GenericTokenParser(String openToken, String closeToken, TokenHandler hand
3131
}
3232

3333
public String parse(String text) {
34+
if (text == null || text.isEmpty()) {
35+
return "";
36+
}
37+
char[] src = text.toCharArray();
38+
int offset = 0;
39+
// search open token
40+
int start = text.indexOf(openToken, offset);
41+
if (start == -1) {
42+
return text;
43+
}
3444
final StringBuilder builder = new StringBuilder();
35-
final StringBuilder expression = new StringBuilder();
36-
if (text != null && text.length() > 0) {
37-
char[] src = text.toCharArray();
38-
int offset = 0;
39-
// search open token
40-
int start = text.indexOf(openToken, offset);
41-
while (start > -1) {
42-
if (start > 0 && src[start - 1] == '\\') {
43-
// this open token is escaped. remove the backslash and continue.
44-
builder.append(src, offset, start - offset - 1).append(openToken);
45-
offset = start + openToken.length();
45+
StringBuilder expression = null;
46+
while (start > -1) {
47+
if (start > 0 && src[start - 1] == '\\') {
48+
// this open token is escaped. remove the backslash and continue.
49+
builder.append(src, offset, start - offset - 1).append(openToken);
50+
offset = start + openToken.length();
51+
} else {
52+
// found open token. let's search close token.
53+
if (expression == null) {
54+
expression = new StringBuilder();
4655
} else {
47-
// found open token. let's search close token.
4856
expression.setLength(0);
49-
builder.append(src, offset, start - offset);
50-
offset = start + openToken.length();
51-
int end = text.indexOf(closeToken, offset);
52-
while (end > -1) {
53-
if (end > offset && src[end - 1] == '\\') {
54-
// this close token is escaped. remove the backslash and continue.
55-
expression.append(src, offset, end - offset - 1).append(closeToken);
56-
offset = end + closeToken.length();
57-
end = text.indexOf(closeToken, offset);
58-
} else {
59-
expression.append(src, offset, end - offset);
60-
offset = end + closeToken.length();
61-
break;
62-
}
63-
}
64-
if (end == -1) {
65-
// close token was not found.
66-
builder.append(src, start, src.length - start);
67-
offset = src.length;
57+
}
58+
builder.append(src, offset, start - offset);
59+
offset = start + openToken.length();
60+
int end = text.indexOf(closeToken, offset);
61+
while (end > -1) {
62+
if (end > offset && src[end - 1] == '\\') {
63+
// this close token is escaped. remove the backslash and continue.
64+
expression.append(src, offset, end - offset - 1).append(closeToken);
65+
offset = end + closeToken.length();
66+
end = text.indexOf(closeToken, offset);
6867
} else {
69-
builder.append(handler.handleToken(expression.toString()));
68+
expression.append(src, offset, end - offset);
7069
offset = end + closeToken.length();
70+
break;
7171
}
7272
}
73-
start = text.indexOf(openToken, offset);
74-
}
75-
if (offset < src.length) {
76-
builder.append(src, offset, src.length - offset);
73+
if (end == -1) {
74+
// close token was not found.
75+
builder.append(src, start, src.length - start);
76+
offset = src.length;
77+
} else {
78+
builder.append(handler.handleToken(expression.toString()));
79+
offset = end + closeToken.length();
80+
}
7781
}
82+
start = text.indexOf(openToken, offset);
83+
}
84+
if (offset < src.length) {
85+
builder.append(src, offset, src.length - offset);
7886
}
7987
return builder.toString();
8088
}

0 commit comments

Comments
 (0)