Bug 426727: fix logging placeholder calculation
diff --git a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/inject/LoggingExample.java b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/inject/LoggingExample.java
index 3b658f2..4d02a17 100644
--- a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/inject/LoggingExample.java
+++ b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/inject/LoggingExample.java
@@ -43,6 +43,7 @@
Logs.trace( "{}{}", "a", "b" );
Logs.trace( "{{}}{{}}", null, null );
Logs.trace( "{}-{}", "a", "b" );
+ Logs.trace( "<>-{}", "a", "b" );
Logs.trace( "{} {}", new BadValue(), new BadValue() );
@@ -64,6 +65,7 @@
Logs.warn( "{}{}", "a", "b" );
Logs.warn( "{{}}{{}}", null, null );
Logs.warn( "{}-{}", "a", "b" );
+ Logs.warn( "<>-{}", "a", "b" );
Logs.warn( "{} {}", new BadValue(), new BadValue() );
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/Logs.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/Logs.java
index f6018ec..a4420cd 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/Logs.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/Logs.java
@@ -226,19 +226,28 @@
*/
private static String format( final String format, final Object arg )
{
+ final int len = format.length();
boolean detailed = true;
- int cursor = format.indexOf( "{}" ); // replaced with String.valueOf
- if ( cursor < 0 )
+ int cursor = 0;
+ for ( char prevChar = ' ', currChar; cursor < len; prevChar = currChar, cursor++ )
{
- cursor = format.indexOf( "<>" ); // use identityToString instead
- detailed = false;
+ currChar = format.charAt( cursor );
+ if ( prevChar == '{' && currChar == '}' )
+ {
+ break; // replace anchor with String.valueOf
+ }
+ if ( prevChar == '<' && currChar == '>' )
+ {
+ detailed = false;
+ break; // use Logs.identityToString instead
+ }
}
- if ( cursor < 0 )
+ if ( cursor >= len )
{
return format;
}
final StringBuilder buf = new StringBuilder();
- if ( cursor > 0 )
+ if ( --cursor > 0 )
{
buf.append( format.substring( 0, cursor ) );
}
@@ -251,9 +260,9 @@
buf.append( e );
}
cursor += 2;
- if ( cursor < format.length() )
+ if ( cursor < len )
{
- buf.append( format.substring( cursor, format.length() ) );
+ buf.append( format.substring( cursor, len ) );
}
return buf.toString();
}