final class ParameterFormatter
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private static char |
DELIM_START |
private static char |
DELIM_STOP |
(package private) static java.lang.String |
ERROR_MSG_SEPARATOR
Separator for error messages.
|
(package private) static java.lang.String |
ERROR_PREFIX
Prefix for errors.
|
(package private) static java.lang.String |
ERROR_SEPARATOR
Separator for errors.
|
(package private) static java.lang.String |
ERROR_SUFFIX
Suffix for errors.
|
private static char |
ESCAPE_CHAR |
(package private) static java.lang.String |
RECURSION_PREFIX
Prefix for recursion.
|
(package private) static java.lang.String |
RECURSION_SUFFIX
Suffix for recursion.
|
private static java.lang.ThreadLocal<java.text.SimpleDateFormat> |
threadLocalSimpleDateFormat |
Modifier | Constructor and Description |
---|---|
private |
ParameterFormatter() |
Modifier and Type | Method and Description |
---|---|
private static void |
appendArray(java.lang.Object o,
java.lang.StringBuilder str,
java.util.Set<java.lang.String> dejaVu,
java.lang.Class<?> oClass) |
private static void |
appendCollection(java.lang.Object o,
java.lang.StringBuilder str,
java.util.Set<java.lang.String> dejaVu) |
private static boolean |
appendDate(java.lang.Object o,
java.lang.StringBuilder str) |
private static void |
appendMap(java.lang.Object o,
java.lang.StringBuilder str,
java.util.Set<java.lang.String> dejaVu) |
private static void |
appendPotentiallyRecursiveValue(java.lang.Object o,
java.lang.StringBuilder str,
java.util.Set<java.lang.String> dejaVu) |
private static boolean |
appendSpecialTypes(java.lang.Object o,
java.lang.StringBuilder str) |
(package private) static int |
countArgumentPlaceholders(java.lang.String messagePattern)
Counts the number of unescaped placeholders in the given messagePattern.
|
(package private) static int |
countArgumentPlaceholders2(java.lang.String messagePattern,
int[] indices)
Counts the number of unescaped placeholders in the given messagePattern.
|
(package private) static int |
countArgumentPlaceholders3(char[] messagePattern,
int length,
int[] indices)
Counts the number of unescaped placeholders in the given messagePattern.
|
(package private) static java.lang.String |
deepToString(java.lang.Object o)
This method performs a deep toString of the given Object.
|
(package private) static java.lang.String |
format(java.lang.String messagePattern,
java.lang.Object[] arguments)
Replace placeholders in the given messagePattern with arguments.
|
(package private) static void |
formatMessage(java.lang.StringBuilder buffer,
java.lang.String messagePattern,
java.lang.Object[] arguments,
int argCount)
Replace placeholders in the given messagePattern with arguments.
|
(package private) static void |
formatMessage2(java.lang.StringBuilder buffer,
java.lang.String messagePattern,
java.lang.Object[] arguments,
int argCount,
int[] indices)
Replace placeholders in the given messagePattern with arguments.
|
(package private) static void |
formatMessage3(java.lang.StringBuilder buffer,
char[] messagePattern,
int patternLength,
java.lang.Object[] arguments,
int argCount,
int[] indices)
Replace placeholders in the given messagePattern with arguments.
|
private static java.text.SimpleDateFormat |
getSimpleDateFormat() |
private static void |
handleErrorInObjectToString(java.lang.Object o,
java.lang.StringBuilder str,
java.lang.Throwable t) |
private static void |
handleLastChar(java.lang.StringBuilder buffer,
int escapeCounter,
char curChar)
Processes the last unprocessed character and returns the resulting position in the result char array.
|
private static void |
handleLiteralChar(java.lang.StringBuilder buffer,
int escapeCounter,
char curChar)
Processes a literal char (neither an '\' escape char nor a "{}" delimiter pair) and returns the resulting
position.
|
private static void |
handleRemainingCharIfAny(java.lang.String messagePattern,
int len,
java.lang.StringBuilder buffer,
int escapeCounter,
int i)
Detects whether the message pattern has been fully processed or if an unprocessed character remains and processes
it if necessary, returning the resulting position in the result char array.
|
(package private) static java.lang.String |
identityToString(java.lang.Object obj)
This method returns the same as if Object.toString() would not have been
overridden in obj.
|
private static boolean |
isDelimPair(char curChar,
java.lang.String messagePattern,
int curCharIndex)
Returns
true if the specified char and the char at curCharIndex + 1 in the specified message
pattern together form a "{}" delimiter pair, returns false otherwise. |
private static boolean |
isMaybeRecursive(java.lang.Object o)
Returns
true if the specified object is an array, a Map or a Collection. |
private static boolean |
isOdd(int number)
Returns
true if the specified parameter is odd. |
(package private) static void |
recursiveDeepToString(java.lang.Object o,
java.lang.StringBuilder str,
java.util.Set<java.lang.String> dejaVu)
This method performs a deep toString of the given Object.
|
private static void |
tryObjectToString(java.lang.Object o,
java.lang.StringBuilder str) |
private static void |
writeArgOrDelimPair(java.lang.Object[] arguments,
int argCount,
int currentArgument,
java.lang.StringBuilder buffer)
Appends the argument at the specified argument index (or, if no such argument exists, the "{}" delimiter pair) to
the specified result char array at the specified position and returns the resulting position.
|
private static void |
writeDelimPair(java.lang.StringBuilder buffer)
Writes "{}" to the specified result array at the specified position and returns the resulting position.
|
private static void |
writeEscapedEscapeChars(int escapeCounter,
java.lang.StringBuilder buffer)
Writes a '\' char to the specified result array (starting at the specified position) for each pair of
'\' escape chars encountered in the message format and returns the resulting position.
|
private static void |
writeUnescapedEscapeChars(int escapeCounter,
java.lang.StringBuilder buffer)
Writes the specified number of '\' chars to the specified result array (starting at the specified position) and
returns the resulting position.
|
static final java.lang.String RECURSION_PREFIX
static final java.lang.String RECURSION_SUFFIX
static final java.lang.String ERROR_PREFIX
static final java.lang.String ERROR_SEPARATOR
static final java.lang.String ERROR_MSG_SEPARATOR
static final java.lang.String ERROR_SUFFIX
private static final char DELIM_START
private static final char DELIM_STOP
private static final char ESCAPE_CHAR
private static java.lang.ThreadLocal<java.text.SimpleDateFormat> threadLocalSimpleDateFormat
static int countArgumentPlaceholders(java.lang.String messagePattern)
messagePattern
- the message pattern to be analyzed.static int countArgumentPlaceholders2(java.lang.String messagePattern, int[] indices)
messagePattern
- the message pattern to be analyzed.static int countArgumentPlaceholders3(char[] messagePattern, int length, int[] indices)
messagePattern
- the message pattern to be analyzed.static java.lang.String format(java.lang.String messagePattern, java.lang.Object[] arguments)
messagePattern
- the message pattern containing placeholders.arguments
- the arguments to be used to replace placeholders.static void formatMessage2(java.lang.StringBuilder buffer, java.lang.String messagePattern, java.lang.Object[] arguments, int argCount, int[] indices)
buffer
- the buffer to write the formatted message intomessagePattern
- the message pattern containing placeholders.arguments
- the arguments to be used to replace placeholders.static void formatMessage3(java.lang.StringBuilder buffer, char[] messagePattern, int patternLength, java.lang.Object[] arguments, int argCount, int[] indices)
buffer
- the buffer to write the formatted message intomessagePattern
- the message pattern containing placeholders.arguments
- the arguments to be used to replace placeholders.static void formatMessage(java.lang.StringBuilder buffer, java.lang.String messagePattern, java.lang.Object[] arguments, int argCount)
buffer
- the buffer to write the formatted message intomessagePattern
- the message pattern containing placeholders.arguments
- the arguments to be used to replace placeholders.private static boolean isDelimPair(char curChar, java.lang.String messagePattern, int curCharIndex)
true
if the specified char and the char at curCharIndex + 1
in the specified message
pattern together form a "{}" delimiter pair, returns false
otherwise.private static void handleRemainingCharIfAny(java.lang.String messagePattern, int len, java.lang.StringBuilder buffer, int escapeCounter, int i)
private static void handleLastChar(java.lang.StringBuilder buffer, int escapeCounter, char curChar)
private static void handleLiteralChar(java.lang.StringBuilder buffer, int escapeCounter, char curChar)
private static void writeDelimPair(java.lang.StringBuilder buffer)
private static boolean isOdd(int number)
true
if the specified parameter is odd.private static void writeEscapedEscapeChars(int escapeCounter, java.lang.StringBuilder buffer)
private static void writeUnescapedEscapeChars(int escapeCounter, java.lang.StringBuilder buffer)
private static void writeArgOrDelimPair(java.lang.Object[] arguments, int argCount, int currentArgument, java.lang.StringBuilder buffer)
static java.lang.String deepToString(java.lang.Object o)
It should be noted that neither AbstractMap.toString() nor AbstractCollection.toString() implement such a behavior. They only check if the container is directly contained in itself, but not if a contained container contains the original one. Because of that, Arrays.toString(Object[]) isn't safe either. Confusing? Just read the last paragraph again and check the respective toString() implementation.
This means, in effect, that logging would produce a usable output even if an ordinary System.out.println(o) would produce a relatively hard-to-debug StackOverflowError.
o
- The object.static void recursiveDeepToString(java.lang.Object o, java.lang.StringBuilder str, java.util.Set<java.lang.String> dejaVu)
dejaVu is used in case of those container types to prevent an endless recursion.
It should be noted that neither AbstractMap.toString() nor AbstractCollection.toString() implement such a behavior. They only check if the container is directly contained in itself, but not if a contained container contains the original one. Because of that, Arrays.toString(Object[]) isn't safe either. Confusing? Just read the last paragraph again and check the respective toString() implementation.
This means, in effect, that logging would produce a usable output even if an ordinary System.out.println(o) would produce a relatively hard-to-debug StackOverflowError.
o
- the Object to convert into a Stringstr
- the StringBuilder that o will be appended todejaVu
- a list of container identities that were already used.private static boolean appendSpecialTypes(java.lang.Object o, java.lang.StringBuilder str)
private static boolean appendDate(java.lang.Object o, java.lang.StringBuilder str)
private static java.text.SimpleDateFormat getSimpleDateFormat()
private static boolean isMaybeRecursive(java.lang.Object o)
true
if the specified object is an array, a Map or a Collection.private static void appendPotentiallyRecursiveValue(java.lang.Object o, java.lang.StringBuilder str, java.util.Set<java.lang.String> dejaVu)
private static void appendArray(java.lang.Object o, java.lang.StringBuilder str, java.util.Set<java.lang.String> dejaVu, java.lang.Class<?> oClass)
private static void appendMap(java.lang.Object o, java.lang.StringBuilder str, java.util.Set<java.lang.String> dejaVu)
private static void appendCollection(java.lang.Object o, java.lang.StringBuilder str, java.util.Set<java.lang.String> dejaVu)
private static void tryObjectToString(java.lang.Object o, java.lang.StringBuilder str)
private static void handleErrorInObjectToString(java.lang.Object o, java.lang.StringBuilder str, java.lang.Throwable t)
static java.lang.String identityToString(java.lang.Object obj)
Note that this isn't 100% secure as collisions can always happen with hash codes.
Copied from Object.hashCode():
As much as is reasonably practical, the hashCode method defined by
class Object
does return distinct integers for distinct
objects. (This is typically implemented by converting the internal
address of the object into an integer, but this implementation
technique is not required by the Java™ programming language.)
obj
- the Object that is to be converted into an identity string.