From 22774d2c3a9400754d37221fa6e85bb65df1da5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= <shaojin.wensj@alibaba-inc.com> Date: Sun, 17 Apr 2016 20:54:17 +0800 Subject: [PATCH] refactor for jar size --- .../alibaba/fastjson/parser/JSONLexer.java | 88 +++++++------------ 1 file changed, 30 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java index e625db908..aebf77f0c 100644 --- a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java +++ b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java @@ -210,7 +210,7 @@ public final class JSONLexer { return; } - if (ch >= '0' && ch <= '9') { + if ((ch >= '0' && ch <= '9') || ch == '-') { scanNumber(); return; } @@ -221,11 +221,6 @@ public final class JSONLexer { return; } - if (ch == '-') { - scanNumber(); - return; - } - switch (ch) { case '\'': if ((features & Feature.AllowSingleQuotes.mask) == 0) { @@ -600,13 +595,11 @@ public final class JSONLexer { if (result <= Integer.MAX_VALUE && type != 'L') { if (type == 'S') { return (short) result; - } - - if (type == 'B') { + } else if (type == 'B') { return (byte) result; + } else { + return (int) result; } - - return (int) result; } return result; } @@ -719,13 +712,11 @@ public final class JSONLexer { } } - if (hasSpecial) { - strVal = readString(chars, chars_len); - } else if (chars_len < 20) { - strVal = symbolTable.addSymbol(chars, 0, chars_len, hash); - } else { - strVal = new String(chars, 0, chars_len); - } + strVal = hasSpecial // + ? readString(chars, chars_len) // + : chars_len < 20 // + ? symbolTable.addSymbol(chars, 0, chars_len, hash) // + : new String(chars, 0, chars_len); } else { strVal = readString(chars, chars_len); } @@ -813,20 +804,14 @@ public final class JSONLexer { sbuf[len++] = '\\'; break; case 'x': - char x1 = chars[++i]; - char x2 = chars[++i]; - - int x_val = digits[x1] * 16 + digits[x2]; - char x_char = (char) x_val; - sbuf[len++] = x_char; + sbuf[len++] = (char) (digits[chars[++i]] * 16 + digits[chars[++i]]); break; case 'u': - char c1 = chars[++i]; - char c2 = chars[++i]; - char c3 = chars[++i]; - char c4 = chars[++i]; - int val = Integer.parseInt(new String(new char[] { c1, c2, c3, c4 }), 16); - sbuf[len++] = (char) val; + sbuf[len++] = (char) Integer.parseInt(new String(new char[] { chars[++i], // + chars[++i], // + chars[++i], // + chars[++i] }), + 16); break; default: throw new JSONException("unclosed.str.lit"); @@ -2417,26 +2402,18 @@ public final class JSONLexer { matchStat = NOT_MATCH; return stringDefaultValue(); } - char x1 = ch = text.charAt(i + 1); - char x2 = ch = text.charAt(i + 2); - i += 2; - int x_val = digits[x1] * 16 + digits[x2]; - char x_char = (char) x_val; - putChar(x_char); + putChar((char) (digits[text.charAt(++i)] * 16 + digits[text.charAt(++i)])); break; case 'u': if (i + 4 >= len){ matchStat = NOT_MATCH; return stringDefaultValue(); } - char u1 = ch = text.charAt(i + 1); - char u2 = ch = text.charAt(i + 2); - char u3 = ch = text.charAt(i + 3); - char u4 = ch = text.charAt(i + 4); - i += 4; - int val = Integer.parseInt(new String(new char[] { u1, u2, u3, u4 }), 16); - putChar((char) val); + putChar((char) Integer.parseInt(new String(new char[] { text.charAt(++i), // + text.charAt(++i), + text.charAt(++i), // + text.charAt(++i) }), 16)); break; default: throw new JSONException("unclosed string : " + ch); @@ -2961,17 +2938,15 @@ public final class JSONLexer { int rest = text.length() - bp; if ((!strict) && rest > 13) { - char c0 = charAt(bp); - char c1 = charAt(bp + 1); - char c2 = charAt(bp + 2); - char c3 = charAt(bp + 3); - char c4 = charAt(bp + 4); - char c5 = charAt(bp + 5); - - char c_r0 = charAt(bp + rest - 1); - char c_r1 = charAt(bp + rest - 2); - if (c0 == '/' && c1 == 'D' && c2 == 'a' && c3 == 't' && c4 == 'e' && c5 == '(' && c_r0 == '/' - && c_r1 == ')') { + if (charAt(bp) == '/' // + && charAt(bp + 1) == 'D' // + && charAt(bp + 2) == 'a' // + && charAt(bp + 3) == 't' // + && charAt(bp + 4) == 'e' // + && charAt(bp + 5) == '(' // + && charAt(bp + rest - 1) == '/' // + && charAt(bp + rest - 2) == ')' // + ) { int plusIndex = -1; for (int i = 6; i < rest; ++i) { char c = charAt(bp + i); @@ -3052,10 +3027,7 @@ public final class JSONLexer { minute = digits[m0] * 10 + digits[m1]; seconds = digits[s0] * 10 + digits[s1]; } else { - hour = 0; - minute = 0; - seconds = 0; - millis = 0; + hour = minute = seconds = millis = 0; } calendar.set(Calendar.HOUR_OF_DAY, hour); -- GitLab