in org.eclipse.sisu.inject/src/org/eclipse/sisu/space/FileEntryIterator.java [86:124]
static File toFile( final URL url )
{
final StringBuilder buf = new StringBuilder();
final String authority = url.getAuthority();
if ( null != authority && authority.length() > 0 )
{
buf.append( File.separatorChar ).append( File.separatorChar ).append( authority );
}
final String path = url.getPath();
for ( int i = 0, length = path.length(); i < length; i++ )
{
final char c = path.charAt( i );
if ( '/' == c )
{
buf.append( File.separatorChar );
}
else if ( '%' == c && i < length - 2 )
{
final int hi = Character.digit( path.charAt( i + 1 ), 16 );
final int lo = Character.digit( path.charAt( i + 2 ), 16 );
if ( hi >= 0 && lo >= 0 )
{
buf.append( (char) ( hi << 4 | lo ) );
i += 2;
}
else
{
buf.append( '%' );
}
}
else
{
buf.append( c );
}
}
return new File( buf.toString() );
}