From 946ac0fc2d60fea2ed852ebdf365d959f9633224 Mon Sep 17 00:00:00 2001 From: soldierkam Date: Thu, 31 Dec 2015 17:42:22 +0100 Subject: [PATCH 001/358] Faster html escaping --- .../github/jknack/handlebars/Handlebars.java | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/Handlebars.java b/handlebars/src/main/java/com/github/jknack/handlebars/Handlebars.java index 5cd6cbe55..898827e86 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/Handlebars.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/Handlebars.java @@ -228,38 +228,55 @@ public static CharSequence escapeExpression(final CharSequence input) { } // Don't escape SafeStrings, since they're already safe if (input instanceof SafeString) { - return input.toString(); + return ((SafeString) input).content; } - StringBuilder html = new StringBuilder(input.length()); - for (int i = 0; i < input.length(); i++) { - char ch = input.charAt(i); - switch (ch) { + StringBuilder out = null; + int prev = 0; + final int length = input.length(); + for (int i = 0; i < length; i++) { + String newCh = null; + switch (input.charAt(i)) { case '<': - html.append("<"); + newCh = "<"; break; case '>': - html.append(">"); + newCh = ">"; break; case '"': - html.append("""); + newCh = """; break; case '\'': - html.append("'"); + newCh = "'"; break; case '`': - html.append("`"); + newCh = "`"; break; case '=': - html.append("="); + newCh = "="; break; case '&': - html.append("&"); + newCh = "&"; break; default: - html.append(ch); } + if (newCh != null) { + if (out == null) { + out = new StringBuilder(length + 10); + } + if (prev < i) { + out.append(input, prev, i); + } + out.append(newCh); + prev = i + 1; + } + } + if (out == null) { + return input; + } + if (prev < length) { + out.append(input, prev, length); } - return html.length() == input.length() ? input : html; + return out; } } From 2879016a4375c40baf13d65ced5317279908d994 Mon Sep 17 00:00:00 2001 From: Edgar Espina Date: Fri, 25 Dec 2015 20:54:51 -0300 Subject: [PATCH 002/358] prepare for next development cycle --- handlebars-guava-cache/pom.xml | 2 +- handlebars-helpers/pom.xml | 2 +- handlebars-humanize/pom.xml | 2 +- handlebars-jackson2/pom.xml | 2 +- handlebars-markdown/pom.xml | 2 +- handlebars-maven-plugin-tests/pom.xml | 2 +- handlebars-maven-plugin/pom.xml | 2 +- handlebars-proto/pom.xml | 2 +- handlebars-springmvc/pom.xml | 2 +- handlebars/pom.xml | 2 +- integration-tests/handlebars-without-rhino/pom.xml | 2 +- integration-tests/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/handlebars-guava-cache/pom.xml b/handlebars-guava-cache/pom.xml index 745ca099a..4329f9fea 100644 --- a/handlebars-guava-cache/pom.xml +++ b/handlebars-guava-cache/pom.xml @@ -5,7 +5,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-helpers/pom.xml b/handlebars-helpers/pom.xml index 129e3f94a..81d7e6a2c 100644 --- a/handlebars-helpers/pom.xml +++ b/handlebars-helpers/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-humanize/pom.xml b/handlebars-humanize/pom.xml index 5dd5f4da8..e193bf3a2 100644 --- a/handlebars-humanize/pom.xml +++ b/handlebars-humanize/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-jackson2/pom.xml b/handlebars-jackson2/pom.xml index 345c5ecd9..eb25468b4 100644 --- a/handlebars-jackson2/pom.xml +++ b/handlebars-jackson2/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-markdown/pom.xml b/handlebars-markdown/pom.xml index 29dd209f7..9c217a238 100644 --- a/handlebars-markdown/pom.xml +++ b/handlebars-markdown/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-maven-plugin-tests/pom.xml b/handlebars-maven-plugin-tests/pom.xml index 822bdba2b..d6d51a2c6 100644 --- a/handlebars-maven-plugin-tests/pom.xml +++ b/handlebars-maven-plugin-tests/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-maven-plugin/pom.xml b/handlebars-maven-plugin/pom.xml index e6fa2dad5..fc5b142ae 100644 --- a/handlebars-maven-plugin/pom.xml +++ b/handlebars-maven-plugin/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-proto/pom.xml b/handlebars-proto/pom.xml index f05db3d86..a1b0957cc 100644 --- a/handlebars-proto/pom.xml +++ b/handlebars-proto/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars-springmvc/pom.xml b/handlebars-springmvc/pom.xml index ac28b75ae..2ff0b1a31 100644 --- a/handlebars-springmvc/pom.xml +++ b/handlebars-springmvc/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/handlebars/pom.xml b/handlebars/pom.xml index 5e2ad9f0d..db929f74b 100644 --- a/handlebars/pom.xml +++ b/handlebars/pom.xml @@ -5,7 +5,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/integration-tests/handlebars-without-rhino/pom.xml b/integration-tests/handlebars-without-rhino/pom.xml index b4f1422a5..92da18cdd 100644 --- a/integration-tests/handlebars-without-rhino/pom.xml +++ b/integration-tests/handlebars-without-rhino/pom.xml @@ -4,7 +4,7 @@ com.github.jknack integration-tests - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index e6c50d80d..8733b50fa 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -4,7 +4,7 @@ com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index d76c3e1b8..12625b1ff 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.github.jknack handlebars.java - 4.0.2-SNAPSHOT + 4.0.3-SNAPSHOT pom Handlebars.java From 27e7c7cfbcf83aa8b4cb27227c50d54bb1f497f8 Mon Sep 17 00:00:00 2001 From: Edgar Espina Date: Thu, 7 Jan 2016 10:40:16 -0300 Subject: [PATCH 003/358] Incorrect slf4j log format fix #461 --- .../jknack/handlebars/helper/DefaultHelperRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/helper/DefaultHelperRegistry.java b/handlebars/src/main/java/com/github/jknack/handlebars/helper/DefaultHelperRegistry.java index 2023024ad..e7473c81b 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/helper/DefaultHelperRegistry.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/helper/DefaultHelperRegistry.java @@ -100,7 +100,7 @@ public HelperRegistry registerHelper(final String name, final Helper help Helper oldHelper = helpers.put(name, helper); if (oldHelper != null) { - logger.warn("Helper '%s' has been replaced by '%s'", name, helper); + logger.warn("Helper '{}' has been replaced by '{}'", name, helper); } return this; } @@ -250,7 +250,7 @@ public HelperRegistry registerDecorator(final String name, final Decorator decor Decorator old = decorators.put(name, decorator); if (old != null) { - logger.warn("Decorator '%s' has been replaced by '%s'", name, decorator); + logger.warn("Decorator '{}' has been replaced by '{}'", name, decorator); } return this; } From 477ba4919d2c44238e0621989293f69dbb8973f9 Mon Sep 17 00:00:00 2001 From: soldierkam Date: Thu, 7 Jan 2016 22:24:06 +0100 Subject: [PATCH 004/358] Decrease allocation rate --- .../java/com/github/jknack/handlebars/PathCompiler.java | 4 ++-- .../jknack/handlebars/context/MemberValueResolver.java | 5 +++-- .../jknack/handlebars/context/MethodValueResolver.java | 6 +++++- .../com/github/jknack/handlebars/internal/TemplateList.java | 5 ++--- .../github/jknack/handlebars/internal/path/DataPath.java | 5 ++++- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/PathCompiler.java b/handlebars/src/main/java/com/github/jknack/handlebars/PathCompiler.java index 21a333b4a..72224a499 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/PathCompiler.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/PathCompiler.java @@ -17,7 +17,7 @@ */ package com.github.jknack.handlebars; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -77,7 +77,7 @@ public static List compile(final String key) { * @return A path representation of the property (array based). */ private static List parse(final String path) { - LinkedList resolvers = new LinkedList<>(); + List resolvers = new ArrayList<>(); if ("this".equals(path) || "./".equals(path) || ".".equals(path)) { resolvers.add(new ResolveThisPath(path)); return resolvers; diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/context/MemberValueResolver.java b/handlebars/src/main/java/com/github/jknack/handlebars/context/MemberValueResolver.java index cae0ee4e8..58c734777 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/context/MemberValueResolver.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/context/MemberValueResolver.java @@ -22,7 +22,6 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; import java.lang.reflect.Modifier; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; @@ -256,7 +255,9 @@ public CacheKey(final Class clazz, final String name) { @Override public int hashCode() { - return Arrays.hashCode(new Object[] {clazz, name}); + int result = clazz.hashCode(); + result = 31 * result + (name != null ? name.hashCode() : 0); + return result; } @Override diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/context/MethodValueResolver.java b/handlebars/src/main/java/com/github/jknack/handlebars/context/MethodValueResolver.java index 4640f06e3..07aad1cdc 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/context/MethodValueResolver.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/context/MethodValueResolver.java @@ -38,6 +38,10 @@ public class MethodValueResolver extends MemberValueResolver { * The default instance. */ public static final ValueResolver INSTANCE = new MethodValueResolver(); + /** + * Args for getters. + */ + private static final Object[] EMPTY_ARGS = new Object[0]; @Override public boolean matches(final Method method, final String name) { @@ -48,7 +52,7 @@ public boolean matches(final Method method, final String name) { @Override protected Object invokeMember(final Method member, final Object context) { try { - return member.invoke(context); + return member.invoke(context, EMPTY_ARGS); } catch (InvocationTargetException ex) { Throwable cause = ex.getCause(); if (cause instanceof RuntimeException) { diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/internal/TemplateList.java b/handlebars/src/main/java/com/github/jknack/handlebars/internal/TemplateList.java index d068146f5..175f45b3a 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/internal/TemplateList.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/internal/TemplateList.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -42,10 +41,10 @@ class TemplateList extends BaseTemplate implements Iterable