Repository: tapestry-5 Updated Branches: refs/heads/master f5ed86bd1 -> f13311782
TAP5-2476: improve performance of org.apache.tapestry5.dom.AbstractMarkupModel.encodeQuoted(String, StringBuilder) Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/f1331178 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/f1331178 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/f1331178 Branch: refs/heads/master Commit: f13311782acc8b8a3da311623761cb970d04387e Parents: f5ed86b Author: Jochen Kemnade <jochen.kemn...@eddyson.de> Authored: Wed Jul 29 16:41:27 2015 +0200 Committer: Jochen Kemnade <jochen.kemn...@eddyson.de> Committed: Wed Jul 29 16:41:27 2015 +0200 ---------------------------------------------------------------------- .../tapestry5/dom/AbstractMarkupModel.java | 46 +++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/f1331178/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java index ce6831d..63879c2 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java @@ -92,9 +92,9 @@ public abstract class AbstractMarkupModel implements MarkupModel public void encodeQuoted(String content, StringBuilder builder) { assert content != null; - int length = content.length(); - - for (int i = 0; i < length; i++) + int length = content.length(), tokenStart = 0, i = 0; + String delimiter; + for (; i < length; i++) { char ch = content.charAt(i); @@ -102,28 +102,27 @@ public abstract class AbstractMarkupModel implements MarkupModel { case '<': - builder.append("<"); - continue; + delimiter = "<"; + break; case '>': - builder.append(">"); - continue; + delimiter = ">"; + break; case '&': - builder.append("&"); - continue; + delimiter = "&"; + break; case '"': if (!useApostropheForAttributes) { - builder.append("""); - continue; + delimiter = """; + break; } - builder.append(ch); continue; case '\'': @@ -131,17 +130,32 @@ public abstract class AbstractMarkupModel implements MarkupModel if (useApostropheForAttributes) { //TAP5-714 - builder.append("'"); - continue; + delimiter = "'"; + break; } - // Fall through + continue; + default: - builder.append(ch); + continue; + } + + if (tokenStart != i) + { + builder.append(content.subSequence(tokenStart, i)); } + + builder.append(delimiter); + + tokenStart = i + 1; + } + + if (tokenStart != length) + { + builder.append(content.subSequence(tokenStart, length)); } } }