LOG4J2-1270 added utility method StringBuilders::appendValue(StringBuilder, 
Object) that avoids creating temporary objects while appending an Object to a 
StringBuilder


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6a3cee06
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6a3cee06
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6a3cee06

Branch: 
refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 6a3cee062277610d4983452d5e0b8e6d26c78e91
Parents: a414da4
Author: rpopma <[email protected]>
Authored: Wed Jul 27 01:26:21 2016 +0900
Committer: rpopma <[email protected]>
Committed: Wed Jul 27 01:26:21 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/util/StringBuilders.java      | 38 ++++++++++++++++++--
 1 file changed, 35 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6a3cee06/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
index ac9ef62..d6e9962 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java
@@ -27,7 +27,7 @@ public final class StringBuilders {
 
     /**
      * Appends in the following format: double quoted value.
-     * 
+     *
      * @param sb a string builder
      * @param value a value
      * @return {@code "value"}
@@ -38,7 +38,7 @@ public final class StringBuilders {
 
     /**
      * Appends in the following format: key=double quoted value.
-     * 
+     *
      * @param sb a string builder
      * @param entry a map entry
      * @return {@code key="value"}
@@ -49,7 +49,7 @@ public final class StringBuilders {
 
     /**
      * Appends in the following format: key=double quoted value.
-     * 
+     *
      * @param sb a string builder
      * @param key a key
      * @param value a value
@@ -59,4 +59,36 @@ public final class StringBuilders {
         return 
sb.append(key).append(Chars.EQ).append(Chars.DQUOTE).append(value).append(Chars.DQUOTE);
     }
 
+    /**
+     * Appends a text representation of the specified object to the specified 
StringBuilder,
+     * if possible without allocating temporary objects.
+     *
+     * @param stringBuilder the StringBuilder to append the value to
+     * @param obj the object whose text representation to append to the 
StringBuilder
+     */
+    public static void appendValue(final StringBuilder stringBuilder, final 
Object obj) {
+        if (obj == null || obj instanceof String) {
+            stringBuilder.append((String) obj);
+        } else if (obj instanceof StringBuilderFormattable) {
+            ((StringBuilderFormattable) obj).formatTo(stringBuilder);
+        } else if (obj instanceof CharSequence) {
+            stringBuilder.append((CharSequence) obj);
+        } else if (obj instanceof Integer) { // LOG4J2-1437 unbox auto-boxed 
primitives to avoid calling toString()
+            stringBuilder.append(((Integer) obj).intValue());
+        } else if (obj instanceof Long) {
+            stringBuilder.append(((Long) obj).longValue());
+        } else if (obj instanceof Double) {
+            stringBuilder.append(((Double) obj).doubleValue());
+        } else if (obj instanceof Boolean) {
+            stringBuilder.append(((Boolean) obj).booleanValue());
+        } else if (obj instanceof Character) {
+            stringBuilder.append(((Character) obj).charValue());
+        } else if (obj instanceof Short) {
+            stringBuilder.append(((Short) obj).shortValue());
+        } else if (obj instanceof Float) {
+            stringBuilder.append(((Float) obj).floatValue());
+        } else {
+            stringBuilder.append(obj);
+        }
+    }
 }

Reply via email to