LOG4J2-1326 modify SimpleMessage and ReusableSimpleMessage so they can carry 
CharSequence


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

Branch: refs/heads/LOG4J2-1356
Commit: ebb01542030df6961c2db5b4bfe3e2c685d541e8
Parents: 450c98d
Author: rpopma <[email protected]>
Authored: Thu Apr 7 22:05:04 2016 +0900
Committer: rpopma <[email protected]>
Committed: Thu Apr 7 22:05:04 2016 +0900

----------------------------------------------------------------------
 .../log4j/message/ReusableSimpleMessage.java    | 16 +++++---
 .../logging/log4j/message/SimpleMessage.java    | 43 +++++++++++++++++---
 2 files changed, 48 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
index 01e2e74..a0954dc 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
@@ -26,20 +26,24 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
 public class ReusableSimpleMessage implements ReusableMessage {
     private static final long serialVersionUID = -9199974506498249809L;
     private static Object[] EMPTY_PARAMS = new Object[0];
-    private String message;
+    private CharSequence charSequence;
 
-    public void set(String message) {
-        this.message = message;
+    public void set(final String message) {
+        this.charSequence = message;
+    }
+
+    public void set(final CharSequence charSequence) {
+        this.charSequence = charSequence;
     }
 
     @Override
     public String getFormattedMessage() {
-        return message;
+        return String.valueOf(charSequence);
     }
 
     @Override
     public String getFormat() {
-        return message;
+        return getFormattedMessage();
     }
 
     @Override
@@ -54,7 +58,7 @@ public class ReusableSimpleMessage implements ReusableMessage 
{
 
     @Override
     public void formatTo(final StringBuilder buffer) {
-        buffer.append(message);
+        buffer.append(charSequence);
     }
 }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
index d5c8b88..106040e 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
@@ -16,6 +16,11 @@
  */
 package org.apache.logging.log4j.message;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 
 /**
@@ -24,7 +29,8 @@ import org.apache.logging.log4j.util.StringBuilderFormattable;
 public class SimpleMessage implements Message, StringBuilderFormattable {
     private static final long serialVersionUID = -8398002534962715992L;
 
-    private final String message;
+    private String message;
+    private transient CharSequence charSequence;
 
     /**
      * Basic constructor.
@@ -39,6 +45,16 @@ public class SimpleMessage implements Message, 
StringBuilderFormattable {
      */
     public SimpleMessage(final String message) {
         this.message = message;
+        this.charSequence = message;
+    }
+
+    /**
+     * Constructor that includes the message.
+     * @param charSequence The CharSequence message.
+     */
+    public SimpleMessage(final CharSequence charSequence) {
+        // this.message = String.valueOf(charSequence); // postponed until 
getFormattedMessage
+        this.charSequence = charSequence;
     }
 
     /**
@@ -47,12 +63,15 @@ public class SimpleMessage implements Message, 
StringBuilderFormattable {
      */
     @Override
     public String getFormattedMessage() {
+        if (message == null) {
+            message = String.valueOf(charSequence);
+        }
         return message;
     }
 
     @Override
     public void formatTo(final StringBuilder buffer) {
-        buffer.append(message);
+        buffer.append(charSequence);
     }
 
     /**
@@ -61,7 +80,7 @@ public class SimpleMessage implements Message, 
StringBuilderFormattable {
      */
     @Override
     public String getFormat() {
-        return message;
+        return getFormattedMessage();
     }
 
     /**
@@ -84,12 +103,12 @@ public class SimpleMessage implements Message, 
StringBuilderFormattable {
 
         final SimpleMessage that = (SimpleMessage) o;
 
-        return !(message != null ? !message.equals(that.message) : 
that.message != null);
+        return !(charSequence != null ? 
!charSequence.equals(that.charSequence) : that.charSequence != null);
     }
 
     @Override
     public int hashCode() {
-        return message != null ? message.hashCode() : 0;
+        return charSequence != null ? charSequence.hashCode() : 0;
     }
 
     @Override
@@ -106,4 +125,18 @@ public class SimpleMessage implements Message, 
StringBuilderFormattable {
     public Throwable getThrowable() {
         return null;
     }
+
+    private void writeObject(final ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        if (charSequence instanceof Serializable) {
+            out.writeObject(charSequence);
+        } else {
+            out.writeObject(String.valueOf(charSequence));
+        }
+    }
+
+    private void readObject(final ObjectInputStream in) throws IOException, 
ClassNotFoundException {
+        in.defaultReadObject();
+        charSequence = (CharSequence) in.readObject();
+    }
 }

Reply via email to