org_eclipse_lemminx_extensions_catalog_XMLCatalogExtensionTest_java
org.apache.xerces.impl.xs.traversers.XSAttributeChecker
private Object validate(Object[] objectArray, String string, String string2, int n, XSDocumentInfo xSDocumentInfo) throws InvalidDatatypeValueException {
        if (string2 == null) {
            return null;
        }
        String string3 = XMLChar.trim(string2);
        Vector<QName> vector = null;
        switch (n) {
            case -15: {
                if (string3.equals("false") || string3.equals("0")) {
                    vector = Boolean.FALSE;
                    break;
                }
                if (string3.equals("true") || string3.equals("1")) {
                    vector = Boolean.TRUE;
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{string3, "boolean"});
            }
            case -16: {
                try {
                    if (string3.length() > 0 && string3.charAt(0) == '+') {
                        string3 = string3.substring(1);
                    }
                    vector = fXIntPool.getXInt(Integer.parseInt(string3));
                }
                catch (NumberFormatException numberFormatException) {
                    throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{string3, "nonNegativeInteger"});
                }
                if (((XInt)((Object)vector)).intValue() >= 0) break;
                throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{string3, "nonNegativeInteger"});
            }
            case -17: {
                try {
                    if (string3.length() > 0 && string3.charAt(0) == '+') {
                        string3 = string3.substring(1);
                    }
                    vector = fXIntPool.getXInt(Integer.parseInt(string3));
                }
                catch (NumberFormatException numberFormatException) {
                    throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{string3, "positiveInteger"});
                }
                if (((XInt)((Object)vector)).intValue() > 0) break;
                throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{string3, "positiveInteger"});
            }
            case -1: {
                int n2 = 0;
                if (string3.equals("#all")) {
                    n2 = 31;
                } else {
                    StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                    while (stringTokenizer.hasMoreTokens()) {
                        String string4 = stringTokenizer.nextToken();
                        if (string4.equals("extension")) {
                            n2 |= 1;
                            continue;
                        }
                        if (string4.equals("restriction")) {
                            n2 |= 2;
                            continue;
                        }
                        if (string4.equals("substitution")) {
                            n2 |= 4;
                            continue;
                        }
                        throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "(#all | List of (extension | restriction | substitution))"});
                    }
                }
                vector = fXIntPool.getXInt(n2);
                break;
            }
            case -3: 
            case -2: {
                int n3 = 0;
                if (string3.equals("#all")) {
                    n3 = 31;
                } else {
                    StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                    while (stringTokenizer.hasMoreTokens()) {
                        String string5 = stringTokenizer.nextToken();
                        if (string5.equals("extension")) {
                            n3 |= 1;
                            continue;
                        }
                        if (string5.equals("restriction")) {
                            n3 |= 2;
                            continue;
                        }
                        throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "(#all | List of (extension | restriction))"});
                    }
                }
                vector = fXIntPool.getXInt(n3);
                break;
            }
            case -4: {
                int n4 = 0;
                if (string3.equals("#all")) {
                    n4 = 31;
                } else {
                    StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                    while (stringTokenizer.hasMoreTokens()) {
                        String string6 = stringTokenizer.nextToken();
                        if (string6.equals("list")) {
                            n4 |= 0x10;
                            continue;
                        }
                        if (string6.equals("union")) {
                            n4 |= 8;
                            continue;
                        }
                        if (string6.equals("restriction")) {
                            n4 |= 2;
                            continue;
                        }
                        throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "(#all | List of (list | union | restriction))"});
                    }
                }
                vector = fXIntPool.getXInt(n4);
                break;
            }
            case -5: {
                int n5 = 0;
                if (string3.equals("#all")) {
                    n5 = 31;
                } else {
                    StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                    while (stringTokenizer.hasMoreTokens()) {
                        String string7 = stringTokenizer.nextToken();
                        if (string7.equals("extension")) {
                            n5 |= 1;
                            continue;
                        }
                        if (string7.equals("restriction")) {
                            n5 |= 2;
                            continue;
                        }
                        if (string7.equals("list")) {
                            n5 |= 0x10;
                            continue;
                        }
                        if (string7.equals("union")) {
                            n5 |= 8;
                            continue;
                        }
                        throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "(#all | List of (extension | restriction | list | union))"});
                    }
                }
                vector = fXIntPool.getXInt(n5);
                break;
            }
            case -6: {
                if (string3.equals("qualified")) {
                    vector = INT_QUALIFIED;
                    break;
                }
                if (string3.equals("unqualified")) {
                    vector = INT_UNQUALIFIED;
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(qualified | unqualified)"});
            }
            case -7: {
                if (string3.equals("unbounded")) {
                    vector = INT_UNBOUNDED;
                    break;
                }
                try {
                    vector = this.validate(objectArray, string, string3, -16, xSDocumentInfo);
                    break;
                }
                catch (NumberFormatException numberFormatException) {
                    throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "(nonNegativeInteger | unbounded)"});
                }
            }
            case -8: {
                if (string3.equals("1")) {
                    vector = fXIntPool.getXInt(1);
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(1)"});
            }
            case -9: {
                Vector<QName> vector2 = new Vector<QName>();
                try {
                    StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                    while (stringTokenizer.hasMoreTokens()) {
                        String string8 = stringTokenizer.nextToken();
                        QName qName = (QName)fExtraDVs[2].validate(string8, (ValidationContext)xSDocumentInfo.fValidationContext, null);
                        if (qName.prefix == XMLSymbols.EMPTY_STRING && qName.uri == null && xSDocumentInfo.fIsChameleonSchema) {
                            qName.uri = xSDocumentInfo.fTargetNamespace;
                        }
                        vector2.addElement(qName);
                    }
                    vector = vector2;
                    break;
                }
                catch (InvalidDatatypeValueException invalidDatatypeValueException) {
                    throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.2", new Object[]{string3, "(List of QName)"});
                }
            }
            case -10: {
                if (string3.equals("0")) {
                    vector = fXIntPool.getXInt(0);
                    break;
                }
                if (string3.equals("1")) {
                    vector = fXIntPool.getXInt(1);
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(0 | 1)"});
            }
            case -11: {
                if (string3.equals("##any")) {
                    vector = INT_ANY_ANY;
                    break;
                }
                if (string3.equals("##other")) {
                    vector = INT_ANY_NOT;
                    String[] stringArray = new String[]{xSDocumentInfo.fTargetNamespace, null};
                    objectArray[XSAttributeChecker.ATTIDX_NAMESPACE_LIST] = stringArray;
                    break;
                }
                vector = INT_ANY_LIST;
                this.fNamespaceList.removeAllElements();
                StringTokenizer stringTokenizer = new StringTokenizer(string3, " \n\t\r");
                try {
                    while (stringTokenizer.hasMoreTokens()) {
                        String string9;
                        String string10 = stringTokenizer.nextToken();
                        if (string10.equals("##local")) {
                            string9 = null;
                        } else if (string10.equals("##targetNamespace")) {
                            string9 = xSDocumentInfo.fTargetNamespace;
                        } else {
                            fExtraDVs[0].validate(string10, (ValidationContext)xSDocumentInfo.fValidationContext, null);
                            string9 = this.fSymbolTable.addSymbol(string10);
                        }
                        if (this.fNamespaceList.contains(string9)) continue;
                        this.fNamespaceList.addElement(string9);
                    }
                }
                catch (InvalidDatatypeValueException invalidDatatypeValueException) {
                    throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.3", new Object[]{string3, "((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )"});
                }
                int n6 = this.fNamespaceList.size();
                Object[] objectArray2 = new String[n6];
                this.fNamespaceList.copyInto(objectArray2);
                objectArray[XSAttributeChecker.ATTIDX_NAMESPACE_LIST] = objectArray2;
                break;
            }
            case -12: {
                if (string3.equals("strict")) {
                    vector = INT_ANY_STRICT;
                    break;
                }
                if (string3.equals("lax")) {
                    vector = INT_ANY_LAX;
                    break;
                }
                if (string3.equals("skip")) {
                    vector = INT_ANY_SKIP;
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(lax | skip | strict)"});
            }
            case -13: {
                if (string3.equals("optional")) {
                    vector = INT_USE_OPTIONAL;
                    break;
                }
                if (string3.equals("required")) {
                    vector = INT_USE_REQUIRED;
                    break;
                }
                if (string3.equals("prohibited")) {
                    vector = INT_USE_PROHIBITED;
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(optional | prohibited | required)"});
            }
            case -14: {
                if (string3.equals("preserve")) {
                    vector = INT_WS_PRESERVE;
                    break;
                }
                if (string3.equals("replace")) {
                    vector = INT_WS_REPLACE;
                    break;
                }
                if (string3.equals("collapse")) {
                    vector = INT_WS_COLLAPSE;
                    break;
                }
                throw new InvalidDatatypeValueException("cvc-enumeration-valid", new Object[]{string3, "(preserve | replace | collapse)"});
            }
        }
        return vector;
    }
 -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Integer.parseInt(java.lang.String): int
 [CALL] [CALL] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] -> java.lang.String.charAt(int): char [CALL] [EXIT] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Integer.parseInt(java.lang.String): int [CALL] [EXIT] [CALL] [EXIT] [EXIT]