in src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java [206:229]
private static String decodeString(ByteBuffer buf) {
int size = buf.getChar();
// Explicit cast for compatibility with covariant return type on JDK 9's ByteBuffer
@SuppressWarnings("RedundantCast")
int oldLimit = ((Buffer) buf).limit();
((Buffer) buf).limit(buf.position() + size);
StringBuilder sb = new StringBuilder(size + (size >> 1) + 16);
while (buf.hasRemaining()) {
byte b = buf.get();
if (b > 0) {
sb.append((char) b);
} else {
int b2 = buf.get();
if ((b & OXF0) != OXE0) {
sb.append((char) ((b & 0x1F) << 6 | b2 & OX3F));
} else {
int b3 = buf.get();
sb.append((char) ((b & 0x0F) << 12 | (b2 & OX3F) << 6 | b3 & OX3F));
}
}
}
((Buffer) buf).limit(oldLimit);
return sb.toString();
}