public CPSignature getCPSignature()

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;
    }