in src/main/java/org/apache/commons/compress/harmony/pack200/CpBands.java [276:328]
public CPSignature getCPSignature(final String signature) {
if (signature == null) {
return null;
}
CPSignature cpS = stringsToCpSignature.get(signature);
if (cpS == null) {
final List<CPClass> cpClasses = new ArrayList<>();
final CPUTF8 signatureUTF8;
if (signature.length() > 1 && signature.indexOf('L') != -1) {
final List<String> classes = new ArrayList<>();
final char[] chars = signature.toCharArray();
final StringBuilder signatureString = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
signatureString.append(chars[i]);
if (chars[i] == 'L') {
final StringBuilder className = new StringBuilder();
for (int j = i + 1; j < chars.length; j++) {
final char c = chars[j];
if (!Character.isLetter(c) && !Character.isDigit(c) && c != '/' && c != '$' && c != '_') {
classes.add(className.toString());
i = j - 1;
break;
}
className.append(c);
}
}
}
removeCpUtf8(signature);
for (String className : classes) {
CPClass cpClass = null;
if (className != null) {
className = className.replace('.', '/');
cpClass = stringsToCpClass.get(className);
if (cpClass == null) {
final CPUTF8 cpUtf8 = getCPUtf8(className);
cpClass = new CPClass(cpUtf8);
cp_Class.add(cpClass);
stringsToCpClass.put(className, cpClass);
}
}
cpClasses.add(cpClass);
}
signatureUTF8 = getCPUtf8(signatureString.toString());
} else {
signatureUTF8 = getCPUtf8(signature);
}
cpS = new CPSignature(signature, signatureUTF8, cpClasses);
cp_Signature.add(cpS);
stringsToCpSignature.put(signature, cpS);
}
return cpS;
}